diff --git a/assets/Color-6VNJS4EI-APgtbMfN.js b/assets/Color-6VNJS4EI-_bWmNl2W.js similarity index 99% rename from assets/Color-6VNJS4EI-APgtbMfN.js rename to assets/Color-6VNJS4EI-_bWmNl2W.js index 0209dd2c3a..cce645bce7 100644 --- a/assets/Color-6VNJS4EI-APgtbMfN.js +++ b/assets/Color-6VNJS4EI-_bWmNl2W.js @@ -1 +1 @@ -import{n as M,d as ue,T as Me,F as Ce,I as $e,g as Ne}from"./DocsRenderer-NNNQARDV-ONpjav1a.js";import{R as h,r as b}from"./index-TT1qJ6UJ.js";import{g as fe}from"./_commonjsHelpers-4gQjN7DL.js";import{_ as Oe,i as J,a as Ie}from"./_getPrototype-bjD8Yebc.js";import"./iframe-sjDFBNDn.js";import"../sb-preview/runtime.js";import"./react-18-N0svEjlN.js";import"./client-rbWgHzHN.js";import"./index-7vsPyIck.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./bundle.esm-7jAAHVxW.js";import"./index-ogXoivrg.js";import"./index-PPLHz8o0.js";function $(){return($=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}function K(e){var t=b.useRef(e),n=b.useRef(function(r){t.current&&t.current(r)});return t.current=e,n.current}var S=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=1),e>n?n:e0:p.buttons>0)&&o.current?a(ne(o.current,p,l.current)):_(!1)},N=function(){return _(!1)};function _(p){var m=i.current,x=V(o.current),C=p?x.addEventListener:x.removeEventListener;C(m?"touchmove":"mousemove",k),C(m?"touchend":"mouseup",N)}return[function(p){var m=p.nativeEvent,x=o.current;if(x&&(re(m),!function(X,R){return R&&!j(X)}(m,i.current)&&x)){if(j(m)){i.current=!0;var C=m.changedTouches||[];C.length&&(l.current=C[0].identifier)}x.focus(),a(ne(x,m,l.current)),_(!0)}},function(p){var m=p.which||p.keyCode;m<37||m>40||(p.preventDefault(),s({left:m===39?.05:m===37?-.05:0,top:m===40?.05:m===38?-.05:0}))},_]},[s,a]),d=c[0],f=c[1],g=c[2];return b.useEffect(function(){return g},[g]),h.createElement("div",$({},r,{onTouchStart:d,onMouseDown:d,className:"react-colorful__interactive",ref:o,onKeyDown:f,tabIndex:0,role:"slider"}))}),z=function(e){return e.filter(Boolean).join(" ")},ee=function(e){var t=e.color,n=e.left,r=e.top,o=r===void 0?.5:r,a=z(["react-colorful__pointer",e.className]);return h.createElement("div",{className:a,style:{top:100*o+"%",left:100*n+"%"}},h.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},y=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=Math.pow(10,t)),Math.round(n*e)/n},Se={grad:.9,turn:360,rad:360/(2*Math.PI)},Re=function(e){return ge(A(e))},A=function(e){return e[0]==="#"&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?y(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:e.length===8?y(parseInt(e.substring(6,8),16)/255,2):1}},Te=function(e,t){return t===void 0&&(t="deg"),Number(e)*(Se[t]||1)},je=function(e){var t=/hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?Fe({h:Te(t[1],t[2]),s:Number(t[3]),l:Number(t[4]),a:t[5]===void 0?1:Number(t[5])/(t[6]?100:1)}):{h:0,s:0,v:0,a:1}},Fe=function(e){var t=e.s,n=e.l;return{h:e.h,s:(t*=(n<50?n:100-n)/100)>0?2*t/(n+t)*100:0,v:n+t,a:e.a}},ze=function(e){return Pe(de(e))},he=function(e){var t=e.s,n=e.v,r=e.a,o=(200-t)*n/100;return{h:y(e.h),s:y(o>0&&o<200?t*n/100/(o<=100?o:200-o)*100:0),l:y(o/2),a:y(r,2)}},G=function(e){var t=he(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},q=function(e){var t=he(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},de=function(e){var t=e.h,n=e.s,r=e.v,o=e.a;t=t/360*6,n/=100,r/=100;var a=Math.floor(t),s=r*(1-n),l=r*(1-(t-a)*n),i=r*(1-(1-t+a)*n),c=a%6;return{r:y(255*[r,l,s,s,i,r][c]),g:y(255*[i,r,r,l,s,s][c]),b:y(255*[s,s,i,r,r,l][c]),a:y(o,2)}},He=function(e){var t=/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?ge({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===void 0?1:Number(t[7])/(t[8]?100:1)}):{h:0,s:0,v:0,a:1}},H=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},Pe=function(e){var t=e.r,n=e.g,r=e.b,o=e.a,a=o<1?H(y(255*o)):"";return"#"+H(t)+H(n)+H(r)+a},ge=function(e){var t=e.r,n=e.g,r=e.b,o=e.a,a=Math.max(t,n,r),s=a-Math.min(t,n,r),l=s?a===t?(n-r)/s:a===n?2+(r-t)/s:4+(t-n)/s:0;return{h:y(60*(l<0?l+6:l)),s:y(a?s/a*100:0),v:y(a/255*100),a:o}},me=h.memo(function(e){var t=e.hue,n=e.onChange,r=z(["react-colorful__hue",e.className]);return h.createElement("div",{className:r},h.createElement(Z,{onMove:function(o){n({h:360*o.left})},onKey:function(o){n({h:S(t+360*o.left,0,360)})},"aria-label":"Hue","aria-valuenow":y(t),"aria-valuemax":"360","aria-valuemin":"0"},h.createElement(ee,{className:"react-colorful__hue-pointer",left:t/360,color:G({h:t,s:100,v:100,a:1})})))}),be=h.memo(function(e){var t=e.hsva,n=e.onChange,r={backgroundColor:G({h:t.h,s:100,v:100,a:1})};return h.createElement("div",{className:"react-colorful__saturation",style:r},h.createElement(Z,{onMove:function(o){n({s:100*o.left,v:100-100*o.top})},onKey:function(o){n({s:S(t.s+100*o.left,0,100),v:S(t.v-100*o.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+y(t.s)+"%, Brightness "+y(t.v)+"%"},h.createElement(ee,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:G(t)})))}),ve=function(e,t){if(e===t)return!0;for(var n in e)if(e[n]!==t[n])return!1;return!0},pe=function(e,t){return e.replace(/\s/g,"")===t.replace(/\s/g,"")},Le=function(e,t){return e.toLowerCase()===t.toLowerCase()||ve(A(e),A(t))};function ye(e,t,n){var r=K(n),o=b.useState(function(){return e.toHsva(t)}),a=o[0],s=o[1],l=b.useRef({color:t,hsva:a});b.useEffect(function(){if(!e.equal(t,l.current.color)){var c=e.toHsva(t);l.current={hsva:c,color:t},s(c)}},[t,e]),b.useEffect(function(){var c;ve(a,l.current.hsva)||e.equal(c=e.fromHsva(a),l.current.color)||(l.current={hsva:a,color:c},r(c))},[a,e,r]);var i=b.useCallback(function(c){s(function(d){return Object.assign({},d,c)})},[]);return[a,i]}var qe=typeof window<"u"?b.useLayoutEffect:b.useEffect,Be=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},oe=new Map,xe=function(e){qe(function(){var t=e.current?e.current.ownerDocument:document;if(t!==void 0&&!oe.has(t)){var n=t.createElement("style");n.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`,oe.set(t,n);var r=Be();r&&n.setAttribute("nonce",r),t.head.appendChild(n)}},[])},We=function(e){var t=e.className,n=e.colorModel,r=e.color,o=r===void 0?n.defaultColor:r,a=e.onChange,s=Q(e,["className","colorModel","color","onChange"]),l=b.useRef(null);xe(l);var i=ye(n,o,a),c=i[0],d=i[1],f=z(["react-colorful",t]);return h.createElement("div",$({},s,{ref:l,className:f}),h.createElement(be,{hsva:c,onChange:d}),h.createElement(me,{hue:c.h,onChange:d,className:"react-colorful__last-control"}))},Xe={defaultColor:"000",toHsva:Re,fromHsva:function(e){return ze({h:e.h,s:e.s,v:e.v,a:1})},equal:Le},De=function(e){return h.createElement(We,$({},e,{colorModel:Xe}))},Ke=function(e){var t=e.className,n=e.hsva,r=e.onChange,o={backgroundImage:"linear-gradient(90deg, "+q(Object.assign({},n,{a:0}))+", "+q(Object.assign({},n,{a:1}))+")"},a=z(["react-colorful__alpha",t]),s=y(100*n.a);return h.createElement("div",{className:a},h.createElement("div",{className:"react-colorful__alpha-gradient",style:o}),h.createElement(Z,{onMove:function(l){r({a:l.left})},onKey:function(l){r({a:S(n.a+l.left)})},"aria-label":"Alpha","aria-valuetext":s+"%","aria-valuenow":s,"aria-valuemin":"0","aria-valuemax":"100"},h.createElement(ee,{className:"react-colorful__alpha-pointer",left:n.a,color:q(n)})))},we=function(e){var t=e.className,n=e.colorModel,r=e.color,o=r===void 0?n.defaultColor:r,a=e.onChange,s=Q(e,["className","colorModel","color","onChange"]),l=b.useRef(null);xe(l);var i=ye(n,o,a),c=i[0],d=i[1],f=z(["react-colorful",t]);return h.createElement("div",$({},s,{ref:l,className:f}),h.createElement(be,{hsva:c,onChange:d}),h.createElement(me,{hue:c.h,onChange:d}),h.createElement(Ke,{hsva:c,onChange:d,className:"react-colorful__last-control"}))},Ve={defaultColor:"hsla(0, 0%, 0%, 1)",toHsva:je,fromHsva:q,equal:pe},Ae=function(e){return h.createElement(we,$({},e,{colorModel:Ve}))},Ge={defaultColor:"rgba(0, 0, 0, 1)",toHsva:He,fromHsva:function(e){var t=de(e);return"rgba("+t.r+", "+t.g+", "+t.b+", "+t.a+")"},equal:pe},Ue=function(e){return h.createElement(we,$({},e,{colorModel:Ge}))},Ye={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};const F=Ye,ke={};for(const e of Object.keys(F))ke[F[e]]=e;const u={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};var _e=u;for(const e of Object.keys(u)){if(!("channels"in u[e]))throw new Error("missing channels property: "+e);if(!("labels"in u[e]))throw new Error("missing channel labels property: "+e);if(u[e].labels.length!==u[e].channels)throw new Error("channel and label counts mismatch: "+e);const{channels:t,labels:n}=u[e];delete u[e].channels,delete u[e].labels,Object.defineProperty(u[e],"channels",{value:t}),Object.defineProperty(u[e],"labels",{value:n})}u.rgb.hsl=function(e){const t=e[0]/255,n=e[1]/255,r=e[2]/255,o=Math.min(t,n,r),a=Math.max(t,n,r),s=a-o;let l,i;a===o?l=0:t===a?l=(n-r)/s:n===a?l=2+(r-t)/s:r===a&&(l=4+(t-n)/s),l=Math.min(l*60,360),l<0&&(l+=360);const c=(o+a)/2;return a===o?i=0:c<=.5?i=s/(a+o):i=s/(2-a-o),[l,i*100,c*100]};u.rgb.hsv=function(e){let t,n,r,o,a;const s=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(s,l,i),d=c-Math.min(s,l,i),f=function(g){return(c-g)/6/d+1/2};return d===0?(o=0,a=0):(a=d/c,t=f(s),n=f(l),r=f(i),s===c?o=r-n:l===c?o=1/3+t-r:i===c&&(o=2/3+n-t),o<0?o+=1:o>1&&(o-=1)),[o*360,a*100,c*100]};u.rgb.hwb=function(e){const t=e[0],n=e[1];let r=e[2];const o=u.rgb.hsl(e)[0],a=1/255*Math.min(t,Math.min(n,r));return r=1-1/255*Math.max(t,Math.max(n,r)),[o,a*100,r*100]};u.rgb.cmyk=function(e){const t=e[0]/255,n=e[1]/255,r=e[2]/255,o=Math.min(1-t,1-n,1-r),a=(1-t-o)/(1-o)||0,s=(1-n-o)/(1-o)||0,l=(1-r-o)/(1-o)||0;return[a*100,s*100,l*100,o*100]};function Je(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}u.rgb.keyword=function(e){const t=ke[e];if(t)return t;let n=1/0,r;for(const o of Object.keys(F)){const a=F[o],s=Je(e,a);s.04045?((t+.055)/1.055)**2.4:t/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92;const o=t*.4124+n*.3576+r*.1805,a=t*.2126+n*.7152+r*.0722,s=t*.0193+n*.1192+r*.9505;return[o*100,a*100,s*100]};u.rgb.lab=function(e){const t=u.rgb.xyz(e);let n=t[0],r=t[1],o=t[2];n/=95.047,r/=100,o/=108.883,n=n>.008856?n**(1/3):7.787*n+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;const a=116*r-16,s=500*(n-r),l=200*(r-o);return[a,s,l]};u.hsl.rgb=function(e){const t=e[0]/360,n=e[1]/100,r=e[2]/100;let o,a,s;if(n===0)return s=r*255,[s,s,s];r<.5?o=r*(1+n):o=r+n-r*n;const l=2*r-o,i=[0,0,0];for(let c=0;c<3;c++)a=t+1/3*-(c-1),a<0&&a++,a>1&&a--,6*a<1?s=l+(o-l)*6*a:2*a<1?s=o:3*a<2?s=l+(o-l)*(2/3-a)*6:s=l,i[c]=s*255;return i};u.hsl.hsv=function(e){const t=e[0];let n=e[1]/100,r=e[2]/100,o=n;const a=Math.max(r,.01);r*=2,n*=r<=1?r:2-r,o*=a<=1?a:2-a;const s=(r+n)/2,l=r===0?2*o/(a+o):2*n/(r+n);return[t,l*100,s*100]};u.hsv.rgb=function(e){const t=e[0]/60,n=e[1]/100;let r=e[2]/100;const o=Math.floor(t)%6,a=t-Math.floor(t),s=255*r*(1-n),l=255*r*(1-n*a),i=255*r*(1-n*(1-a));switch(r*=255,o){case 0:return[r,i,s];case 1:return[l,r,s];case 2:return[s,r,i];case 3:return[s,l,r];case 4:return[i,s,r];case 5:return[r,s,l]}};u.hsv.hsl=function(e){const t=e[0],n=e[1]/100,r=e[2]/100,o=Math.max(r,.01);let a,s;s=(2-n)*r;const l=(2-n)*o;return a=n*o,a/=l<=1?l:2-l,a=a||0,s/=2,[t,a*100,s*100]};u.hwb.rgb=function(e){const t=e[0]/360;let n=e[1]/100,r=e[2]/100;const o=n+r;let a;o>1&&(n/=o,r/=o);const s=Math.floor(6*t),l=1-r;a=6*t-s,s&1&&(a=1-a);const i=n+a*(l-n);let c,d,f;switch(s){default:case 6:case 0:c=l,d=i,f=n;break;case 1:c=i,d=l,f=n;break;case 2:c=n,d=l,f=i;break;case 3:c=n,d=i,f=l;break;case 4:c=i,d=n,f=l;break;case 5:c=l,d=n,f=i;break}return[c*255,d*255,f*255]};u.cmyk.rgb=function(e){const t=e[0]/100,n=e[1]/100,r=e[2]/100,o=e[3]/100,a=1-Math.min(1,t*(1-o)+o),s=1-Math.min(1,n*(1-o)+o),l=1-Math.min(1,r*(1-o)+o);return[a*255,s*255,l*255]};u.xyz.rgb=function(e){const t=e[0]/100,n=e[1]/100,r=e[2]/100;let o,a,s;return o=t*3.2406+n*-1.5372+r*-.4986,a=t*-.9689+n*1.8758+r*.0415,s=t*.0557+n*-.204+r*1.057,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=Math.min(Math.max(0,o),1),a=Math.min(Math.max(0,a),1),s=Math.min(Math.max(0,s),1),[o*255,a*255,s*255]};u.xyz.lab=function(e){let t=e[0],n=e[1],r=e[2];t/=95.047,n/=100,r/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,r=r>.008856?r**(1/3):7.787*r+16/116;const o=116*n-16,a=500*(t-n),s=200*(n-r);return[o,a,s]};u.lab.xyz=function(e){const t=e[0],n=e[1],r=e[2];let o,a,s;a=(t+16)/116,o=n/500+a,s=a-r/200;const l=a**3,i=o**3,c=s**3;return a=l>.008856?l:(a-16/116)/7.787,o=i>.008856?i:(o-16/116)/7.787,s=c>.008856?c:(s-16/116)/7.787,o*=95.047,a*=100,s*=108.883,[o,a,s]};u.lab.lch=function(e){const t=e[0],n=e[1],r=e[2];let o;o=Math.atan2(r,n)*360/2/Math.PI,o<0&&(o+=360);const s=Math.sqrt(n*n+r*r);return[t,s,o]};u.lch.lab=function(e){const t=e[0],n=e[1],o=e[2]/360*2*Math.PI,a=n*Math.cos(o),s=n*Math.sin(o);return[t,a,s]};u.rgb.ansi16=function(e,t=null){const[n,r,o]=e;let a=t===null?u.rgb.hsv(e)[2]:t;if(a=Math.round(a/50),a===0)return 30;let s=30+(Math.round(o/255)<<2|Math.round(r/255)<<1|Math.round(n/255));return a===2&&(s+=60),s};u.hsv.ansi16=function(e){return u.rgb.ansi16(u.hsv.rgb(e),e[2])};u.rgb.ansi256=function(e){const t=e[0],n=e[1],r=e[2];return t===n&&n===r?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(n/255*5)+Math.round(r/255*5)};u.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];const n=(~~(e>50)+1)*.5,r=(t&1)*n*255,o=(t>>1&1)*n*255,a=(t>>2&1)*n*255;return[r,o,a]};u.ansi256.rgb=function(e){if(e>=232){const a=(e-232)*10+8;return[a,a,a]}e-=16;let t;const n=Math.floor(e/36)/5*255,r=Math.floor((t=e%36)/6)/5*255,o=t%6/5*255;return[n,r,o]};u.rgb.hex=function(e){const n=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(n.length)+n};u.hex.rgb=function(e){const t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let n=t[0];t[0].length===3&&(n=n.split("").map(l=>l+l).join(""));const r=parseInt(n,16),o=r>>16&255,a=r>>8&255,s=r&255;return[o,a,s]};u.rgb.hcg=function(e){const t=e[0]/255,n=e[1]/255,r=e[2]/255,o=Math.max(Math.max(t,n),r),a=Math.min(Math.min(t,n),r),s=o-a;let l,i;return s<1?l=a/(1-s):l=0,s<=0?i=0:o===t?i=(n-r)/s%6:o===n?i=2+(r-t)/s:i=4+(t-n)/s,i/=6,i%=1,[i*360,s*100,l*100]};u.hsl.hcg=function(e){const t=e[1]/100,n=e[2]/100,r=n<.5?2*t*n:2*t*(1-n);let o=0;return r<1&&(o=(n-.5*r)/(1-r)),[e[0],r*100,o*100]};u.hsv.hcg=function(e){const t=e[1]/100,n=e[2]/100,r=t*n;let o=0;return r<1&&(o=(n-r)/(1-r)),[e[0],r*100,o*100]};u.hcg.rgb=function(e){const t=e[0]/360,n=e[1]/100,r=e[2]/100;if(n===0)return[r*255,r*255,r*255];const o=[0,0,0],a=t%1*6,s=a%1,l=1-s;let i=0;switch(Math.floor(a)){case 0:o[0]=1,o[1]=s,o[2]=0;break;case 1:o[0]=l,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=s;break;case 3:o[0]=0,o[1]=l,o[2]=1;break;case 4:o[0]=s,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=l}return i=(1-n)*r,[(n*o[0]+i)*255,(n*o[1]+i)*255,(n*o[2]+i)*255]};u.hcg.hsv=function(e){const t=e[1]/100,n=e[2]/100,r=t+n*(1-t);let o=0;return r>0&&(o=t/r),[e[0],o*100,r*100]};u.hcg.hsl=function(e){const t=e[1]/100,r=e[2]/100*(1-t)+.5*t;let o=0;return r>0&&r<.5?o=t/(2*r):r>=.5&&r<1&&(o=t/(2*(1-r))),[e[0],o*100,r*100]};u.hcg.hwb=function(e){const t=e[1]/100,n=e[2]/100,r=t+n*(1-t);return[e[0],(r-t)*100,(1-r)*100]};u.hwb.hcg=function(e){const t=e[1]/100,r=1-e[2]/100,o=r-t;let a=0;return o<1&&(a=(r-o)/(1-o)),[e[0],o*100,a*100]};u.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};u.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};u.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};u.gray.hsl=function(e){return[0,0,e[0]]};u.gray.hsv=u.gray.hsl;u.gray.hwb=function(e){return[0,100,e[0]]};u.gray.cmyk=function(e){return[0,0,0,e[0]]};u.gray.lab=function(e){return[e[0],0,0]};u.gray.hex=function(e){const t=Math.round(e[0]/100*255)&255,r=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(r.length)+r};u.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]};const B=_e;function Qe(){const e={},t=Object.keys(B);for(let n=t.length,r=0;r1&&(n=r),e(n))};return"conversion"in e&&(t.conversion=e.conversion),t}function st(e){const t=function(...n){const r=n[0];if(r==null)return r;r.length>1&&(n=r);const o=e(n);if(typeof o=="object")for(let a=o.length,s=0;s{O[e]={},Object.defineProperty(O[e],"channels",{value:U[e].channels}),Object.defineProperty(O[e],"labels",{value:U[e].labels});const t=rt(e);Object.keys(t).forEach(r=>{const o=t[r];O[e][r]=st(o),O[e][r].raw=at(o)})});var lt=O;const w=fe(lt);var it=Oe,ct=function(){return it.Date.now()},ut=ct,ft=/\s/;function ht(e){for(var t=e.length;t--&&ft.test(e.charAt(t)););return t}var dt=ht,gt=dt,mt=/^\s+/;function bt(e){return e&&e.slice(0,gt(e)+1).replace(mt,"")}var vt=bt,pt=vt,ae=J,yt=Ie,se=NaN,xt=/^[-+]0x[0-9a-f]+$/i,wt=/^0b[01]+$/i,kt=/^0o[0-7]+$/i,_t=parseInt;function Et(e){if(typeof e=="number")return e;if(yt(e))return se;if(ae(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=ae(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=pt(e);var n=wt.test(e);return n||kt.test(e)?_t(e.slice(2),n?2:8):xt.test(e)?se:+e}var Mt=Et,Ct=J,D=ut,le=Mt,$t="Expected a function",Nt=Math.max,Ot=Math.min;function It(e,t,n){var r,o,a,s,l,i,c=0,d=!1,f=!1,g=!0;if(typeof e!="function")throw new TypeError($t);t=le(t)||0,Ct(n)&&(d=!!n.leading,f="maxWait"in n,a=f?Nt(le(n.maxWait)||0,t):a,g="trailing"in n?!!n.trailing:g);function k(v){var E=r,T=o;return r=o=void 0,c=v,s=e.apply(T,E),s}function N(v){return c=v,l=setTimeout(m,t),d?k(v):s}function _(v){var E=v-i,T=v-c,te=t-E;return f?Ot(te,a-T):te}function p(v){var E=v-i,T=v-c;return i===void 0||E>=t||E<0||f&&T>=a}function m(){var v=D();if(p(v))return x(v);l=setTimeout(m,_(v))}function x(v){return l=void 0,g&&r?k(v):(r=o=void 0,s)}function C(){l!==void 0&&clearTimeout(l),c=0,r=i=o=l=void 0}function X(){return l===void 0?s:x(D())}function R(){var v=D(),E=p(v);if(r=arguments,o=this,i=v,E){if(l===void 0)return N(i);if(f)return clearTimeout(l),l=setTimeout(m,t),k(i)}return l===void 0&&(l=setTimeout(m,t)),s}return R.cancel=C,R.flush=X,R}var St=It,Rt=St,Tt=J,jt="Expected a function";function Ft(e,t,n){var r=!0,o=!0;if(typeof e!="function")throw new TypeError(jt);return Tt(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),Rt(e,t,{leading:r,maxWait:t,trailing:o})}var zt=Ft;const Ht=fe(zt);var Pt=M.div({position:"relative",maxWidth:250}),Lt=M(ue)({position:"absolute",zIndex:1,top:4,left:4}),qt=M.div({width:200,margin:5,".react-colorful__saturation":{borderRadius:"4px 4px 0 0"},".react-colorful__hue":{boxShadow:"inset 0 0 0 1px rgb(0 0 0 / 5%)"},".react-colorful__last-control":{borderRadius:"0 0 4px 4px"}}),Bt=M(Me)(({theme:e})=>({fontFamily:e.typography.fonts.base})),Wt=M.div({display:"grid",gridTemplateColumns:"repeat(9, 16px)",gap:6,padding:3,marginTop:5,width:200}),Xt=M.div(({theme:e,active:t})=>({width:16,height:16,boxShadow:t?`${e.appBorderColor} 0 0 0 1px inset, ${e.textMutedColor}50 0 0 0 4px`:`${e.appBorderColor} 0 0 0 1px inset`,borderRadius:e.appBorderRadius})),Dt=`url('data:image/svg+xml;charset=utf-8,')`,ie=({value:e,active:t,onClick:n,style:r,...o})=>{let a=`linear-gradient(${e}, ${e}), ${Dt}, linear-gradient(#fff, #fff)`;return h.createElement(Xt,{...o,active:t,onClick:n,style:{...r,backgroundImage:a}})},Kt=M(Ce.Input)(({theme:e})=>({width:"100%",paddingLeft:30,paddingRight:30,boxSizing:"border-box",fontFamily:e.typography.fonts.base})),Vt=M($e)(({theme:e})=>({position:"absolute",zIndex:1,top:6,right:7,width:20,height:20,padding:4,boxSizing:"border-box",cursor:"pointer",color:e.input.color})),Ee=(e=>(e.RGB="rgb",e.HSL="hsl",e.HEX="hex",e))(Ee||{}),P=Object.values(Ee),At=/\(([0-9]+),\s*([0-9]+)%?,\s*([0-9]+)%?,?\s*([0-9.]+)?\)/,Gt=/^\s*rgba?\(([0-9]+),\s*([0-9]+),\s*([0-9]+),?\s*([0-9.]+)?\)\s*$/i,Ut=/^\s*hsla?\(([0-9]+),\s*([0-9]+)%,\s*([0-9]+)%,?\s*([0-9.]+)?\)\s*$/i,Y=/^\s*#?([0-9a-f]{3}|[0-9a-f]{6})\s*$/i,Yt=/^\s*#?([0-9a-f]{3})\s*$/i,Jt={hex:De,rgb:Ue,hsl:Ae},L={hex:"transparent",rgb:"rgba(0, 0, 0, 0)",hsl:"hsla(0, 0%, 0%, 0)"},ce=e=>{let t=e==null?void 0:e.match(At);if(!t)return[0,0,0,1];let[,n,r,o,a=1]=t;return[n,r,o,a].map(Number)},I=e=>{if(!e)return;let t=!0;if(Gt.test(e)){let[s,l,i,c]=ce(e),[d,f,g]=w.rgb.hsl([s,l,i])||[0,0,0];return{valid:t,value:e,keyword:w.rgb.keyword([s,l,i]),colorSpace:"rgb",rgb:e,hsl:`hsla(${d}, ${f}%, ${g}%, ${c})`,hex:`#${w.rgb.hex([s,l,i]).toLowerCase()}`}}if(Ut.test(e)){let[s,l,i,c]=ce(e),[d,f,g]=w.hsl.rgb([s,l,i])||[0,0,0];return{valid:t,value:e,keyword:w.hsl.keyword([s,l,i]),colorSpace:"hsl",rgb:`rgba(${d}, ${f}, ${g}, ${c})`,hsl:e,hex:`#${w.hsl.hex([s,l,i]).toLowerCase()}`}}let n=e.replace("#",""),r=w.keyword.rgb(n)||w.hex.rgb(n),o=w.rgb.hsl(r),a=e;if(/[^#a-f0-9]/i.test(e)?a=n:Y.test(e)&&(a=`#${n}`),a.startsWith("#"))t=Y.test(a);else try{w.keyword.hex(a)}catch{t=!1}return{valid:t,value:a,keyword:w.rgb.keyword(r),colorSpace:"hex",rgb:`rgba(${r[0]}, ${r[1]}, ${r[2]}, 1)`,hsl:`hsla(${o[0]}, ${o[1]}%, ${o[2]}%, 1)`,hex:a}},Qt=(e,t,n)=>{if(!e||!(t!=null&&t.valid))return L[n];if(n!=="hex")return(t==null?void 0:t[n])||L[n];if(!t.hex.startsWith("#"))try{return`#${w.keyword.hex(t.hex)}`}catch{return L.hex}let r=t.hex.match(Yt);if(!r)return Y.test(t.hex)?t.hex:L.hex;let[o,a,s]=r[1].split("");return`#${o}${o}${a}${a}${s}${s}`},Zt=(e,t)=>{let[n,r]=b.useState(e||""),[o,a]=b.useState(()=>I(n)),[s,l]=b.useState((o==null?void 0:o.colorSpace)||"hex");b.useEffect(()=>{let f=e||"",g=I(f);r(f),a(g),l((g==null?void 0:g.colorSpace)||"hex")},[e]);let i=b.useMemo(()=>Qt(n,o,s).toLowerCase(),[n,o,s]),c=b.useCallback(f=>{let g=I(f),k=(g==null?void 0:g.value)||f||"";r(k),k===""&&(a(void 0),t(void 0)),g&&(a(g),l(g.colorSpace),t(g.value))},[t]),d=b.useCallback(()=>{let f=P.indexOf(s)+1;f>=P.length&&(f=0),l(P[f]);let g=(o==null?void 0:o[P[f]])||"";r(g),t(g)},[o,s,t]);return{value:n,realValue:i,updateValue:c,color:o,colorSpace:s,cycleColorSpace:d}},W=e=>e.replace(/\s*/,"").toLowerCase(),en=(e,t,n)=>{let[r,o]=b.useState(t!=null&&t.valid?[t]:[]);b.useEffect(()=>{t===void 0&&o([])},[t]);let a=b.useMemo(()=>(e||[]).map(l=>typeof l=="string"?I(l):l.title?{...I(l.color),keyword:l.title}:I(l.color)).concat(r).filter(Boolean).slice(-27),[e,r]),s=b.useCallback(l=>{l!=null&&l.valid&&(a.some(i=>W(i[n])===W(l[n]))||o(i=>i.concat(l)))},[n,a]);return{presets:a,addPreset:s}},tn=({name:e,value:t,onChange:n,onFocus:r,onBlur:o,presetColors:a,startOpen:s=!1})=>{let l=b.useCallback(Ht(n,200),[n]),{value:i,realValue:c,updateValue:d,color:f,colorSpace:g,cycleColorSpace:k}=Zt(t,l),{presets:N,addPreset:_}=en(a,f,g),p=Jt[g];return h.createElement(Pt,null,h.createElement(Lt,{startOpen:s,closeOnOutsideClick:!0,onVisibleChange:()=>_(f),tooltip:h.createElement(qt,null,h.createElement(p,{color:c==="transparent"?"#000000":c,onChange:d,onFocus:r,onBlur:o}),N.length>0&&h.createElement(Wt,null,N.map((m,x)=>h.createElement(ue,{key:`${m.value}-${x}`,hasChrome:!1,tooltip:h.createElement(Bt,{note:m.keyword||m.value})},h.createElement(ie,{value:m[g],active:f&&W(m[g])===W(f[g]),onClick:()=>d(m.value)})))))},h.createElement(ie,{value:c,style:{margin:4}})),h.createElement(Kt,{id:Ne(e),value:i,onChange:m=>d(m.target.value),onFocus:m=>m.target.select(),placeholder:"Choose color..."}),i?h.createElement(Vt,{icon:"markup",onClick:k}):null)},bn=tn;export{tn as ColorControl,bn as default}; +import{n as M,d as ue,T as Me,F as Ce,I as $e,g as Ne}from"./DocsRenderer-NNNQARDV-AKp_79_j.js";import{R as h,r as b}from"./index-TT1qJ6UJ.js";import{g as fe}from"./_commonjsHelpers-4gQjN7DL.js";import{_ as Oe,i as J,a as Ie}from"./_getPrototype-bjD8Yebc.js";import"./iframe-uulHRm1N.js";import"../sb-preview/runtime.js";import"./react-18-N0svEjlN.js";import"./client-rbWgHzHN.js";import"./index-7vsPyIck.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./bundle.esm-7jAAHVxW.js";import"./index-ogXoivrg.js";import"./index-PPLHz8o0.js";function $(){return($=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}function K(e){var t=b.useRef(e),n=b.useRef(function(r){t.current&&t.current(r)});return t.current=e,n.current}var S=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=1),e>n?n:e0:p.buttons>0)&&o.current?a(ne(o.current,p,l.current)):_(!1)},N=function(){return _(!1)};function _(p){var m=i.current,x=V(o.current),C=p?x.addEventListener:x.removeEventListener;C(m?"touchmove":"mousemove",k),C(m?"touchend":"mouseup",N)}return[function(p){var m=p.nativeEvent,x=o.current;if(x&&(re(m),!function(X,R){return R&&!j(X)}(m,i.current)&&x)){if(j(m)){i.current=!0;var C=m.changedTouches||[];C.length&&(l.current=C[0].identifier)}x.focus(),a(ne(x,m,l.current)),_(!0)}},function(p){var m=p.which||p.keyCode;m<37||m>40||(p.preventDefault(),s({left:m===39?.05:m===37?-.05:0,top:m===40?.05:m===38?-.05:0}))},_]},[s,a]),d=c[0],f=c[1],g=c[2];return b.useEffect(function(){return g},[g]),h.createElement("div",$({},r,{onTouchStart:d,onMouseDown:d,className:"react-colorful__interactive",ref:o,onKeyDown:f,tabIndex:0,role:"slider"}))}),z=function(e){return e.filter(Boolean).join(" ")},ee=function(e){var t=e.color,n=e.left,r=e.top,o=r===void 0?.5:r,a=z(["react-colorful__pointer",e.className]);return h.createElement("div",{className:a,style:{top:100*o+"%",left:100*n+"%"}},h.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},y=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=Math.pow(10,t)),Math.round(n*e)/n},Se={grad:.9,turn:360,rad:360/(2*Math.PI)},Re=function(e){return ge(A(e))},A=function(e){return e[0]==="#"&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?y(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:e.length===8?y(parseInt(e.substring(6,8),16)/255,2):1}},Te=function(e,t){return t===void 0&&(t="deg"),Number(e)*(Se[t]||1)},je=function(e){var t=/hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?Fe({h:Te(t[1],t[2]),s:Number(t[3]),l:Number(t[4]),a:t[5]===void 0?1:Number(t[5])/(t[6]?100:1)}):{h:0,s:0,v:0,a:1}},Fe=function(e){var t=e.s,n=e.l;return{h:e.h,s:(t*=(n<50?n:100-n)/100)>0?2*t/(n+t)*100:0,v:n+t,a:e.a}},ze=function(e){return Pe(de(e))},he=function(e){var t=e.s,n=e.v,r=e.a,o=(200-t)*n/100;return{h:y(e.h),s:y(o>0&&o<200?t*n/100/(o<=100?o:200-o)*100:0),l:y(o/2),a:y(r,2)}},G=function(e){var t=he(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},q=function(e){var t=he(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},de=function(e){var t=e.h,n=e.s,r=e.v,o=e.a;t=t/360*6,n/=100,r/=100;var a=Math.floor(t),s=r*(1-n),l=r*(1-(t-a)*n),i=r*(1-(1-t+a)*n),c=a%6;return{r:y(255*[r,l,s,s,i,r][c]),g:y(255*[i,r,r,l,s,s][c]),b:y(255*[s,s,i,r,r,l][c]),a:y(o,2)}},He=function(e){var t=/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?ge({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===void 0?1:Number(t[7])/(t[8]?100:1)}):{h:0,s:0,v:0,a:1}},H=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},Pe=function(e){var t=e.r,n=e.g,r=e.b,o=e.a,a=o<1?H(y(255*o)):"";return"#"+H(t)+H(n)+H(r)+a},ge=function(e){var t=e.r,n=e.g,r=e.b,o=e.a,a=Math.max(t,n,r),s=a-Math.min(t,n,r),l=s?a===t?(n-r)/s:a===n?2+(r-t)/s:4+(t-n)/s:0;return{h:y(60*(l<0?l+6:l)),s:y(a?s/a*100:0),v:y(a/255*100),a:o}},me=h.memo(function(e){var t=e.hue,n=e.onChange,r=z(["react-colorful__hue",e.className]);return h.createElement("div",{className:r},h.createElement(Z,{onMove:function(o){n({h:360*o.left})},onKey:function(o){n({h:S(t+360*o.left,0,360)})},"aria-label":"Hue","aria-valuenow":y(t),"aria-valuemax":"360","aria-valuemin":"0"},h.createElement(ee,{className:"react-colorful__hue-pointer",left:t/360,color:G({h:t,s:100,v:100,a:1})})))}),be=h.memo(function(e){var t=e.hsva,n=e.onChange,r={backgroundColor:G({h:t.h,s:100,v:100,a:1})};return h.createElement("div",{className:"react-colorful__saturation",style:r},h.createElement(Z,{onMove:function(o){n({s:100*o.left,v:100-100*o.top})},onKey:function(o){n({s:S(t.s+100*o.left,0,100),v:S(t.v-100*o.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+y(t.s)+"%, Brightness "+y(t.v)+"%"},h.createElement(ee,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:G(t)})))}),ve=function(e,t){if(e===t)return!0;for(var n in e)if(e[n]!==t[n])return!1;return!0},pe=function(e,t){return e.replace(/\s/g,"")===t.replace(/\s/g,"")},Le=function(e,t){return e.toLowerCase()===t.toLowerCase()||ve(A(e),A(t))};function ye(e,t,n){var r=K(n),o=b.useState(function(){return e.toHsva(t)}),a=o[0],s=o[1],l=b.useRef({color:t,hsva:a});b.useEffect(function(){if(!e.equal(t,l.current.color)){var c=e.toHsva(t);l.current={hsva:c,color:t},s(c)}},[t,e]),b.useEffect(function(){var c;ve(a,l.current.hsva)||e.equal(c=e.fromHsva(a),l.current.color)||(l.current={hsva:a,color:c},r(c))},[a,e,r]);var i=b.useCallback(function(c){s(function(d){return Object.assign({},d,c)})},[]);return[a,i]}var qe=typeof window<"u"?b.useLayoutEffect:b.useEffect,Be=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},oe=new Map,xe=function(e){qe(function(){var t=e.current?e.current.ownerDocument:document;if(t!==void 0&&!oe.has(t)){var n=t.createElement("style");n.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`,oe.set(t,n);var r=Be();r&&n.setAttribute("nonce",r),t.head.appendChild(n)}},[])},We=function(e){var t=e.className,n=e.colorModel,r=e.color,o=r===void 0?n.defaultColor:r,a=e.onChange,s=Q(e,["className","colorModel","color","onChange"]),l=b.useRef(null);xe(l);var i=ye(n,o,a),c=i[0],d=i[1],f=z(["react-colorful",t]);return h.createElement("div",$({},s,{ref:l,className:f}),h.createElement(be,{hsva:c,onChange:d}),h.createElement(me,{hue:c.h,onChange:d,className:"react-colorful__last-control"}))},Xe={defaultColor:"000",toHsva:Re,fromHsva:function(e){return ze({h:e.h,s:e.s,v:e.v,a:1})},equal:Le},De=function(e){return h.createElement(We,$({},e,{colorModel:Xe}))},Ke=function(e){var t=e.className,n=e.hsva,r=e.onChange,o={backgroundImage:"linear-gradient(90deg, "+q(Object.assign({},n,{a:0}))+", "+q(Object.assign({},n,{a:1}))+")"},a=z(["react-colorful__alpha",t]),s=y(100*n.a);return h.createElement("div",{className:a},h.createElement("div",{className:"react-colorful__alpha-gradient",style:o}),h.createElement(Z,{onMove:function(l){r({a:l.left})},onKey:function(l){r({a:S(n.a+l.left)})},"aria-label":"Alpha","aria-valuetext":s+"%","aria-valuenow":s,"aria-valuemin":"0","aria-valuemax":"100"},h.createElement(ee,{className:"react-colorful__alpha-pointer",left:n.a,color:q(n)})))},we=function(e){var t=e.className,n=e.colorModel,r=e.color,o=r===void 0?n.defaultColor:r,a=e.onChange,s=Q(e,["className","colorModel","color","onChange"]),l=b.useRef(null);xe(l);var i=ye(n,o,a),c=i[0],d=i[1],f=z(["react-colorful",t]);return h.createElement("div",$({},s,{ref:l,className:f}),h.createElement(be,{hsva:c,onChange:d}),h.createElement(me,{hue:c.h,onChange:d}),h.createElement(Ke,{hsva:c,onChange:d,className:"react-colorful__last-control"}))},Ve={defaultColor:"hsla(0, 0%, 0%, 1)",toHsva:je,fromHsva:q,equal:pe},Ae=function(e){return h.createElement(we,$({},e,{colorModel:Ve}))},Ge={defaultColor:"rgba(0, 0, 0, 1)",toHsva:He,fromHsva:function(e){var t=de(e);return"rgba("+t.r+", "+t.g+", "+t.b+", "+t.a+")"},equal:pe},Ue=function(e){return h.createElement(we,$({},e,{colorModel:Ge}))},Ye={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};const F=Ye,ke={};for(const e of Object.keys(F))ke[F[e]]=e;const u={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};var _e=u;for(const e of Object.keys(u)){if(!("channels"in u[e]))throw new Error("missing channels property: "+e);if(!("labels"in u[e]))throw new Error("missing channel labels property: "+e);if(u[e].labels.length!==u[e].channels)throw new Error("channel and label counts mismatch: "+e);const{channels:t,labels:n}=u[e];delete u[e].channels,delete u[e].labels,Object.defineProperty(u[e],"channels",{value:t}),Object.defineProperty(u[e],"labels",{value:n})}u.rgb.hsl=function(e){const t=e[0]/255,n=e[1]/255,r=e[2]/255,o=Math.min(t,n,r),a=Math.max(t,n,r),s=a-o;let l,i;a===o?l=0:t===a?l=(n-r)/s:n===a?l=2+(r-t)/s:r===a&&(l=4+(t-n)/s),l=Math.min(l*60,360),l<0&&(l+=360);const c=(o+a)/2;return a===o?i=0:c<=.5?i=s/(a+o):i=s/(2-a-o),[l,i*100,c*100]};u.rgb.hsv=function(e){let t,n,r,o,a;const s=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(s,l,i),d=c-Math.min(s,l,i),f=function(g){return(c-g)/6/d+1/2};return d===0?(o=0,a=0):(a=d/c,t=f(s),n=f(l),r=f(i),s===c?o=r-n:l===c?o=1/3+t-r:i===c&&(o=2/3+n-t),o<0?o+=1:o>1&&(o-=1)),[o*360,a*100,c*100]};u.rgb.hwb=function(e){const t=e[0],n=e[1];let r=e[2];const o=u.rgb.hsl(e)[0],a=1/255*Math.min(t,Math.min(n,r));return r=1-1/255*Math.max(t,Math.max(n,r)),[o,a*100,r*100]};u.rgb.cmyk=function(e){const t=e[0]/255,n=e[1]/255,r=e[2]/255,o=Math.min(1-t,1-n,1-r),a=(1-t-o)/(1-o)||0,s=(1-n-o)/(1-o)||0,l=(1-r-o)/(1-o)||0;return[a*100,s*100,l*100,o*100]};function Je(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}u.rgb.keyword=function(e){const t=ke[e];if(t)return t;let n=1/0,r;for(const o of Object.keys(F)){const a=F[o],s=Je(e,a);s.04045?((t+.055)/1.055)**2.4:t/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92;const o=t*.4124+n*.3576+r*.1805,a=t*.2126+n*.7152+r*.0722,s=t*.0193+n*.1192+r*.9505;return[o*100,a*100,s*100]};u.rgb.lab=function(e){const t=u.rgb.xyz(e);let n=t[0],r=t[1],o=t[2];n/=95.047,r/=100,o/=108.883,n=n>.008856?n**(1/3):7.787*n+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;const a=116*r-16,s=500*(n-r),l=200*(r-o);return[a,s,l]};u.hsl.rgb=function(e){const t=e[0]/360,n=e[1]/100,r=e[2]/100;let o,a,s;if(n===0)return s=r*255,[s,s,s];r<.5?o=r*(1+n):o=r+n-r*n;const l=2*r-o,i=[0,0,0];for(let c=0;c<3;c++)a=t+1/3*-(c-1),a<0&&a++,a>1&&a--,6*a<1?s=l+(o-l)*6*a:2*a<1?s=o:3*a<2?s=l+(o-l)*(2/3-a)*6:s=l,i[c]=s*255;return i};u.hsl.hsv=function(e){const t=e[0];let n=e[1]/100,r=e[2]/100,o=n;const a=Math.max(r,.01);r*=2,n*=r<=1?r:2-r,o*=a<=1?a:2-a;const s=(r+n)/2,l=r===0?2*o/(a+o):2*n/(r+n);return[t,l*100,s*100]};u.hsv.rgb=function(e){const t=e[0]/60,n=e[1]/100;let r=e[2]/100;const o=Math.floor(t)%6,a=t-Math.floor(t),s=255*r*(1-n),l=255*r*(1-n*a),i=255*r*(1-n*(1-a));switch(r*=255,o){case 0:return[r,i,s];case 1:return[l,r,s];case 2:return[s,r,i];case 3:return[s,l,r];case 4:return[i,s,r];case 5:return[r,s,l]}};u.hsv.hsl=function(e){const t=e[0],n=e[1]/100,r=e[2]/100,o=Math.max(r,.01);let a,s;s=(2-n)*r;const l=(2-n)*o;return a=n*o,a/=l<=1?l:2-l,a=a||0,s/=2,[t,a*100,s*100]};u.hwb.rgb=function(e){const t=e[0]/360;let n=e[1]/100,r=e[2]/100;const o=n+r;let a;o>1&&(n/=o,r/=o);const s=Math.floor(6*t),l=1-r;a=6*t-s,s&1&&(a=1-a);const i=n+a*(l-n);let c,d,f;switch(s){default:case 6:case 0:c=l,d=i,f=n;break;case 1:c=i,d=l,f=n;break;case 2:c=n,d=l,f=i;break;case 3:c=n,d=i,f=l;break;case 4:c=i,d=n,f=l;break;case 5:c=l,d=n,f=i;break}return[c*255,d*255,f*255]};u.cmyk.rgb=function(e){const t=e[0]/100,n=e[1]/100,r=e[2]/100,o=e[3]/100,a=1-Math.min(1,t*(1-o)+o),s=1-Math.min(1,n*(1-o)+o),l=1-Math.min(1,r*(1-o)+o);return[a*255,s*255,l*255]};u.xyz.rgb=function(e){const t=e[0]/100,n=e[1]/100,r=e[2]/100;let o,a,s;return o=t*3.2406+n*-1.5372+r*-.4986,a=t*-.9689+n*1.8758+r*.0415,s=t*.0557+n*-.204+r*1.057,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=Math.min(Math.max(0,o),1),a=Math.min(Math.max(0,a),1),s=Math.min(Math.max(0,s),1),[o*255,a*255,s*255]};u.xyz.lab=function(e){let t=e[0],n=e[1],r=e[2];t/=95.047,n/=100,r/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,r=r>.008856?r**(1/3):7.787*r+16/116;const o=116*n-16,a=500*(t-n),s=200*(n-r);return[o,a,s]};u.lab.xyz=function(e){const t=e[0],n=e[1],r=e[2];let o,a,s;a=(t+16)/116,o=n/500+a,s=a-r/200;const l=a**3,i=o**3,c=s**3;return a=l>.008856?l:(a-16/116)/7.787,o=i>.008856?i:(o-16/116)/7.787,s=c>.008856?c:(s-16/116)/7.787,o*=95.047,a*=100,s*=108.883,[o,a,s]};u.lab.lch=function(e){const t=e[0],n=e[1],r=e[2];let o;o=Math.atan2(r,n)*360/2/Math.PI,o<0&&(o+=360);const s=Math.sqrt(n*n+r*r);return[t,s,o]};u.lch.lab=function(e){const t=e[0],n=e[1],o=e[2]/360*2*Math.PI,a=n*Math.cos(o),s=n*Math.sin(o);return[t,a,s]};u.rgb.ansi16=function(e,t=null){const[n,r,o]=e;let a=t===null?u.rgb.hsv(e)[2]:t;if(a=Math.round(a/50),a===0)return 30;let s=30+(Math.round(o/255)<<2|Math.round(r/255)<<1|Math.round(n/255));return a===2&&(s+=60),s};u.hsv.ansi16=function(e){return u.rgb.ansi16(u.hsv.rgb(e),e[2])};u.rgb.ansi256=function(e){const t=e[0],n=e[1],r=e[2];return t===n&&n===r?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(n/255*5)+Math.round(r/255*5)};u.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];const n=(~~(e>50)+1)*.5,r=(t&1)*n*255,o=(t>>1&1)*n*255,a=(t>>2&1)*n*255;return[r,o,a]};u.ansi256.rgb=function(e){if(e>=232){const a=(e-232)*10+8;return[a,a,a]}e-=16;let t;const n=Math.floor(e/36)/5*255,r=Math.floor((t=e%36)/6)/5*255,o=t%6/5*255;return[n,r,o]};u.rgb.hex=function(e){const n=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(n.length)+n};u.hex.rgb=function(e){const t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let n=t[0];t[0].length===3&&(n=n.split("").map(l=>l+l).join(""));const r=parseInt(n,16),o=r>>16&255,a=r>>8&255,s=r&255;return[o,a,s]};u.rgb.hcg=function(e){const t=e[0]/255,n=e[1]/255,r=e[2]/255,o=Math.max(Math.max(t,n),r),a=Math.min(Math.min(t,n),r),s=o-a;let l,i;return s<1?l=a/(1-s):l=0,s<=0?i=0:o===t?i=(n-r)/s%6:o===n?i=2+(r-t)/s:i=4+(t-n)/s,i/=6,i%=1,[i*360,s*100,l*100]};u.hsl.hcg=function(e){const t=e[1]/100,n=e[2]/100,r=n<.5?2*t*n:2*t*(1-n);let o=0;return r<1&&(o=(n-.5*r)/(1-r)),[e[0],r*100,o*100]};u.hsv.hcg=function(e){const t=e[1]/100,n=e[2]/100,r=t*n;let o=0;return r<1&&(o=(n-r)/(1-r)),[e[0],r*100,o*100]};u.hcg.rgb=function(e){const t=e[0]/360,n=e[1]/100,r=e[2]/100;if(n===0)return[r*255,r*255,r*255];const o=[0,0,0],a=t%1*6,s=a%1,l=1-s;let i=0;switch(Math.floor(a)){case 0:o[0]=1,o[1]=s,o[2]=0;break;case 1:o[0]=l,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=s;break;case 3:o[0]=0,o[1]=l,o[2]=1;break;case 4:o[0]=s,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=l}return i=(1-n)*r,[(n*o[0]+i)*255,(n*o[1]+i)*255,(n*o[2]+i)*255]};u.hcg.hsv=function(e){const t=e[1]/100,n=e[2]/100,r=t+n*(1-t);let o=0;return r>0&&(o=t/r),[e[0],o*100,r*100]};u.hcg.hsl=function(e){const t=e[1]/100,r=e[2]/100*(1-t)+.5*t;let o=0;return r>0&&r<.5?o=t/(2*r):r>=.5&&r<1&&(o=t/(2*(1-r))),[e[0],o*100,r*100]};u.hcg.hwb=function(e){const t=e[1]/100,n=e[2]/100,r=t+n*(1-t);return[e[0],(r-t)*100,(1-r)*100]};u.hwb.hcg=function(e){const t=e[1]/100,r=1-e[2]/100,o=r-t;let a=0;return o<1&&(a=(r-o)/(1-o)),[e[0],o*100,a*100]};u.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};u.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};u.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};u.gray.hsl=function(e){return[0,0,e[0]]};u.gray.hsv=u.gray.hsl;u.gray.hwb=function(e){return[0,100,e[0]]};u.gray.cmyk=function(e){return[0,0,0,e[0]]};u.gray.lab=function(e){return[e[0],0,0]};u.gray.hex=function(e){const t=Math.round(e[0]/100*255)&255,r=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(r.length)+r};u.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]};const B=_e;function Qe(){const e={},t=Object.keys(B);for(let n=t.length,r=0;r1&&(n=r),e(n))};return"conversion"in e&&(t.conversion=e.conversion),t}function st(e){const t=function(...n){const r=n[0];if(r==null)return r;r.length>1&&(n=r);const o=e(n);if(typeof o=="object")for(let a=o.length,s=0;s{O[e]={},Object.defineProperty(O[e],"channels",{value:U[e].channels}),Object.defineProperty(O[e],"labels",{value:U[e].labels});const t=rt(e);Object.keys(t).forEach(r=>{const o=t[r];O[e][r]=st(o),O[e][r].raw=at(o)})});var lt=O;const w=fe(lt);var it=Oe,ct=function(){return it.Date.now()},ut=ct,ft=/\s/;function ht(e){for(var t=e.length;t--&&ft.test(e.charAt(t)););return t}var dt=ht,gt=dt,mt=/^\s+/;function bt(e){return e&&e.slice(0,gt(e)+1).replace(mt,"")}var vt=bt,pt=vt,ae=J,yt=Ie,se=NaN,xt=/^[-+]0x[0-9a-f]+$/i,wt=/^0b[01]+$/i,kt=/^0o[0-7]+$/i,_t=parseInt;function Et(e){if(typeof e=="number")return e;if(yt(e))return se;if(ae(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=ae(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=pt(e);var n=wt.test(e);return n||kt.test(e)?_t(e.slice(2),n?2:8):xt.test(e)?se:+e}var Mt=Et,Ct=J,D=ut,le=Mt,$t="Expected a function",Nt=Math.max,Ot=Math.min;function It(e,t,n){var r,o,a,s,l,i,c=0,d=!1,f=!1,g=!0;if(typeof e!="function")throw new TypeError($t);t=le(t)||0,Ct(n)&&(d=!!n.leading,f="maxWait"in n,a=f?Nt(le(n.maxWait)||0,t):a,g="trailing"in n?!!n.trailing:g);function k(v){var E=r,T=o;return r=o=void 0,c=v,s=e.apply(T,E),s}function N(v){return c=v,l=setTimeout(m,t),d?k(v):s}function _(v){var E=v-i,T=v-c,te=t-E;return f?Ot(te,a-T):te}function p(v){var E=v-i,T=v-c;return i===void 0||E>=t||E<0||f&&T>=a}function m(){var v=D();if(p(v))return x(v);l=setTimeout(m,_(v))}function x(v){return l=void 0,g&&r?k(v):(r=o=void 0,s)}function C(){l!==void 0&&clearTimeout(l),c=0,r=i=o=l=void 0}function X(){return l===void 0?s:x(D())}function R(){var v=D(),E=p(v);if(r=arguments,o=this,i=v,E){if(l===void 0)return N(i);if(f)return clearTimeout(l),l=setTimeout(m,t),k(i)}return l===void 0&&(l=setTimeout(m,t)),s}return R.cancel=C,R.flush=X,R}var St=It,Rt=St,Tt=J,jt="Expected a function";function Ft(e,t,n){var r=!0,o=!0;if(typeof e!="function")throw new TypeError(jt);return Tt(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),Rt(e,t,{leading:r,maxWait:t,trailing:o})}var zt=Ft;const Ht=fe(zt);var Pt=M.div({position:"relative",maxWidth:250}),Lt=M(ue)({position:"absolute",zIndex:1,top:4,left:4}),qt=M.div({width:200,margin:5,".react-colorful__saturation":{borderRadius:"4px 4px 0 0"},".react-colorful__hue":{boxShadow:"inset 0 0 0 1px rgb(0 0 0 / 5%)"},".react-colorful__last-control":{borderRadius:"0 0 4px 4px"}}),Bt=M(Me)(({theme:e})=>({fontFamily:e.typography.fonts.base})),Wt=M.div({display:"grid",gridTemplateColumns:"repeat(9, 16px)",gap:6,padding:3,marginTop:5,width:200}),Xt=M.div(({theme:e,active:t})=>({width:16,height:16,boxShadow:t?`${e.appBorderColor} 0 0 0 1px inset, ${e.textMutedColor}50 0 0 0 4px`:`${e.appBorderColor} 0 0 0 1px inset`,borderRadius:e.appBorderRadius})),Dt=`url('data:image/svg+xml;charset=utf-8,')`,ie=({value:e,active:t,onClick:n,style:r,...o})=>{let a=`linear-gradient(${e}, ${e}), ${Dt}, linear-gradient(#fff, #fff)`;return h.createElement(Xt,{...o,active:t,onClick:n,style:{...r,backgroundImage:a}})},Kt=M(Ce.Input)(({theme:e})=>({width:"100%",paddingLeft:30,paddingRight:30,boxSizing:"border-box",fontFamily:e.typography.fonts.base})),Vt=M($e)(({theme:e})=>({position:"absolute",zIndex:1,top:6,right:7,width:20,height:20,padding:4,boxSizing:"border-box",cursor:"pointer",color:e.input.color})),Ee=(e=>(e.RGB="rgb",e.HSL="hsl",e.HEX="hex",e))(Ee||{}),P=Object.values(Ee),At=/\(([0-9]+),\s*([0-9]+)%?,\s*([0-9]+)%?,?\s*([0-9.]+)?\)/,Gt=/^\s*rgba?\(([0-9]+),\s*([0-9]+),\s*([0-9]+),?\s*([0-9.]+)?\)\s*$/i,Ut=/^\s*hsla?\(([0-9]+),\s*([0-9]+)%,\s*([0-9]+)%,?\s*([0-9.]+)?\)\s*$/i,Y=/^\s*#?([0-9a-f]{3}|[0-9a-f]{6})\s*$/i,Yt=/^\s*#?([0-9a-f]{3})\s*$/i,Jt={hex:De,rgb:Ue,hsl:Ae},L={hex:"transparent",rgb:"rgba(0, 0, 0, 0)",hsl:"hsla(0, 0%, 0%, 0)"},ce=e=>{let t=e==null?void 0:e.match(At);if(!t)return[0,0,0,1];let[,n,r,o,a=1]=t;return[n,r,o,a].map(Number)},I=e=>{if(!e)return;let t=!0;if(Gt.test(e)){let[s,l,i,c]=ce(e),[d,f,g]=w.rgb.hsl([s,l,i])||[0,0,0];return{valid:t,value:e,keyword:w.rgb.keyword([s,l,i]),colorSpace:"rgb",rgb:e,hsl:`hsla(${d}, ${f}%, ${g}%, ${c})`,hex:`#${w.rgb.hex([s,l,i]).toLowerCase()}`}}if(Ut.test(e)){let[s,l,i,c]=ce(e),[d,f,g]=w.hsl.rgb([s,l,i])||[0,0,0];return{valid:t,value:e,keyword:w.hsl.keyword([s,l,i]),colorSpace:"hsl",rgb:`rgba(${d}, ${f}, ${g}, ${c})`,hsl:e,hex:`#${w.hsl.hex([s,l,i]).toLowerCase()}`}}let n=e.replace("#",""),r=w.keyword.rgb(n)||w.hex.rgb(n),o=w.rgb.hsl(r),a=e;if(/[^#a-f0-9]/i.test(e)?a=n:Y.test(e)&&(a=`#${n}`),a.startsWith("#"))t=Y.test(a);else try{w.keyword.hex(a)}catch{t=!1}return{valid:t,value:a,keyword:w.rgb.keyword(r),colorSpace:"hex",rgb:`rgba(${r[0]}, ${r[1]}, ${r[2]}, 1)`,hsl:`hsla(${o[0]}, ${o[1]}%, ${o[2]}%, 1)`,hex:a}},Qt=(e,t,n)=>{if(!e||!(t!=null&&t.valid))return L[n];if(n!=="hex")return(t==null?void 0:t[n])||L[n];if(!t.hex.startsWith("#"))try{return`#${w.keyword.hex(t.hex)}`}catch{return L.hex}let r=t.hex.match(Yt);if(!r)return Y.test(t.hex)?t.hex:L.hex;let[o,a,s]=r[1].split("");return`#${o}${o}${a}${a}${s}${s}`},Zt=(e,t)=>{let[n,r]=b.useState(e||""),[o,a]=b.useState(()=>I(n)),[s,l]=b.useState((o==null?void 0:o.colorSpace)||"hex");b.useEffect(()=>{let f=e||"",g=I(f);r(f),a(g),l((g==null?void 0:g.colorSpace)||"hex")},[e]);let i=b.useMemo(()=>Qt(n,o,s).toLowerCase(),[n,o,s]),c=b.useCallback(f=>{let g=I(f),k=(g==null?void 0:g.value)||f||"";r(k),k===""&&(a(void 0),t(void 0)),g&&(a(g),l(g.colorSpace),t(g.value))},[t]),d=b.useCallback(()=>{let f=P.indexOf(s)+1;f>=P.length&&(f=0),l(P[f]);let g=(o==null?void 0:o[P[f]])||"";r(g),t(g)},[o,s,t]);return{value:n,realValue:i,updateValue:c,color:o,colorSpace:s,cycleColorSpace:d}},W=e=>e.replace(/\s*/,"").toLowerCase(),en=(e,t,n)=>{let[r,o]=b.useState(t!=null&&t.valid?[t]:[]);b.useEffect(()=>{t===void 0&&o([])},[t]);let a=b.useMemo(()=>(e||[]).map(l=>typeof l=="string"?I(l):l.title?{...I(l.color),keyword:l.title}:I(l.color)).concat(r).filter(Boolean).slice(-27),[e,r]),s=b.useCallback(l=>{l!=null&&l.valid&&(a.some(i=>W(i[n])===W(l[n]))||o(i=>i.concat(l)))},[n,a]);return{presets:a,addPreset:s}},tn=({name:e,value:t,onChange:n,onFocus:r,onBlur:o,presetColors:a,startOpen:s=!1})=>{let l=b.useCallback(Ht(n,200),[n]),{value:i,realValue:c,updateValue:d,color:f,colorSpace:g,cycleColorSpace:k}=Zt(t,l),{presets:N,addPreset:_}=en(a,f,g),p=Jt[g];return h.createElement(Pt,null,h.createElement(Lt,{startOpen:s,closeOnOutsideClick:!0,onVisibleChange:()=>_(f),tooltip:h.createElement(qt,null,h.createElement(p,{color:c==="transparent"?"#000000":c,onChange:d,onFocus:r,onBlur:o}),N.length>0&&h.createElement(Wt,null,N.map((m,x)=>h.createElement(ue,{key:`${m.value}-${x}`,hasChrome:!1,tooltip:h.createElement(Bt,{note:m.keyword||m.value})},h.createElement(ie,{value:m[g],active:f&&W(m[g])===W(f[g]),onClick:()=>d(m.value)})))))},h.createElement(ie,{value:c,style:{margin:4}})),h.createElement(Kt,{id:Ne(e),value:i,onChange:m=>d(m.target.value),onFocus:m=>m.target.select(),placeholder:"Choose color..."}),i?h.createElement(Vt,{icon:"markup",onClick:k}):null)},bn=tn;export{tn as ColorControl,bn as default}; diff --git a/assets/DocsRenderer-NNNQARDV-ONpjav1a.js b/assets/DocsRenderer-NNNQARDV-AKp_79_j.js similarity index 99% rename from assets/DocsRenderer-NNNQARDV-ONpjav1a.js rename to assets/DocsRenderer-NNNQARDV-AKp_79_j.js index 31d91a5528..cd27364cf0 100644 --- a/assets/DocsRenderer-NNNQARDV-ONpjav1a.js +++ b/assets/DocsRenderer-NNNQARDV-AKp_79_j.js @@ -1,4 +1,4 @@ -import{_ as At}from"./iframe-sjDFBNDn.js";import{r as b,a as Il,R as a}from"./index-TT1qJ6UJ.js";import{r as U0,u as W0}from"./react-18-N0svEjlN.js";import{g as Rn,c as sa}from"./_commonjsHelpers-4gQjN7DL.js";import{c as Qr}from"./_commonjs-dynamic-modules-h-SxKiO4.js";import{r as ws,R as G0}from"./index-7vsPyIck.js";import{u as As}from"./bundle.esm-7jAAHVxW.js";import{L as Ss,O as Y0}from"./index-ogXoivrg.js";import{q as Cs,r as K0,s as ks,t as X0,i as $n,v as J0,w as Q0,x as e1,c as _s,y as Os,z as t1,A as Ts,B as r1,C as n1,D as a1,E as o1,F as l1,G as i1,H as Fs,I as s1,J as u1,K as Rs,_ as c1,L as d1,M as p1,N as _o,d as $s,O as Ds,P as Ls,Q as f1,R as m1,U as g1,e as h1,S as Pl,V as Ha,k as ua}from"./_getPrototype-bjD8Yebc.js";import{d as xe}from"./index-PPLHz8o0.js";var He=e=>`control-${e.replace(/\s+/g,"-")}`,Dn=e=>`set-${e.replace(/\s+/g,"-")}`;const{global:b1}=__STORYBOOK_MODULE_GLOBAL__,{logger:y1}=__STORYBOOK_MODULE_CLIENT_LOGGER__;var v1=Object.create,Ms=Object.defineProperty,E1=Object.getOwnPropertyDescriptor,Bs=Object.getOwnPropertyNames,x1=Object.getPrototypeOf,w1=Object.prototype.hasOwnProperty,Oo=(e,t)=>function(){return t||(0,e[Bs(e)[0]])((t={exports:{}}).exports,t),t.exports},A1=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Bs(t))!w1.call(e,o)&&o!==r&&Ms(e,o,{get:()=>t[o],enumerable:!(n=E1(t,o))||n.enumerable});return e},Is=(e,t,r)=>(r=e!=null?v1(x1(e)):{},A1(t||!e||!e.__esModule?Ms(r,"default",{value:e,enumerable:!0}):r,e));function Jt(){return Jt=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function un(e,t,r){return _1()?un=Reflect.construct.bind():un=function(n,o,l){var i=[null];i.push.apply(i,o);var u=Function.bind.apply(n,i),s=new u;return l&&kr(s,l.prototype),s},un.apply(null,arguments)}function Va(e){var t=typeof Map=="function"?new Map:void 0;return Va=function(r){if(r===null||!k1(r))return r;if(typeof r!="function")throw new TypeError("Super expression must either be null or a function");if(typeof t<"u"){if(t.has(r))return t.get(r);t.set(r,n)}function n(){return un(r,arguments,Za(this).constructor)}return n.prototype=Object.create(r.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),kr(n,r)},Va(e)}var O1={1:`Passed invalid arguments to hsl, please pass multiple numbers e.g. hsl(360, 0.75, 0.4) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75 }). +import{_ as At}from"./iframe-uulHRm1N.js";import{r as b,a as Il,R as a}from"./index-TT1qJ6UJ.js";import{r as U0,u as W0}from"./react-18-N0svEjlN.js";import{g as Rn,c as sa}from"./_commonjsHelpers-4gQjN7DL.js";import{c as Qr}from"./_commonjs-dynamic-modules-h-SxKiO4.js";import{r as ws,R as G0}from"./index-7vsPyIck.js";import{u as As}from"./bundle.esm-7jAAHVxW.js";import{L as Ss,O as Y0}from"./index-ogXoivrg.js";import{q as Cs,r as K0,s as ks,t as X0,i as $n,v as J0,w as Q0,x as e1,c as _s,y as Os,z as t1,A as Ts,B as r1,C as n1,D as a1,E as o1,F as l1,G as i1,H as Fs,I as s1,J as u1,K as Rs,_ as c1,L as d1,M as p1,N as _o,d as $s,O as Ds,P as Ls,Q as f1,R as m1,U as g1,e as h1,S as Pl,V as Ha,k as ua}from"./_getPrototype-bjD8Yebc.js";import{d as xe}from"./index-PPLHz8o0.js";var He=e=>`control-${e.replace(/\s+/g,"-")}`,Dn=e=>`set-${e.replace(/\s+/g,"-")}`;const{global:b1}=__STORYBOOK_MODULE_GLOBAL__,{logger:y1}=__STORYBOOK_MODULE_CLIENT_LOGGER__;var v1=Object.create,Ms=Object.defineProperty,E1=Object.getOwnPropertyDescriptor,Bs=Object.getOwnPropertyNames,x1=Object.getPrototypeOf,w1=Object.prototype.hasOwnProperty,Oo=(e,t)=>function(){return t||(0,e[Bs(e)[0]])((t={exports:{}}).exports,t),t.exports},A1=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Bs(t))!w1.call(e,o)&&o!==r&&Ms(e,o,{get:()=>t[o],enumerable:!(n=E1(t,o))||n.enumerable});return e},Is=(e,t,r)=>(r=e!=null?v1(x1(e)):{},A1(t||!e||!e.__esModule?Ms(r,"default",{value:e,enumerable:!0}):r,e));function Jt(){return Jt=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function un(e,t,r){return _1()?un=Reflect.construct.bind():un=function(n,o,l){var i=[null];i.push.apply(i,o);var u=Function.bind.apply(n,i),s=new u;return l&&kr(s,l.prototype),s},un.apply(null,arguments)}function Va(e){var t=typeof Map=="function"?new Map:void 0;return Va=function(r){if(r===null||!k1(r))return r;if(typeof r!="function")throw new TypeError("Super expression must either be null or a function");if(typeof t<"u"){if(t.has(r))return t.get(r);t.set(r,n)}function n(){return un(r,arguments,Za(this).constructor)}return n.prototype=Object.create(r.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),kr(n,r)},Va(e)}var O1={1:`Passed invalid arguments to hsl, please pass multiple numbers e.g. hsl(360, 0.75, 0.4) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75 }). `,2:`Passed invalid arguments to hsla, please pass multiple numbers e.g. hsla(360, 0.75, 0.4, 0.7) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75, alpha: 0.7 }). @@ -226,9 +226,9 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho path { fill: currentColor; } -`,ve=({icon:e,useSymbol:t,...r})=>a.createElement(gc,{viewBox:"0 0 14 14",width:"14px",height:"14px",...r},t?a.createElement("use",{xlinkHref:`#icon--${e}`}):Pr[e]),Ag=b.memo(function({icons:e=Object.keys(Pr)}){return a.createElement(gc,{viewBox:"0 0 14 14",style:{position:"absolute",width:0,height:0},"data-chromatic":"ignore"},e.map(t=>a.createElement("symbol",{id:`icon--${t}`,key:t},Pr[t])))}),Sg=0,Cg=e=>e.button===Sg&&!e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey,kg=(e,t)=>{Cg(e)&&(e.preventDefault(),t(e))},_g=_.span(({withArrow:e})=>e?{"> svg:last-of-type":{height:"0.7em",width:"0.7em",marginRight:0,marginLeft:"0.25em",bottom:"auto",verticalAlign:"inherit"}}:{},({containsIcon:e})=>e?{svg:{height:"1em",width:"1em",verticalAlign:"middle",position:"relative",bottom:0,marginRight:0}}:{}),Og=_.a(({theme:e})=>({display:"inline-block",transition:"all 150ms ease-out",textDecoration:"none",color:e.color.secondary,"&:hover, &:focus":{cursor:"pointer",color:Kt(.07,e.color.secondary),"svg path:not([fill])":{fill:Kt(.07,e.color.secondary)}},"&:active":{color:Kt(.1,e.color.secondary),"svg path:not([fill])":{fill:Kt(.1,e.color.secondary)}},svg:{display:"inline-block",height:"1em",width:"1em",verticalAlign:"text-top",position:"relative",bottom:"-0.125em",marginRight:"0.4em","& path":{fill:e.color.secondary}}}),({theme:e,secondary:t,tertiary:r})=>{let n;return t&&(n=[e.textMutedColor,e.color.dark,e.color.darker]),r&&(n=[e.color.dark,e.color.darkest,e.textMutedColor]),n?{color:n[0],"svg path:not([fill])":{fill:n[0]},"&:hover":{color:n[1],"svg path:not([fill])":{fill:n[1]}},"&:active":{color:n[2],"svg path:not([fill])":{fill:n[2]}}}:{}},({nochrome:e})=>e?{color:"inherit","&:hover, &:active":{color:"inherit",textDecoration:"underline"}}:{},({theme:e,inverse:t})=>t?{color:e.color.lightest,":not([fill])":{fill:e.color.lightest},"&:hover":{color:e.color.lighter,"svg path:not([fill])":{fill:e.color.lighter}},"&:active":{color:e.color.light,"svg path:not([fill])":{fill:e.color.light}}}:{},({isButton:e})=>e?{border:0,borderRadius:0,background:"none",padding:0,fontSize:"inherit"}:{}),wt=({cancel:e,children:t,onClick:r,withArrow:n,containsIcon:o,className:l,...i})=>a.createElement(Og,{...i,onClick:r&&e?u=>kg(u,r):r,className:l},a.createElement(_g,{withArrow:n,containsIcon:o},t,n&&a.createElement(ve,{icon:"arrowright"})));wt.defaultProps={cancel:!0,className:void 0,style:void 0,onClick:void 0,withArrow:!1,containsIcon:!1};var Tg=_.div(({theme:e})=>({fontSize:`${e.typography.size.s2}px`,lineHeight:"1.6",h1:{fontSize:`${e.typography.size.l1}px`,fontWeight:e.typography.weight.bold},h2:{fontSize:`${e.typography.size.m2}px`,borderBottom:`1px solid ${e.appBorderColor}`},h3:{fontSize:`${e.typography.size.m1}px`},h4:{fontSize:`${e.typography.size.s3}px`},h5:{fontSize:`${e.typography.size.s2}px`},h6:{fontSize:`${e.typography.size.s2}px`,color:e.color.dark},"pre:not(.prismjs)":{background:"transparent",border:"none",borderRadius:0,padding:0,margin:0},"pre pre, pre.prismjs":{padding:15,margin:0,whiteSpace:"pre-wrap",color:"inherit",fontSize:"13px",lineHeight:"19px"},"pre pre code, pre.prismjs code":{color:"inherit",fontSize:"inherit"},"pre code":{margin:0,padding:0,whiteSpace:"pre",border:"none",background:"transparent"},"pre code, pre tt":{backgroundColor:"transparent",border:"none"},"body > *:first-of-type":{marginTop:"0 !important"},"body > *:last-child":{marginBottom:"0 !important"},a:{color:e.color.secondary,textDecoration:"none"},"a.absent":{color:"#cc0000"},"a.anchor":{display:"block",paddingLeft:30,marginLeft:-30,cursor:"pointer",position:"absolute",top:0,left:0,bottom:0},"h1, h2, h3, h4, h5, h6":{margin:"20px 0 10px",padding:0,cursor:"text",position:"relative","&:first-of-type":{marginTop:0,paddingTop:0},"&:hover a.anchor":{textDecoration:"none"},"& tt, & code":{fontSize:"inherit"}},"h1:first-of-type + h2":{marginTop:0,paddingTop:0},"p, blockquote, ul, ol, dl, li, table, pre":{margin:"15px 0"},hr:{border:"0 none",borderTop:`1px solid ${e.appBorderColor}`,height:4,padding:0},"body > h1:first-of-type, body > h2:first-of-type, body > h3:first-of-type, body > h4:first-of-type, body > h5:first-of-type, body > h6:first-of-type":{marginTop:0,paddingTop:0},"body > h1:first-of-type + h2":{marginTop:0,paddingTop:0},"a:first-of-type h1, a:first-of-type h2, a:first-of-type h3, a:first-of-type h4, a:first-of-type h5, a:first-of-type h6":{marginTop:0,paddingTop:0},"h1 p, h2 p, h3 p, h4 p, h5 p, h6 p":{marginTop:0},"li p.first":{display:"inline-block"},"ul, ol":{paddingLeft:30,"& :first-of-type":{marginTop:0},"& :last-child":{marginBottom:0}},dl:{padding:0},"dl dt":{fontSize:"14px",fontWeight:"bold",fontStyle:"italic",margin:"0 0 15px",padding:"0 15px","&:first-of-type":{padding:0},"& > :first-of-type":{marginTop:0},"& > :last-child":{marginBottom:0}},blockquote:{borderLeft:`4px solid ${e.color.medium}`,padding:"0 15px",color:e.color.dark,"& > :first-of-type":{marginTop:0},"& > :last-child":{marginBottom:0}},table:{padding:0,borderCollapse:"collapse","& tr":{borderTop:`1px solid ${e.appBorderColor}`,backgroundColor:"white",margin:0,padding:0,"& th":{fontWeight:"bold",border:`1px solid ${e.appBorderColor}`,textAlign:"left",margin:0,padding:"6px 13px"},"& td":{border:`1px solid ${e.appBorderColor}`,textAlign:"left",margin:0,padding:"6px 13px"},"&:nth-of-type(2n)":{backgroundColor:e.color.lighter},"& th :first-of-type, & td :first-of-type":{marginTop:0},"& th :last-child, & td :last-child":{marginBottom:0}}},img:{maxWidth:"100%"},"span.frame":{display:"block",overflow:"hidden","& > span":{border:`1px solid ${e.color.medium}`,display:"block",float:"left",overflow:"hidden",margin:"13px 0 0",padding:7,width:"auto"},"& span img":{display:"block",float:"left"},"& span span":{clear:"both",color:e.color.darkest,display:"block",padding:"5px 0 0"}},"span.align-center":{display:"block",overflow:"hidden",clear:"both","& > span":{display:"block",overflow:"hidden",margin:"13px auto 0",textAlign:"center"},"& span img":{margin:"0 auto",textAlign:"center"}},"span.align-right":{display:"block",overflow:"hidden",clear:"both","& > span":{display:"block",overflow:"hidden",margin:"13px 0 0",textAlign:"right"},"& span img":{margin:0,textAlign:"right"}},"span.float-left":{display:"block",marginRight:13,overflow:"hidden",float:"left","& span":{margin:"13px 0 0"}},"span.float-right":{display:"block",marginLeft:13,overflow:"hidden",float:"right","& > span":{display:"block",overflow:"hidden",margin:"13px auto 0",textAlign:"right"}},"code, tt":{margin:"0 2px",padding:"0 5px",whiteSpace:"nowrap",border:`1px solid ${e.color.mediumlight}`,backgroundColor:e.color.lighter,borderRadius:3,color:e.base==="dark"&&e.color.darkest}})),Pt=[],lr=null,Fg=b.lazy(async()=>{let{SyntaxHighlighter:e}=await At(()=>import("./syntaxhighlighter-B5GMVT5T-miRWAUdB.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url);return Pt.length>0&&(Pt.forEach(t=>{e.registerLanguage(...t)}),Pt=[]),lr===null&&(lr=e),{default:t=>a.createElement(e,{...t})}}),Rg=b.lazy(async()=>{let[{SyntaxHighlighter:e},{formatter:t}]=await Promise.all([At(()=>import("./syntaxhighlighter-B5GMVT5T-miRWAUdB.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url),At(()=>import("./formatter-SWP5E3XI-DFe396sY.js"),__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url)]);return Pt.length>0&&(Pt.forEach(r=>{e.registerLanguage(...r)}),Pt=[]),lr===null&&(lr=e),{default:r=>a.createElement(e,{...r,formatter:t})}}),Wn=e=>a.createElement(b.Suspense,{fallback:a.createElement("div",null)},e.format!==!1?a.createElement(Rg,{...e}):a.createElement(Fg,{...e}));Wn.registerLanguage=(...e)=>{if(lr!==null){lr.registerLanguage(...e);return}Pt.push(e)};var $g=e=>typeof e=="number"?e:Number(e),Dg=_.div(({theme:e,col:t,row:r=1})=>t?{display:"inline-block",verticalAlign:"inherit","& > *":{marginLeft:t*e.layoutMargin,verticalAlign:"inherit"},[`& > *:first-child${Ja}`]:{marginLeft:0}}:{"& > *":{marginTop:r*e.layoutMargin},[`& > *:first-child${Ja}`]:{marginTop:0}},({theme:e,outer:t,col:r,row:n})=>{switch(!0){case!!(t&&r):return{marginLeft:t*e.layoutMargin,marginRight:t*e.layoutMargin};case!!(t&&n):return{marginTop:t*e.layoutMargin,marginBottom:t*e.layoutMargin};default:return{}}}),Lg=({col:e,row:t,outer:r,children:n,...o})=>{let l=$g(typeof r=="number"||!r?r:e||t);return a.createElement(Dg,{col:e,row:t,outer:l,...o},n)},Mg=_.div(({theme:e})=>({fontWeight:e.typography.weight.bold})),Bg=_.div(),Ig=_.div(({theme:e})=>({padding:30,textAlign:"center",color:e.color.defaultText,fontSize:e.typography.size.s2-1})),hc=({children:e,...t})=>{let[r,n]=b.Children.toArray(e);return a.createElement(Ig,{...t},a.createElement(Mg,null,r),n&&a.createElement(Bg,null,n))},Pg=_.div(({scale:e=1,elementHeight:t})=>({height:t||"auto",transformOrigin:"top left",transform:`scale(${1/e})`}));function jg({scale:e,children:t}){let r=b.useRef(null),[n,o]=b.useState(0),l=b.useCallback(({height:i})=>{i&&o(i/e)},[e]);return b.useEffect(()=>{r.current&&o(r.current.getBoundingClientRect().height)},[e]),As({ref:r,onResize:l}),a.createElement(Pg,{scale:e,elementHeight:n},a.createElement("div",{ref:r,className:"innerZoomElementWrapper"},t))}var Ng=class extends b.Component{constructor(){super(...arguments),this.iframe=null}componentDidMount(){let{iFrameRef:e}=this.props;this.iframe=e.current}shouldComponentUpdate(e){let{scale:t,active:r}=this.props;return t!==e.scale&&this.setIframeInnerZoom(e.scale),r!==e.active&&this.iframe.setAttribute("data-is-storybook",e.active?"true":"false"),e.children.props.src!==this.props.children.props.src}setIframeInnerZoom(e){try{Object.assign(this.iframe.contentDocument.body.style,{width:`${e*100}%`,height:`${e*100}%`,transform:`scale(${1/e})`,transformOrigin:"top left"})}catch{this.setIframeZoom(e)}}setIframeZoom(e){Object.assign(this.iframe.style,{width:`${e*100}%`,height:`${e*100}%`,transform:`scale(${1/e})`,transformOrigin:"top left"})}render(){let{children:e}=this.props;return a.createElement(a.Fragment,null,e)}},bc={Element:jg,IFrame:Ng},{document:Hg}=Pm,Zg=_.strong(({theme:e})=>({color:e.color.orange})),Vg=_.strong(({theme:e})=>({color:e.color.ancillary,textDecoration:"underline"})),Oi=_.em(({theme:e})=>({color:e.textMutedColor})),zg=/(Error): (.*)\n/,qg=/at (?:(.*) )?\(?(.+)\)?/,Ug=/([^@]+)?(?:\/<)?@(.+)?/,Wg=/([^@]+)?@(.+)?/,yc=({error:e})=>{if(!e)return a.createElement(b.Fragment,null,"This error has no stack or message");if(!e.stack)return a.createElement(b.Fragment,null,e.message||"This error has no stack or message");let t=e.stack.toString();t&&e.message&&!t.includes(e.message)&&(t=`Error: ${e.message} +`,ve=({icon:e,useSymbol:t,...r})=>a.createElement(gc,{viewBox:"0 0 14 14",width:"14px",height:"14px",...r},t?a.createElement("use",{xlinkHref:`#icon--${e}`}):Pr[e]),Ag=b.memo(function({icons:e=Object.keys(Pr)}){return a.createElement(gc,{viewBox:"0 0 14 14",style:{position:"absolute",width:0,height:0},"data-chromatic":"ignore"},e.map(t=>a.createElement("symbol",{id:`icon--${t}`,key:t},Pr[t])))}),Sg=0,Cg=e=>e.button===Sg&&!e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey,kg=(e,t)=>{Cg(e)&&(e.preventDefault(),t(e))},_g=_.span(({withArrow:e})=>e?{"> svg:last-of-type":{height:"0.7em",width:"0.7em",marginRight:0,marginLeft:"0.25em",bottom:"auto",verticalAlign:"inherit"}}:{},({containsIcon:e})=>e?{svg:{height:"1em",width:"1em",verticalAlign:"middle",position:"relative",bottom:0,marginRight:0}}:{}),Og=_.a(({theme:e})=>({display:"inline-block",transition:"all 150ms ease-out",textDecoration:"none",color:e.color.secondary,"&:hover, &:focus":{cursor:"pointer",color:Kt(.07,e.color.secondary),"svg path:not([fill])":{fill:Kt(.07,e.color.secondary)}},"&:active":{color:Kt(.1,e.color.secondary),"svg path:not([fill])":{fill:Kt(.1,e.color.secondary)}},svg:{display:"inline-block",height:"1em",width:"1em",verticalAlign:"text-top",position:"relative",bottom:"-0.125em",marginRight:"0.4em","& path":{fill:e.color.secondary}}}),({theme:e,secondary:t,tertiary:r})=>{let n;return t&&(n=[e.textMutedColor,e.color.dark,e.color.darker]),r&&(n=[e.color.dark,e.color.darkest,e.textMutedColor]),n?{color:n[0],"svg path:not([fill])":{fill:n[0]},"&:hover":{color:n[1],"svg path:not([fill])":{fill:n[1]}},"&:active":{color:n[2],"svg path:not([fill])":{fill:n[2]}}}:{}},({nochrome:e})=>e?{color:"inherit","&:hover, &:active":{color:"inherit",textDecoration:"underline"}}:{},({theme:e,inverse:t})=>t?{color:e.color.lightest,":not([fill])":{fill:e.color.lightest},"&:hover":{color:e.color.lighter,"svg path:not([fill])":{fill:e.color.lighter}},"&:active":{color:e.color.light,"svg path:not([fill])":{fill:e.color.light}}}:{},({isButton:e})=>e?{border:0,borderRadius:0,background:"none",padding:0,fontSize:"inherit"}:{}),wt=({cancel:e,children:t,onClick:r,withArrow:n,containsIcon:o,className:l,...i})=>a.createElement(Og,{...i,onClick:r&&e?u=>kg(u,r):r,className:l},a.createElement(_g,{withArrow:n,containsIcon:o},t,n&&a.createElement(ve,{icon:"arrowright"})));wt.defaultProps={cancel:!0,className:void 0,style:void 0,onClick:void 0,withArrow:!1,containsIcon:!1};var Tg=_.div(({theme:e})=>({fontSize:`${e.typography.size.s2}px`,lineHeight:"1.6",h1:{fontSize:`${e.typography.size.l1}px`,fontWeight:e.typography.weight.bold},h2:{fontSize:`${e.typography.size.m2}px`,borderBottom:`1px solid ${e.appBorderColor}`},h3:{fontSize:`${e.typography.size.m1}px`},h4:{fontSize:`${e.typography.size.s3}px`},h5:{fontSize:`${e.typography.size.s2}px`},h6:{fontSize:`${e.typography.size.s2}px`,color:e.color.dark},"pre:not(.prismjs)":{background:"transparent",border:"none",borderRadius:0,padding:0,margin:0},"pre pre, pre.prismjs":{padding:15,margin:0,whiteSpace:"pre-wrap",color:"inherit",fontSize:"13px",lineHeight:"19px"},"pre pre code, pre.prismjs code":{color:"inherit",fontSize:"inherit"},"pre code":{margin:0,padding:0,whiteSpace:"pre",border:"none",background:"transparent"},"pre code, pre tt":{backgroundColor:"transparent",border:"none"},"body > *:first-of-type":{marginTop:"0 !important"},"body > *:last-child":{marginBottom:"0 !important"},a:{color:e.color.secondary,textDecoration:"none"},"a.absent":{color:"#cc0000"},"a.anchor":{display:"block",paddingLeft:30,marginLeft:-30,cursor:"pointer",position:"absolute",top:0,left:0,bottom:0},"h1, h2, h3, h4, h5, h6":{margin:"20px 0 10px",padding:0,cursor:"text",position:"relative","&:first-of-type":{marginTop:0,paddingTop:0},"&:hover a.anchor":{textDecoration:"none"},"& tt, & code":{fontSize:"inherit"}},"h1:first-of-type + h2":{marginTop:0,paddingTop:0},"p, blockquote, ul, ol, dl, li, table, pre":{margin:"15px 0"},hr:{border:"0 none",borderTop:`1px solid ${e.appBorderColor}`,height:4,padding:0},"body > h1:first-of-type, body > h2:first-of-type, body > h3:first-of-type, body > h4:first-of-type, body > h5:first-of-type, body > h6:first-of-type":{marginTop:0,paddingTop:0},"body > h1:first-of-type + h2":{marginTop:0,paddingTop:0},"a:first-of-type h1, a:first-of-type h2, a:first-of-type h3, a:first-of-type h4, a:first-of-type h5, a:first-of-type h6":{marginTop:0,paddingTop:0},"h1 p, h2 p, h3 p, h4 p, h5 p, h6 p":{marginTop:0},"li p.first":{display:"inline-block"},"ul, ol":{paddingLeft:30,"& :first-of-type":{marginTop:0},"& :last-child":{marginBottom:0}},dl:{padding:0},"dl dt":{fontSize:"14px",fontWeight:"bold",fontStyle:"italic",margin:"0 0 15px",padding:"0 15px","&:first-of-type":{padding:0},"& > :first-of-type":{marginTop:0},"& > :last-child":{marginBottom:0}},blockquote:{borderLeft:`4px solid ${e.color.medium}`,padding:"0 15px",color:e.color.dark,"& > :first-of-type":{marginTop:0},"& > :last-child":{marginBottom:0}},table:{padding:0,borderCollapse:"collapse","& tr":{borderTop:`1px solid ${e.appBorderColor}`,backgroundColor:"white",margin:0,padding:0,"& th":{fontWeight:"bold",border:`1px solid ${e.appBorderColor}`,textAlign:"left",margin:0,padding:"6px 13px"},"& td":{border:`1px solid ${e.appBorderColor}`,textAlign:"left",margin:0,padding:"6px 13px"},"&:nth-of-type(2n)":{backgroundColor:e.color.lighter},"& th :first-of-type, & td :first-of-type":{marginTop:0},"& th :last-child, & td :last-child":{marginBottom:0}}},img:{maxWidth:"100%"},"span.frame":{display:"block",overflow:"hidden","& > span":{border:`1px solid ${e.color.medium}`,display:"block",float:"left",overflow:"hidden",margin:"13px 0 0",padding:7,width:"auto"},"& span img":{display:"block",float:"left"},"& span span":{clear:"both",color:e.color.darkest,display:"block",padding:"5px 0 0"}},"span.align-center":{display:"block",overflow:"hidden",clear:"both","& > span":{display:"block",overflow:"hidden",margin:"13px auto 0",textAlign:"center"},"& span img":{margin:"0 auto",textAlign:"center"}},"span.align-right":{display:"block",overflow:"hidden",clear:"both","& > span":{display:"block",overflow:"hidden",margin:"13px 0 0",textAlign:"right"},"& span img":{margin:0,textAlign:"right"}},"span.float-left":{display:"block",marginRight:13,overflow:"hidden",float:"left","& span":{margin:"13px 0 0"}},"span.float-right":{display:"block",marginLeft:13,overflow:"hidden",float:"right","& > span":{display:"block",overflow:"hidden",margin:"13px auto 0",textAlign:"right"}},"code, tt":{margin:"0 2px",padding:"0 5px",whiteSpace:"nowrap",border:`1px solid ${e.color.mediumlight}`,backgroundColor:e.color.lighter,borderRadius:3,color:e.base==="dark"&&e.color.darkest}})),Pt=[],lr=null,Fg=b.lazy(async()=>{let{SyntaxHighlighter:e}=await At(()=>import("./syntaxhighlighter-B5GMVT5T-IV_pqN5-.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url);return Pt.length>0&&(Pt.forEach(t=>{e.registerLanguage(...t)}),Pt=[]),lr===null&&(lr=e),{default:t=>a.createElement(e,{...t})}}),Rg=b.lazy(async()=>{let[{SyntaxHighlighter:e},{formatter:t}]=await Promise.all([At(()=>import("./syntaxhighlighter-B5GMVT5T-IV_pqN5-.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url),At(()=>import("./formatter-SWP5E3XI-VlZk_GWI.js"),__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url)]);return Pt.length>0&&(Pt.forEach(r=>{e.registerLanguage(...r)}),Pt=[]),lr===null&&(lr=e),{default:r=>a.createElement(e,{...r,formatter:t})}}),Wn=e=>a.createElement(b.Suspense,{fallback:a.createElement("div",null)},e.format!==!1?a.createElement(Rg,{...e}):a.createElement(Fg,{...e}));Wn.registerLanguage=(...e)=>{if(lr!==null){lr.registerLanguage(...e);return}Pt.push(e)};var $g=e=>typeof e=="number"?e:Number(e),Dg=_.div(({theme:e,col:t,row:r=1})=>t?{display:"inline-block",verticalAlign:"inherit","& > *":{marginLeft:t*e.layoutMargin,verticalAlign:"inherit"},[`& > *:first-child${Ja}`]:{marginLeft:0}}:{"& > *":{marginTop:r*e.layoutMargin},[`& > *:first-child${Ja}`]:{marginTop:0}},({theme:e,outer:t,col:r,row:n})=>{switch(!0){case!!(t&&r):return{marginLeft:t*e.layoutMargin,marginRight:t*e.layoutMargin};case!!(t&&n):return{marginTop:t*e.layoutMargin,marginBottom:t*e.layoutMargin};default:return{}}}),Lg=({col:e,row:t,outer:r,children:n,...o})=>{let l=$g(typeof r=="number"||!r?r:e||t);return a.createElement(Dg,{col:e,row:t,outer:l,...o},n)},Mg=_.div(({theme:e})=>({fontWeight:e.typography.weight.bold})),Bg=_.div(),Ig=_.div(({theme:e})=>({padding:30,textAlign:"center",color:e.color.defaultText,fontSize:e.typography.size.s2-1})),hc=({children:e,...t})=>{let[r,n]=b.Children.toArray(e);return a.createElement(Ig,{...t},a.createElement(Mg,null,r),n&&a.createElement(Bg,null,n))},Pg=_.div(({scale:e=1,elementHeight:t})=>({height:t||"auto",transformOrigin:"top left",transform:`scale(${1/e})`}));function jg({scale:e,children:t}){let r=b.useRef(null),[n,o]=b.useState(0),l=b.useCallback(({height:i})=>{i&&o(i/e)},[e]);return b.useEffect(()=>{r.current&&o(r.current.getBoundingClientRect().height)},[e]),As({ref:r,onResize:l}),a.createElement(Pg,{scale:e,elementHeight:n},a.createElement("div",{ref:r,className:"innerZoomElementWrapper"},t))}var Ng=class extends b.Component{constructor(){super(...arguments),this.iframe=null}componentDidMount(){let{iFrameRef:e}=this.props;this.iframe=e.current}shouldComponentUpdate(e){let{scale:t,active:r}=this.props;return t!==e.scale&&this.setIframeInnerZoom(e.scale),r!==e.active&&this.iframe.setAttribute("data-is-storybook",e.active?"true":"false"),e.children.props.src!==this.props.children.props.src}setIframeInnerZoom(e){try{Object.assign(this.iframe.contentDocument.body.style,{width:`${e*100}%`,height:`${e*100}%`,transform:`scale(${1/e})`,transformOrigin:"top left"})}catch{this.setIframeZoom(e)}}setIframeZoom(e){Object.assign(this.iframe.style,{width:`${e*100}%`,height:`${e*100}%`,transform:`scale(${1/e})`,transformOrigin:"top left"})}render(){let{children:e}=this.props;return a.createElement(a.Fragment,null,e)}},bc={Element:jg,IFrame:Ng},{document:Hg}=Pm,Zg=_.strong(({theme:e})=>({color:e.color.orange})),Vg=_.strong(({theme:e})=>({color:e.color.ancillary,textDecoration:"underline"})),Oi=_.em(({theme:e})=>({color:e.textMutedColor})),zg=/(Error): (.*)\n/,qg=/at (?:(.*) )?\(?(.+)\)?/,Ug=/([^@]+)?(?:\/<)?@(.+)?/,Wg=/([^@]+)?@(.+)?/,yc=({error:e})=>{if(!e)return a.createElement(b.Fragment,null,"This error has no stack or message");if(!e.stack)return a.createElement(b.Fragment,null,e.message||"This error has no stack or message");let t=e.stack.toString();t&&e.message&&!t.includes(e.message)&&(t=`Error: ${e.message} -${t}`);let r=t.match(zg);if(!r)return a.createElement(b.Fragment,null,t);let[,n,o]=r,l=t.split(/\n/).slice(1),[,...i]=l.map(u=>{let s=u.match(qg)||u.match(Ug)||u.match(Wg);return s?{name:(s[1]||"").replace("/<",""),location:s[2].replace(Hg.location.origin,"")}:null}).filter(Boolean);return a.createElement(b.Fragment,null,a.createElement("span",null,n),": ",a.createElement(Zg,null,o),a.createElement("br",null),i.map((u,s)=>u.name?a.createElement(b.Fragment,{key:s}," ","at ",a.createElement(Vg,null,u.name)," (",a.createElement(Oi,null,u.location),")",a.createElement("br",null)):a.createElement(b.Fragment,{key:s}," ","at ",a.createElement(Oi,null,u.location),a.createElement("br",null))))},vc=_.button(({small:e,theme:t})=>({border:0,borderRadius:"3em",cursor:"pointer",display:"inline-block",overflow:"hidden",padding:e?"8px 16px":"13px 20px",position:"relative",textAlign:"center",textDecoration:"none",transitionProperty:"background, box-shadow",transitionDuration:"150ms",transitionTimingFunction:"ease-out",verticalAlign:"top",whiteSpace:"nowrap",userSelect:"none",opacity:1,margin:0,background:"transparent",fontSize:`${e?t.typography.size.s1:t.typography.size.s2-1}px`,fontWeight:t.typography.weight.bold,lineHeight:"1",svg:{display:"inline-block",height:e?12:14,width:e?12:14,verticalAlign:"top",marginRight:e?4:6,marginTop:e?0:-1,marginBottom:e?0:-1,pointerEvents:"none",path:{fill:"currentColor"}}}),({disabled:e})=>e?{cursor:"not-allowed !important",opacity:.5,"&:hover":{transform:"none"}}:{},({containsIcon:e,small:t})=>e?{svg:{display:"block",margin:0},...t?{padding:10}:{padding:13}}:{},({theme:e,primary:t,secondary:r,gray:n})=>{let o;return n?o=e.color.mediumlight:r?o=e.color.secondary:t&&(o=e.color.primary),o?{background:o,color:n?e.color.darkest:e.color.lightest,"&:hover":{background:Kt(.05,o)},"&:active":{boxShadow:"rgba(0, 0, 0, 0.1) 0 0 0 3em inset"},"&:focus":{boxShadow:`${dt(o,1)} 0 1px 9px 2px`,outline:"none"},"&:focus:hover":{boxShadow:`${dt(o,.2)} 0 8px 18px 0px`}}:{}},({theme:e,tertiary:t,inForm:r,small:n})=>t?{background:e.button.background,color:e.input.color,boxShadow:`${e.button.border} 0 0 0 1px inset`,borderRadius:e.input.borderRadius,...r&&n?{padding:"10px 16px"}:{},"&:hover":{background:e.base==="light"?Kt(.02,e.button.background):dg(.03,e.button.background),...r?{}:{boxShadow:"rgba(0,0,0,.2) 0 2px 6px 0, rgba(0,0,0,.1) 0 0 0 1px inset"}},"&:active":{background:e.button.background},"&:focus":{boxShadow:`${dt(e.color.secondary,1)} 0 0 0 1px inset`,outline:"none"}}:{},({theme:e,outline:t})=>t?{boxShadow:`${Ee(.8,e.color.defaultText)} 0 0 0 1px inset`,color:Ee(.3,e.color.defaultText),background:"transparent","&:hover, &:focus":{boxShadow:`${Ee(.5,e.color.defaultText)} 0 0 0 1px inset`,outline:"none"},"&:active":{boxShadow:`${Ee(.5,e.color.defaultText)} 0 0 0 2px inset`,color:Ee(0,e.color.defaultText)}}:{},({theme:e,outline:t,primary:r})=>{let n=e.color.primary;return t&&r?{boxShadow:`${n} 0 0 0 1px inset`,color:n,"svg path:not([fill])":{fill:n},"&:hover":{boxShadow:`${n} 0 0 0 1px inset`,background:"transparent"},"&:active":{background:n,boxShadow:`${n} 0 0 0 1px inset`,color:e.color.tertiary},"&:focus":{boxShadow:`${n} 0 0 0 1px inset, ${dt(n,.4)} 0 1px 9px 2px`,outline:"none"},"&:focus:hover":{boxShadow:`${n} 0 0 0 1px inset, ${dt(n,.2)} 0 8px 18px 0px`}}:{}},({theme:e,outline:t,primary:r,secondary:n})=>{let o;return n?o=e.color.secondary:r&&(o=e.color.primary),t&&o?{boxShadow:`${o} 0 0 0 1px inset`,color:o,"svg path:not([fill])":{fill:o},"&:hover":{boxShadow:`${o} 0 0 0 1px inset`,background:"transparent"},"&:active":{background:o,boxShadow:`${o} 0 0 0 1px inset`,color:e.color.tertiary},"&:focus":{boxShadow:`${o} 0 0 0 1px inset, ${dt(o,.4)} 0 1px 9px 2px`,outline:"none"},"&:focus:hover":{boxShadow:`${o} 0 0 0 1px inset, ${dt(o,.2)} 0 8px 18px 0px`}}:{}}),Gg=vc.withComponent("a"),Ec=Object.assign(b.forwardRef(function({isLink:e,children:t,...r},n){return e?a.createElement(Gg,{...r,ref:n},t):a.createElement(vc,{...r,ref:n},t)}),{defaultProps:{isLink:!1}}),Yg=_.label(({theme:e})=>({display:"flex",borderBottom:`1px solid ${e.appBorderColor}`,margin:"0 15px",padding:"8px 0","&:last-child":{marginBottom:"3rem"}})),Kg=_.span(({theme:e})=>({minWidth:100,fontWeight:e.typography.weight.bold,marginRight:15,display:"flex",justifyContent:"flex-start",alignItems:"center",lineHeight:"16px"})),xc=({label:e,children:t,...r})=>a.createElement(Yg,{...r},e?a.createElement(Kg,null,a.createElement("span",null,e)):null,t);xc.defaultProps={label:void 0};function po(){return po=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(r[o]=e[o]);return r}var Ti=function(e,t){if(typeof e=="function"){e(t);return}e.current=t},Jg=function(e,t){var r=b.useRef();return b.useCallback(function(n){e.current=n,r.current&&Ti(r.current,null),r.current=t,t&&Ti(t,n)},[t])},Qg=Jg,eh=function(){},th=["cacheMeasurements","maxRows","minRows","onChange","onHeightChange"],rh=function(e,t){e.cacheMeasurements,e.maxRows,e.minRows;var r=e.onChange,n=r===void 0?eh:r;e.onHeightChange;var o=Xg(e,th);o.value;var l=b.useRef(null),i=Qg(l,t);return b.useRef(0),b.useRef(),b.createElement("textarea",po({},o,{onChange:n,ref:i}))},nh=b.forwardRef(rh),ah={appearance:"none",border:"0 none",boxSizing:"inherit",display:" block",margin:" 0",background:"transparent",padding:0,fontSize:"inherit",position:"relative"},sl=({theme:e})=>({...ah,transition:"box-shadow 200ms ease-out, opacity 200ms ease-out",color:e.input.color||"inherit",background:e.input.background,boxShadow:`${e.input.border} 0 0 0 1px inset`,borderRadius:e.input.borderRadius,fontSize:e.typography.size.s2-1,lineHeight:"20px",padding:"6px 10px",boxSizing:"border-box",height:32,'&[type="file"]':{height:"auto"},"&:focus":{boxShadow:`${e.color.secondary} 0 0 0 1px inset`,outline:"none"},"&[disabled]":{cursor:"not-allowed",opacity:.5},"&:-webkit-autofill":{WebkitBoxShadow:`0 0 0 3em ${e.color.lightest} inset`},"&::placeholder":{color:e.textMutedColor,opacity:1}}),Gn=({size:e})=>{switch(e){case"100%":return{width:"100%"};case"flex":return{flex:1};case"auto":default:return{display:"inline"}}},wc=({align:e})=>{switch(e){case"end":return{textAlign:"right"};case"center":return{textAlign:"center"};case"start":default:return{textAlign:"left"}}},Yn=({valid:e,theme:t})=>{switch(e){case"valid":return{boxShadow:`${t.color.positive} 0 0 0 1px inset !important`};case"error":return{boxShadow:`${t.color.negative} 0 0 0 1px inset !important`};case"warn":return{boxShadow:`${t.color.warning} 0 0 0 1px inset`};case void 0:case null:default:return{}}},oh=Object.assign(_(b.forwardRef(function({size:e,valid:t,align:r,...n},o){return a.createElement("input",{...n,ref:o})}))(sl,Gn,wc,Yn,{minHeight:32}),{displayName:"Input"}),lh=Object.assign(_(b.forwardRef(function({size:e,valid:t,align:r,...n},o){return a.createElement("select",{...n,ref:o})}))(sl,Gn,Yn,{height:32,userSelect:"none",paddingRight:20,appearance:"menulist"}),{displayName:"Select"}),ih=Object.assign(_(b.forwardRef(function({size:e,valid:t,align:r,...n},o){return a.createElement(nh,{...n,ref:o})}))(sl,Gn,wc,Yn,({height:e=400})=>({overflow:"visible",maxHeight:e})),{displayName:"Textarea"}),sh=_(b.forwardRef(function({size:e,valid:t,align:r,...n},o){return a.createElement(Ec,{...n,ref:o})}))(Gn,Yn,{userSelect:"none",overflow:"visible",zIndex:2,"&:hover":{transform:"none"}}),uh=Object.assign(b.forwardRef(function(e,t){return a.createElement(sh,{...e,tertiary:!0,small:!0,inForm:!0,ref:t})}),{displayName:"Button"}),Ne=Object.assign(_.form({boxSizing:"border-box",width:"100%"}),{Field:xc,Input:oh,Select:lh,Textarea:ih,Button:uh}),ch=b.lazy(()=>At(()=>import("./WithTooltip-V3YHNWJZ-cmK_sC0G.js"),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url).then(e=>({default:e.WithTooltip}))),dh=e=>a.createElement(b.Suspense,{fallback:a.createElement("div",null)},a.createElement(ch,{...e})),ph=b.lazy(()=>At(()=>import("./WithTooltip-V3YHNWJZ-cmK_sC0G.js"),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url).then(e=>({default:e.WithTooltipPure}))),Ac=e=>a.createElement(b.Suspense,{fallback:a.createElement("div",null)},a.createElement(ph,{...e})),fh=_.div(({theme:e})=>({fontWeight:e.typography.weight.bold})),mh=_.span(),gh=_.div(({theme:e})=>({marginTop:8,textAlign:"center","> *":{margin:"0 8px",fontWeight:e.typography.weight.bold}})),hh=_.div(({theme:e})=>({color:e.color.defaultText,lineHeight:"18px"})),bh=_.div({padding:15,width:280,boxSizing:"border-box"}),Sc=({title:e,desc:t,links:r})=>a.createElement(bh,null,a.createElement(hh,null,e&&a.createElement(fh,null,e),t&&a.createElement(mh,null,t)),r&&a.createElement(gh,null,r.map(({title:n,...o})=>a.createElement(wt,{...o,key:n},n))));Sc.defaultProps={title:null,desc:null,links:null};var yh=_.div(({theme:e})=>({padding:"2px 6px",lineHeight:"16px",fontSize:10,fontWeight:e.typography.weight.bold,color:e.color.lightest,boxShadow:"0 0 5px 0 rgba(0, 0, 0, 0.3)",borderRadius:4,whiteSpace:"nowrap",pointerEvents:"none",zIndex:-1,background:e.base==="light"?"rgba(60, 60, 60, 0.9)":"rgba(0, 0, 0, 0.95)",margin:6})),vh=({note:e,...t})=>a.createElement(yh,{...t},e),Eh=_(({active:e,loading:t,disabled:r,...n})=>a.createElement("span",{...n}))(({theme:e})=>({color:e.color.defaultText,fontWeight:e.typography.weight.regular}),({active:e,theme:t})=>e?{color:t.color.secondary,fontWeight:t.typography.weight.bold}:{},({loading:e,theme:t})=>e?{display:"inline-block",flex:"none",...t.animation.inlineGlow}:{},({disabled:e,theme:t})=>e?{color:Ee(.7,t.color.defaultText)}:{}),xh=_.span({display:"flex","& svg":{height:12,width:12,margin:"3px 0",verticalAlign:"top"},"& path":{fill:"inherit"}}),wh=_.span({flex:1,textAlign:"left",display:"flex",flexDirection:"column"},({isIndented:e})=>e?{marginLeft:24}:{}),Ah=_.span(({theme:e})=>({fontSize:"11px",lineHeight:"14px"}),({active:e,theme:t})=>e?{color:t.color.secondary}:{},({theme:e,disabled:t})=>t?{color:e.textMutedColor}:{}),Fi=_.span(({active:e,theme:t})=>e?{"& svg":{opacity:1},"& svg path:not([fill])":{fill:t.color.secondary}}:{},()=>({display:"flex",maxWidth:14})),Sh=_.a(({theme:e})=>({fontSize:e.typography.size.s1,transition:"all 150ms ease-out",color:e.color.dark,textDecoration:"none",cursor:"pointer",justifyContent:"space-between",lineHeight:"18px",padding:"7px 10px",display:"flex",alignItems:"center","& > * + *":{paddingLeft:10},"&:hover":{background:e.background.hoverable},"&:hover svg":{opacity:1}}),({disabled:e})=>e?{cursor:"not-allowed"}:{}),Ch=Ht(100)((e,t,r)=>{let n={};return e&&Object.assign(n,{onClick:e}),t&&Object.assign(n,{href:t}),r&&t&&Object.assign(n,{to:t,as:r}),n}),Cc=({loading:e,left:t,title:r,center:n,right:o,icon:l,active:i,disabled:u,isIndented:s,href:c,onClick:d,LinkWrapper:f,...m})=>{let p=Ch(d,c,f),h={active:i,disabled:u},g=typeof l=="string"&&Pr[l];return a.createElement(Sh,{...h,...m,...p},l?a.createElement(Fi,{...h},g?a.createElement(ve,{icon:l}):l):t&&a.createElement(Fi,{...h},t),r||n?a.createElement(wh,{isIndented:!t&&!l&&s},r&&a.createElement(Eh,{...h,loading:e},r),n&&a.createElement(Ah,{...h},n)):null,o&&a.createElement(xh,{...h},o))};Cc.defaultProps={loading:!1,left:null,title:a.createElement("span",null,"Loading state"),center:null,right:null,active:!1,disabled:!1,href:null,LinkWrapper:null,onClick:null};var ul=Cc,kh=_.div({minWidth:180,overflow:"hidden",overflowY:"auto",maxHeight:15.5*32},({theme:e})=>({borderRadius:e.appBorderRadius})),_h=e=>{let{LinkWrapper:t,onClick:r,id:n,isIndented:o,...l}=e,{title:i,href:u,active:s}=l,c=b.useCallback(f=>{r(f,l)},[r]),d=!!r;return a.createElement(ul,{title:i,active:s,href:u,id:`list-item-${n}`,LinkWrapper:t,isIndented:o,...l,...d?{onClick:c}:{}})},cl=({links:e,LinkWrapper:t})=>{let r=e.some(n=>n.left||n.icon);return a.createElement(kh,null,e.map(({isGatsby:n,...o})=>a.createElement(_h,{key:o.id,LinkWrapper:n?t:null,isIndented:r,...o})))};cl.defaultProps={LinkWrapper:ul.defaultProps.LinkWrapper};var dl=a.forwardRef(({children:e,...t},r)=>t.href!=null?a.createElement("a",{ref:r,...t},e):a.createElement("button",{ref:r,type:"button",...t},e));dl.displayName="ButtonOrLink";var Gr=_(dl,{shouldForwardProp:Fo})({whiteSpace:"normal",display:"inline-flex",overflow:"hidden",verticalAlign:"top",justifyContent:"center",alignItems:"center",textAlign:"center",textDecoration:"none","&:empty":{display:"none"}},({theme:e})=>({padding:"0 15px",transition:"color 0.2s linear, border-bottom-color 0.2s linear",height:40,lineHeight:"12px",cursor:"pointer",background:"transparent",border:"0 solid transparent",borderTop:"3px solid transparent",borderBottom:"3px solid transparent",fontWeight:"bold",fontSize:13,"&:focus":{outline:"0 none",borderBottomColor:e.color.secondary}}),({active:e,textColor:t,theme:r})=>e?{color:t||r.barSelectedColor,borderBottomColor:r.barSelectedColor}:{color:t||r.barTextColor,borderBottomColor:"transparent"});Gr.displayName="TabButton";var jt=_(dl,{shouldForwardProp:Fo})(()=>({alignItems:"center",background:"transparent",border:"none",borderRadius:4,color:"inherit",cursor:"pointer",display:"inline-flex",fontSize:13,fontWeight:"bold",height:28,justifyContent:"center",marginTop:6,padding:"8px 7px","& > svg":{width:14}}),({active:e,theme:t})=>e?{backgroundColor:t.background.hoverable,color:t.barSelectedColor}:{},({disabled:e,theme:t})=>e?{opacity:.5,cursor:"not-allowed"}:{"&:hover, &:focus-visible":{background:Ee(.88,t.color.secondary),color:t.barHoverColor},"&:focus-visible":{outline:qn},"&:focus:not(:focus-visible)":{outline:"none"}});jt.displayName="IconButton";var Oh=_.div(({theme:e})=>({width:14,height:14,backgroundColor:e.appBorderColor,animation:`${e.animation.glow} 1.5s ease-in-out infinite`})),Th=_.div(()=>({marginTop:6,padding:7,height:28})),kc=()=>a.createElement(Th,null,a.createElement(Oh,null)),fo=_.div({display:"flex",whiteSpace:"nowrap",flexBasis:"auto",marginLeft:3,marginRight:3},({scrollable:e})=>e?{flexShrink:0}:{},({left:e})=>e?{"& > *":{marginLeft:4}}:{},({right:e})=>e?{marginLeft:30,"& > *":{marginRight:4}}:{});fo.displayName="Side";var Fh=({children:e,className:t,scrollable:r})=>r?a.createElement(Uo,{vertical:!1,className:t},e):a.createElement("div",{className:t},e),pl=_(Fh)(({theme:e,scrollable:t=!0})=>({color:e.barTextColor,width:"100%",height:40,flexShrink:0,overflow:t?"auto":"hidden",overflowY:"hidden"}),({theme:e,border:t=!1})=>t?{boxShadow:`${e.appBorderColor} 0 -1px 0 0 inset`,background:e.barBg}:{});pl.displayName="Bar";var Rh=_.div(({bgColor:e})=>({display:"flex",justifyContent:"space-between",position:"relative",flexWrap:"nowrap",flexShrink:0,height:40,backgroundColor:e||""})),Kn=({children:e,backgroundColor:t,...r})=>{let[n,o]=b.Children.toArray(e);return a.createElement(pl,{...r},a.createElement(Rh,{bgColor:t},a.createElement(fo,{scrollable:r.scrollable,left:!0},n),o?a.createElement(fo,{right:!0},o):null))};Kn.displayName="FlexBar";var _c=_.div(({active:e})=>e?{display:"block"}:{display:"none"}),Ri=e=>b.Children.toArray(e).map(({props:{title:t,id:r,color:n,children:o}})=>{let l=Array.isArray(o)?o[0]:o;return{title:t,id:r,...n?{color:n}:{},render:typeof l=="function"?l:({active:i})=>a.createElement(_c,{active:i,role:"tabpanel"},l)}}),$h=_.span(({theme:e,isActive:t})=>({display:"inline-block",width:0,height:0,marginLeft:8,color:t?e.color.secondary:e.color.mediumdark,borderRight:"3px solid transparent",borderLeft:"3px solid transparent",borderTop:"3px solid",transition:"transform .1s ease-out"})),Dh=_(Gr)(({active:e,theme:t,preActive:r})=>` +${t}`);let r=t.match(zg);if(!r)return a.createElement(b.Fragment,null,t);let[,n,o]=r,l=t.split(/\n/).slice(1),[,...i]=l.map(u=>{let s=u.match(qg)||u.match(Ug)||u.match(Wg);return s?{name:(s[1]||"").replace("/<",""),location:s[2].replace(Hg.location.origin,"")}:null}).filter(Boolean);return a.createElement(b.Fragment,null,a.createElement("span",null,n),": ",a.createElement(Zg,null,o),a.createElement("br",null),i.map((u,s)=>u.name?a.createElement(b.Fragment,{key:s}," ","at ",a.createElement(Vg,null,u.name)," (",a.createElement(Oi,null,u.location),")",a.createElement("br",null)):a.createElement(b.Fragment,{key:s}," ","at ",a.createElement(Oi,null,u.location),a.createElement("br",null))))},vc=_.button(({small:e,theme:t})=>({border:0,borderRadius:"3em",cursor:"pointer",display:"inline-block",overflow:"hidden",padding:e?"8px 16px":"13px 20px",position:"relative",textAlign:"center",textDecoration:"none",transitionProperty:"background, box-shadow",transitionDuration:"150ms",transitionTimingFunction:"ease-out",verticalAlign:"top",whiteSpace:"nowrap",userSelect:"none",opacity:1,margin:0,background:"transparent",fontSize:`${e?t.typography.size.s1:t.typography.size.s2-1}px`,fontWeight:t.typography.weight.bold,lineHeight:"1",svg:{display:"inline-block",height:e?12:14,width:e?12:14,verticalAlign:"top",marginRight:e?4:6,marginTop:e?0:-1,marginBottom:e?0:-1,pointerEvents:"none",path:{fill:"currentColor"}}}),({disabled:e})=>e?{cursor:"not-allowed !important",opacity:.5,"&:hover":{transform:"none"}}:{},({containsIcon:e,small:t})=>e?{svg:{display:"block",margin:0},...t?{padding:10}:{padding:13}}:{},({theme:e,primary:t,secondary:r,gray:n})=>{let o;return n?o=e.color.mediumlight:r?o=e.color.secondary:t&&(o=e.color.primary),o?{background:o,color:n?e.color.darkest:e.color.lightest,"&:hover":{background:Kt(.05,o)},"&:active":{boxShadow:"rgba(0, 0, 0, 0.1) 0 0 0 3em inset"},"&:focus":{boxShadow:`${dt(o,1)} 0 1px 9px 2px`,outline:"none"},"&:focus:hover":{boxShadow:`${dt(o,.2)} 0 8px 18px 0px`}}:{}},({theme:e,tertiary:t,inForm:r,small:n})=>t?{background:e.button.background,color:e.input.color,boxShadow:`${e.button.border} 0 0 0 1px inset`,borderRadius:e.input.borderRadius,...r&&n?{padding:"10px 16px"}:{},"&:hover":{background:e.base==="light"?Kt(.02,e.button.background):dg(.03,e.button.background),...r?{}:{boxShadow:"rgba(0,0,0,.2) 0 2px 6px 0, rgba(0,0,0,.1) 0 0 0 1px inset"}},"&:active":{background:e.button.background},"&:focus":{boxShadow:`${dt(e.color.secondary,1)} 0 0 0 1px inset`,outline:"none"}}:{},({theme:e,outline:t})=>t?{boxShadow:`${Ee(.8,e.color.defaultText)} 0 0 0 1px inset`,color:Ee(.3,e.color.defaultText),background:"transparent","&:hover, &:focus":{boxShadow:`${Ee(.5,e.color.defaultText)} 0 0 0 1px inset`,outline:"none"},"&:active":{boxShadow:`${Ee(.5,e.color.defaultText)} 0 0 0 2px inset`,color:Ee(0,e.color.defaultText)}}:{},({theme:e,outline:t,primary:r})=>{let n=e.color.primary;return t&&r?{boxShadow:`${n} 0 0 0 1px inset`,color:n,"svg path:not([fill])":{fill:n},"&:hover":{boxShadow:`${n} 0 0 0 1px inset`,background:"transparent"},"&:active":{background:n,boxShadow:`${n} 0 0 0 1px inset`,color:e.color.tertiary},"&:focus":{boxShadow:`${n} 0 0 0 1px inset, ${dt(n,.4)} 0 1px 9px 2px`,outline:"none"},"&:focus:hover":{boxShadow:`${n} 0 0 0 1px inset, ${dt(n,.2)} 0 8px 18px 0px`}}:{}},({theme:e,outline:t,primary:r,secondary:n})=>{let o;return n?o=e.color.secondary:r&&(o=e.color.primary),t&&o?{boxShadow:`${o} 0 0 0 1px inset`,color:o,"svg path:not([fill])":{fill:o},"&:hover":{boxShadow:`${o} 0 0 0 1px inset`,background:"transparent"},"&:active":{background:o,boxShadow:`${o} 0 0 0 1px inset`,color:e.color.tertiary},"&:focus":{boxShadow:`${o} 0 0 0 1px inset, ${dt(o,.4)} 0 1px 9px 2px`,outline:"none"},"&:focus:hover":{boxShadow:`${o} 0 0 0 1px inset, ${dt(o,.2)} 0 8px 18px 0px`}}:{}}),Gg=vc.withComponent("a"),Ec=Object.assign(b.forwardRef(function({isLink:e,children:t,...r},n){return e?a.createElement(Gg,{...r,ref:n},t):a.createElement(vc,{...r,ref:n},t)}),{defaultProps:{isLink:!1}}),Yg=_.label(({theme:e})=>({display:"flex",borderBottom:`1px solid ${e.appBorderColor}`,margin:"0 15px",padding:"8px 0","&:last-child":{marginBottom:"3rem"}})),Kg=_.span(({theme:e})=>({minWidth:100,fontWeight:e.typography.weight.bold,marginRight:15,display:"flex",justifyContent:"flex-start",alignItems:"center",lineHeight:"16px"})),xc=({label:e,children:t,...r})=>a.createElement(Yg,{...r},e?a.createElement(Kg,null,a.createElement("span",null,e)):null,t);xc.defaultProps={label:void 0};function po(){return po=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(r[o]=e[o]);return r}var Ti=function(e,t){if(typeof e=="function"){e(t);return}e.current=t},Jg=function(e,t){var r=b.useRef();return b.useCallback(function(n){e.current=n,r.current&&Ti(r.current,null),r.current=t,t&&Ti(t,n)},[t])},Qg=Jg,eh=function(){},th=["cacheMeasurements","maxRows","minRows","onChange","onHeightChange"],rh=function(e,t){e.cacheMeasurements,e.maxRows,e.minRows;var r=e.onChange,n=r===void 0?eh:r;e.onHeightChange;var o=Xg(e,th);o.value;var l=b.useRef(null),i=Qg(l,t);return b.useRef(0),b.useRef(),b.createElement("textarea",po({},o,{onChange:n,ref:i}))},nh=b.forwardRef(rh),ah={appearance:"none",border:"0 none",boxSizing:"inherit",display:" block",margin:" 0",background:"transparent",padding:0,fontSize:"inherit",position:"relative"},sl=({theme:e})=>({...ah,transition:"box-shadow 200ms ease-out, opacity 200ms ease-out",color:e.input.color||"inherit",background:e.input.background,boxShadow:`${e.input.border} 0 0 0 1px inset`,borderRadius:e.input.borderRadius,fontSize:e.typography.size.s2-1,lineHeight:"20px",padding:"6px 10px",boxSizing:"border-box",height:32,'&[type="file"]':{height:"auto"},"&:focus":{boxShadow:`${e.color.secondary} 0 0 0 1px inset`,outline:"none"},"&[disabled]":{cursor:"not-allowed",opacity:.5},"&:-webkit-autofill":{WebkitBoxShadow:`0 0 0 3em ${e.color.lightest} inset`},"&::placeholder":{color:e.textMutedColor,opacity:1}}),Gn=({size:e})=>{switch(e){case"100%":return{width:"100%"};case"flex":return{flex:1};case"auto":default:return{display:"inline"}}},wc=({align:e})=>{switch(e){case"end":return{textAlign:"right"};case"center":return{textAlign:"center"};case"start":default:return{textAlign:"left"}}},Yn=({valid:e,theme:t})=>{switch(e){case"valid":return{boxShadow:`${t.color.positive} 0 0 0 1px inset !important`};case"error":return{boxShadow:`${t.color.negative} 0 0 0 1px inset !important`};case"warn":return{boxShadow:`${t.color.warning} 0 0 0 1px inset`};case void 0:case null:default:return{}}},oh=Object.assign(_(b.forwardRef(function({size:e,valid:t,align:r,...n},o){return a.createElement("input",{...n,ref:o})}))(sl,Gn,wc,Yn,{minHeight:32}),{displayName:"Input"}),lh=Object.assign(_(b.forwardRef(function({size:e,valid:t,align:r,...n},o){return a.createElement("select",{...n,ref:o})}))(sl,Gn,Yn,{height:32,userSelect:"none",paddingRight:20,appearance:"menulist"}),{displayName:"Select"}),ih=Object.assign(_(b.forwardRef(function({size:e,valid:t,align:r,...n},o){return a.createElement(nh,{...n,ref:o})}))(sl,Gn,wc,Yn,({height:e=400})=>({overflow:"visible",maxHeight:e})),{displayName:"Textarea"}),sh=_(b.forwardRef(function({size:e,valid:t,align:r,...n},o){return a.createElement(Ec,{...n,ref:o})}))(Gn,Yn,{userSelect:"none",overflow:"visible",zIndex:2,"&:hover":{transform:"none"}}),uh=Object.assign(b.forwardRef(function(e,t){return a.createElement(sh,{...e,tertiary:!0,small:!0,inForm:!0,ref:t})}),{displayName:"Button"}),Ne=Object.assign(_.form({boxSizing:"border-box",width:"100%"}),{Field:xc,Input:oh,Select:lh,Textarea:ih,Button:uh}),ch=b.lazy(()=>At(()=>import("./WithTooltip-V3YHNWJZ-YO_ynaZI.js"),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url).then(e=>({default:e.WithTooltip}))),dh=e=>a.createElement(b.Suspense,{fallback:a.createElement("div",null)},a.createElement(ch,{...e})),ph=b.lazy(()=>At(()=>import("./WithTooltip-V3YHNWJZ-YO_ynaZI.js"),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url).then(e=>({default:e.WithTooltipPure}))),Ac=e=>a.createElement(b.Suspense,{fallback:a.createElement("div",null)},a.createElement(ph,{...e})),fh=_.div(({theme:e})=>({fontWeight:e.typography.weight.bold})),mh=_.span(),gh=_.div(({theme:e})=>({marginTop:8,textAlign:"center","> *":{margin:"0 8px",fontWeight:e.typography.weight.bold}})),hh=_.div(({theme:e})=>({color:e.color.defaultText,lineHeight:"18px"})),bh=_.div({padding:15,width:280,boxSizing:"border-box"}),Sc=({title:e,desc:t,links:r})=>a.createElement(bh,null,a.createElement(hh,null,e&&a.createElement(fh,null,e),t&&a.createElement(mh,null,t)),r&&a.createElement(gh,null,r.map(({title:n,...o})=>a.createElement(wt,{...o,key:n},n))));Sc.defaultProps={title:null,desc:null,links:null};var yh=_.div(({theme:e})=>({padding:"2px 6px",lineHeight:"16px",fontSize:10,fontWeight:e.typography.weight.bold,color:e.color.lightest,boxShadow:"0 0 5px 0 rgba(0, 0, 0, 0.3)",borderRadius:4,whiteSpace:"nowrap",pointerEvents:"none",zIndex:-1,background:e.base==="light"?"rgba(60, 60, 60, 0.9)":"rgba(0, 0, 0, 0.95)",margin:6})),vh=({note:e,...t})=>a.createElement(yh,{...t},e),Eh=_(({active:e,loading:t,disabled:r,...n})=>a.createElement("span",{...n}))(({theme:e})=>({color:e.color.defaultText,fontWeight:e.typography.weight.regular}),({active:e,theme:t})=>e?{color:t.color.secondary,fontWeight:t.typography.weight.bold}:{},({loading:e,theme:t})=>e?{display:"inline-block",flex:"none",...t.animation.inlineGlow}:{},({disabled:e,theme:t})=>e?{color:Ee(.7,t.color.defaultText)}:{}),xh=_.span({display:"flex","& svg":{height:12,width:12,margin:"3px 0",verticalAlign:"top"},"& path":{fill:"inherit"}}),wh=_.span({flex:1,textAlign:"left",display:"flex",flexDirection:"column"},({isIndented:e})=>e?{marginLeft:24}:{}),Ah=_.span(({theme:e})=>({fontSize:"11px",lineHeight:"14px"}),({active:e,theme:t})=>e?{color:t.color.secondary}:{},({theme:e,disabled:t})=>t?{color:e.textMutedColor}:{}),Fi=_.span(({active:e,theme:t})=>e?{"& svg":{opacity:1},"& svg path:not([fill])":{fill:t.color.secondary}}:{},()=>({display:"flex",maxWidth:14})),Sh=_.a(({theme:e})=>({fontSize:e.typography.size.s1,transition:"all 150ms ease-out",color:e.color.dark,textDecoration:"none",cursor:"pointer",justifyContent:"space-between",lineHeight:"18px",padding:"7px 10px",display:"flex",alignItems:"center","& > * + *":{paddingLeft:10},"&:hover":{background:e.background.hoverable},"&:hover svg":{opacity:1}}),({disabled:e})=>e?{cursor:"not-allowed"}:{}),Ch=Ht(100)((e,t,r)=>{let n={};return e&&Object.assign(n,{onClick:e}),t&&Object.assign(n,{href:t}),r&&t&&Object.assign(n,{to:t,as:r}),n}),Cc=({loading:e,left:t,title:r,center:n,right:o,icon:l,active:i,disabled:u,isIndented:s,href:c,onClick:d,LinkWrapper:f,...m})=>{let p=Ch(d,c,f),h={active:i,disabled:u},g=typeof l=="string"&&Pr[l];return a.createElement(Sh,{...h,...m,...p},l?a.createElement(Fi,{...h},g?a.createElement(ve,{icon:l}):l):t&&a.createElement(Fi,{...h},t),r||n?a.createElement(wh,{isIndented:!t&&!l&&s},r&&a.createElement(Eh,{...h,loading:e},r),n&&a.createElement(Ah,{...h},n)):null,o&&a.createElement(xh,{...h},o))};Cc.defaultProps={loading:!1,left:null,title:a.createElement("span",null,"Loading state"),center:null,right:null,active:!1,disabled:!1,href:null,LinkWrapper:null,onClick:null};var ul=Cc,kh=_.div({minWidth:180,overflow:"hidden",overflowY:"auto",maxHeight:15.5*32},({theme:e})=>({borderRadius:e.appBorderRadius})),_h=e=>{let{LinkWrapper:t,onClick:r,id:n,isIndented:o,...l}=e,{title:i,href:u,active:s}=l,c=b.useCallback(f=>{r(f,l)},[r]),d=!!r;return a.createElement(ul,{title:i,active:s,href:u,id:`list-item-${n}`,LinkWrapper:t,isIndented:o,...l,...d?{onClick:c}:{}})},cl=({links:e,LinkWrapper:t})=>{let r=e.some(n=>n.left||n.icon);return a.createElement(kh,null,e.map(({isGatsby:n,...o})=>a.createElement(_h,{key:o.id,LinkWrapper:n?t:null,isIndented:r,...o})))};cl.defaultProps={LinkWrapper:ul.defaultProps.LinkWrapper};var dl=a.forwardRef(({children:e,...t},r)=>t.href!=null?a.createElement("a",{ref:r,...t},e):a.createElement("button",{ref:r,type:"button",...t},e));dl.displayName="ButtonOrLink";var Gr=_(dl,{shouldForwardProp:Fo})({whiteSpace:"normal",display:"inline-flex",overflow:"hidden",verticalAlign:"top",justifyContent:"center",alignItems:"center",textAlign:"center",textDecoration:"none","&:empty":{display:"none"}},({theme:e})=>({padding:"0 15px",transition:"color 0.2s linear, border-bottom-color 0.2s linear",height:40,lineHeight:"12px",cursor:"pointer",background:"transparent",border:"0 solid transparent",borderTop:"3px solid transparent",borderBottom:"3px solid transparent",fontWeight:"bold",fontSize:13,"&:focus":{outline:"0 none",borderBottomColor:e.color.secondary}}),({active:e,textColor:t,theme:r})=>e?{color:t||r.barSelectedColor,borderBottomColor:r.barSelectedColor}:{color:t||r.barTextColor,borderBottomColor:"transparent"});Gr.displayName="TabButton";var jt=_(dl,{shouldForwardProp:Fo})(()=>({alignItems:"center",background:"transparent",border:"none",borderRadius:4,color:"inherit",cursor:"pointer",display:"inline-flex",fontSize:13,fontWeight:"bold",height:28,justifyContent:"center",marginTop:6,padding:"8px 7px","& > svg":{width:14}}),({active:e,theme:t})=>e?{backgroundColor:t.background.hoverable,color:t.barSelectedColor}:{},({disabled:e,theme:t})=>e?{opacity:.5,cursor:"not-allowed"}:{"&:hover, &:focus-visible":{background:Ee(.88,t.color.secondary),color:t.barHoverColor},"&:focus-visible":{outline:qn},"&:focus:not(:focus-visible)":{outline:"none"}});jt.displayName="IconButton";var Oh=_.div(({theme:e})=>({width:14,height:14,backgroundColor:e.appBorderColor,animation:`${e.animation.glow} 1.5s ease-in-out infinite`})),Th=_.div(()=>({marginTop:6,padding:7,height:28})),kc=()=>a.createElement(Th,null,a.createElement(Oh,null)),fo=_.div({display:"flex",whiteSpace:"nowrap",flexBasis:"auto",marginLeft:3,marginRight:3},({scrollable:e})=>e?{flexShrink:0}:{},({left:e})=>e?{"& > *":{marginLeft:4}}:{},({right:e})=>e?{marginLeft:30,"& > *":{marginRight:4}}:{});fo.displayName="Side";var Fh=({children:e,className:t,scrollable:r})=>r?a.createElement(Uo,{vertical:!1,className:t},e):a.createElement("div",{className:t},e),pl=_(Fh)(({theme:e,scrollable:t=!0})=>({color:e.barTextColor,width:"100%",height:40,flexShrink:0,overflow:t?"auto":"hidden",overflowY:"hidden"}),({theme:e,border:t=!1})=>t?{boxShadow:`${e.appBorderColor} 0 -1px 0 0 inset`,background:e.barBg}:{});pl.displayName="Bar";var Rh=_.div(({bgColor:e})=>({display:"flex",justifyContent:"space-between",position:"relative",flexWrap:"nowrap",flexShrink:0,height:40,backgroundColor:e||""})),Kn=({children:e,backgroundColor:t,...r})=>{let[n,o]=b.Children.toArray(e);return a.createElement(pl,{...r},a.createElement(Rh,{bgColor:t},a.createElement(fo,{scrollable:r.scrollable,left:!0},n),o?a.createElement(fo,{right:!0},o):null))};Kn.displayName="FlexBar";var _c=_.div(({active:e})=>e?{display:"block"}:{display:"none"}),Ri=e=>b.Children.toArray(e).map(({props:{title:t,id:r,color:n,children:o}})=>{let l=Array.isArray(o)?o[0]:o;return{title:t,id:r,...n?{color:n}:{},render:typeof l=="function"?l:({active:i})=>a.createElement(_c,{active:i,role:"tabpanel"},l)}}),$h=_.span(({theme:e,isActive:t})=>({display:"inline-block",width:0,height:0,marginLeft:8,color:t?e.color.secondary:e.color.mediumdark,borderRight:"3px solid transparent",borderLeft:"3px solid transparent",borderTop:"3px solid",transition:"transform .1s ease-out"})),Dh=_(Gr)(({active:e,theme:t,preActive:r})=>` color: ${r||e?t.color.secondary:t.color.mediumdark}; &:hover { color: ${t.color.secondary}; @@ -308,7 +308,7 @@ ${t}`);let r=t.match(zg);if(!r)return a.createElement(b.Fragment,null,t);let[,n, ${Ke(.02,e.input.background)} 100%)`:`linear-gradient(to right, ${e.color.green} 0%, ${e.color.green} ${(n-t)/(r-t)*100}%, ${Dt(.02,e.input.background)} ${(n-t)/(r-t)*100}%, - ${Dt(.02,e.input.background)} 100%)`,boxShadow:`${e.appBorderColor} 0 0 0 1px inset`,color:"transparent",width:"100%",height:"6px",cursor:"pointer"},"&::-ms-fill-lower":{borderRadius:6},"&::-ms-fill-upper":{borderRadius:6},"&::-ms-thumb":{width:16,height:16,background:`${e.input.background}`,border:`1px solid ${pt(e.appBorderColor,.2)}`,borderRadius:50,cursor:"grab",marginTop:0},"@supports (-ms-ime-align:auto)":{"input[type=range]":{margin:"0"}}})),$0=_.span({paddingLeft:5,paddingRight:5,fontSize:12,whiteSpace:"nowrap",fontFeatureSettings:"tnum",fontVariantNumeric:"tabular-nums"}),e9=_($0)(({numberOFDecimalsPlaces:e,max:t})=>({width:`${e+t.toString().length*2+3}ch`,textAlign:"right",flexShrink:0})),t9=_.div({display:"flex",alignItems:"center",width:"100%"});function r9(e){let t=e.toString().match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return t?Math.max(0,(t[1]?t[1].length:0)-(t[2]?+t[2]:0)):0}var n9=({name:e,value:t,onChange:r,min:n=0,max:o=100,step:l=1,onBlur:i,onFocus:u})=>{let s=f=>{r(hx(f.target.value))},c=t!==void 0,d=b.useMemo(()=>r9(l),[l]);return a.createElement(t9,null,a.createElement($0,null,n),a.createElement(Qx,{id:He(e),type:"range",onChange:s,name:e,value:t,min:n,max:o,step:l,onFocus:u,onBlur:i}),a.createElement(e9,{numberOFDecimalsPlaces:d,max:o},c?t.toFixed(d):"--"," / ",o))},a9=_.label({display:"flex"}),o9=_.div(({isMaxed:e})=>({marginLeft:"0.75rem",paddingTop:"0.35rem",color:e?"red":void 0})),l9=({name:e,value:t,onChange:r,onFocus:n,onBlur:o,maxLength:l})=>{let i=f=>{r(f.target.value)},[u,s]=b.useState(!1),c=b.useCallback(()=>{r(""),s(!0)},[s]);if(t===void 0)return a.createElement(Ne.Button,{id:Dn(e),onClick:c},"Set string");let d=typeof t=="string";return a.createElement(a9,null,a.createElement(Ne.Textarea,{id:He(e),maxLength:l,onChange:i,size:"flex",placeholder:"Edit string...",autoFocus:u,valid:d?null:"error",name:e,value:d?t:"",onFocus:n,onBlur:o}),l&&a.createElement(o9,{isMaxed:(t==null?void 0:t.length)===l},(t==null?void 0:t.length)??0," / ",l))},i9=_(Ne.Input)({padding:10});function s9(e){e.forEach(t=>{t.startsWith("blob:")&&URL.revokeObjectURL(t)})}var u9=({onChange:e,name:t,accept:r="image/*",value:n})=>{let o=b.useRef(null);function l(i){if(!i.target.files)return;let u=Array.from(i.target.files).map(s=>URL.createObjectURL(s));e(u),s9(n)}return b.useEffect(()=>{n==null&&o.current&&(o.current.value=null)},[n,t]),a.createElement(i9,{ref:o,id:He(t),type:"file",name:t,multiple:!0,onChange:l,accept:r,size:"flex"})},c9=b.lazy(()=>At(()=>import("./Color-6VNJS4EI-APgtbMfN.js"),__vite__mapDeps([14,2,3,10,1,4,5,6,7,8,9,11]),import.meta.url)),d9=e=>a.createElement(b.Suspense,{fallback:a.createElement("div",null)},a.createElement(c9,{...e})),p9={array:vs,object:vs,boolean:sx,color:d9,date:mx,number:bx,check:Gt,"inline-check":Gt,radio:Gt,"inline-radio":Gt,select:Gt,"multi-select":Gt,range:n9,text:l9,file:u9},Es=()=>a.createElement(a.Fragment,null,"-"),f9=({row:e,arg:t,updateArgs:r,isHovered:n})=>{let{key:o,control:l}=e,[i,u]=b.useState(!1),[s,c]=b.useState({value:t});b.useEffect(()=>{i||c({value:t})},[i,t]);let d=b.useCallback(g=>(c({value:g}),r({[o]:g}),g),[r,o]),f=b.useCallback(()=>u(!1),[]),m=b.useCallback(()=>u(!0),[]);if(!l||l.disable)return n?a.createElement(wt,{href:"https://storybook.js.org/docs/react/essentials/controls",target:"_blank",withArrow:!0},"Setup controls"):a.createElement(Es,null);let p={name:o,argType:e,value:s.value,onChange:d,onBlur:f,onFocus:m},h=p9[l.type]||Es;return a.createElement(h,{...p,...l,controlType:l.type})},m9=_.span({fontWeight:"bold"}),g9=_.span(({theme:e})=>({color:e.color.negative,fontFamily:e.typography.fonts.mono,cursor:"help"})),h9=_.div(({theme:e})=>({"&&":{p:{margin:"0 0 10px 0"},a:{color:e.color.secondary}},code:{...gt({theme:e}),fontSize:12,fontFamily:e.typography.fonts.mono},"& code":{margin:0,display:"inline-block"},"& pre > code":{whiteSpace:"pre-wrap"}})),b9=_.div(({theme:e,hasDescription:t})=>({color:e.base==="light"?ee(.1,e.color.defaultText):ee(.2,e.color.defaultText),marginTop:t?4:0})),y9=_.div(({theme:e,hasDescription:t})=>({color:e.base==="light"?ee(.1,e.color.defaultText):ee(.2,e.color.defaultText),marginTop:t?12:0,marginBottom:12})),v9=_.td(({theme:e,expandable:t})=>({paddingLeft:t?"40px !important":"20px !important"})),ln=e=>{var g;let[t,r]=b.useState(!1),{row:n,updateArgs:o,compact:l,expandable:i,initialExpandedArgs:u}=e,{name:s,description:c}=n,d=n.table||{},f=d.type||n.type,m=d.defaultValue||n.defaultValue,p=(g=n.type)==null?void 0:g.required,h=c!=null&&c!=="";return a.createElement("tr",{onMouseEnter:()=>r(!0),onMouseLeave:()=>r(!1)},a.createElement(v9,{expandable:i},a.createElement(m9,null,s),p?a.createElement(g9,{title:"Required"},"*"):null),l?null:a.createElement("td",null,h&&a.createElement(h9,null,a.createElement(n0,null,c)),d.jsDocTags!=null?a.createElement(a.Fragment,null,a.createElement(y9,{hasDescription:h},a.createElement(Pa,{value:f,initialExpandedArgs:u})),a.createElement(K8,{tags:d.jsDocTags})):a.createElement(b9,{hasDescription:h},a.createElement(Pa,{value:f,initialExpandedArgs:u}))),l?null:a.createElement("td",null,a.createElement(Pa,{value:m,initialExpandedArgs:u})),o?a.createElement("td",null,a.createElement(f9,{...e,isHovered:t})):null)},E9=_(ve)(({theme:e})=>({marginRight:8,marginLeft:-10,marginTop:-2,height:12,width:12,color:e.base==="light"?ee(.25,e.color.defaultText):ee(.3,e.color.defaultText),border:"none",display:"inline-block"})),x9=_.span(({theme:e})=>({display:"flex",lineHeight:"20px",alignItems:"center"})),w9=_.td(({theme:e})=>({position:"relative",letterSpacing:"0.35em",textTransform:"uppercase",fontWeight:e.typography.weight.bold,fontSize:e.typography.size.s1-1,color:e.base==="light"?ee(.4,e.color.defaultText):ee(.6,e.color.defaultText),background:`${e.background.app} !important`,"& ~ td":{background:`${e.background.app} !important`}})),A9=_.td(({theme:e})=>({position:"relative",fontWeight:e.typography.weight.bold,fontSize:e.typography.size.s2-1,background:e.background.app})),S9=_.td(()=>({position:"relative"})),C9=_.tr(({theme:e})=>({"&:hover > td":{backgroundColor:`${Dt(.005,e.background.app)} !important`,boxShadow:`${e.color.mediumlight} 0 - 1px 0 0 inset`,cursor:"row-resize"}})),xs=_.button(()=>({background:"none",border:"none",padding:"0",font:"inherit",position:"absolute",top:0,bottom:0,left:0,right:0,height:"100%",width:"100%",color:"transparent",cursor:"row-resize !important"})),Na=({level:e="section",label:t,children:r,initialExpanded:n=!0,colSpan:o=3})=>{let[l,i]=b.useState(n),u=e==="subsection"?A9:w9,s=(r==null?void 0:r.length)||0,c=e==="subsection"?`${s} item${s!==1?"s":""}`:"",d=l?"arrowdown":"arrowright",f=`${l?"Hide":"Show"} ${e==="subsection"?s:t} item${s!==1?"s":""}`;return a.createElement(a.Fragment,null,a.createElement(C9,{title:f},a.createElement(u,{colSpan:1},a.createElement(xs,{onClick:m=>i(!l),tabIndex:0},f),a.createElement(x9,null,a.createElement(E9,{icon:d}),t)),a.createElement(S9,{colSpan:o-1},a.createElement(xs,{onClick:m=>i(!l),tabIndex:-1,style:{outline:"none"}},f),l?null:c)),l?r:null)},sn=_.div(({theme:e})=>({display:"flex",gap:16,borderBottom:`1px solid ${e.appBorderColor}`,"&:last-child":{borderBottom:0}})),me=_.div(({numColumn:e})=>({display:"flex",flexDirection:"column",flex:e||1,gap:5,padding:"12px 20px"})),ie=_.div(({theme:e,width:t,height:r})=>({animation:`${e.animation.glow} 1.5s ease-in-out infinite`,background:e.appBorderColor,width:t||"100%",height:r||16,borderRadius:3})),ge=[2,4,2,2],k9=()=>a.createElement(a.Fragment,null,a.createElement(sn,null,a.createElement(me,{numColumn:ge[0]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[1]},a.createElement(ie,{width:"30%"})),a.createElement(me,{numColumn:ge[2]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[3]},a.createElement(ie,{width:"60%"}))),a.createElement(sn,null,a.createElement(me,{numColumn:ge[0]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[1]},a.createElement(ie,{width:"80%"}),a.createElement(ie,{width:"30%"})),a.createElement(me,{numColumn:ge[2]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[3]},a.createElement(ie,{width:"60%"}))),a.createElement(sn,null,a.createElement(me,{numColumn:ge[0]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[1]},a.createElement(ie,{width:"80%"}),a.createElement(ie,{width:"30%"})),a.createElement(me,{numColumn:ge[2]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[3]},a.createElement(ie,{width:"60%"}))),a.createElement(sn,null,a.createElement(me,{numColumn:ge[0]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[1]},a.createElement(ie,{width:"80%"}),a.createElement(ie,{width:"30%"})),a.createElement(me,{numColumn:ge[2]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[3]},a.createElement(ie,{width:"60%"})))),_9=_.div(({inAddonPanel:e,theme:t})=>({height:e?"100%":"auto",display:"flex",border:e?"none":`1px solid ${t.appBorderColor}`,borderRadius:e?0:t.appBorderRadius,padding:e?0:40,alignItems:"center",justifyContent:"center",flexDirection:"column",gap:15,background:t.background.content,boxShadow:"rgba(0, 0, 0, 0.10) 0 1px 3px 0"})),O9=_.div({display:"flex",flexDirection:"column",gap:4,maxWidth:415}),T9=_.div(({theme:e})=>({fontWeight:e.typography.weight.bold,fontSize:e.typography.size.s2-1,textAlign:"center",color:e.textColor})),F9=_.div(({theme:e})=>({fontWeight:e.typography.weight.regular,fontSize:e.typography.size.s2-1,textAlign:"center",color:e.textMutedColor})),R9=_.div(({theme:e})=>({display:"flex",fontSize:e.typography.size.s2-1,gap:25})),$9=_.div(({theme:e})=>({width:1,height:16,backgroundColor:e.appBorderColor})),D9=({inAddonPanel:e})=>{let[t,r]=b.useState(!0);return b.useEffect(()=>{let n=setTimeout(()=>{r(!1)},100);return()=>clearTimeout(n)},[]),t?null:a.createElement(_9,{inAddonPanel:e},a.createElement(O9,null,a.createElement(T9,null,e?"Interactive story playground":"Args table with interactive controls couldn't be auto-generated"),a.createElement(F9,null,"Controls give you an easy to use interface to test your components. Set your story args and you'll see controls appearing here automatically.")),a.createElement(R9,null,e&&a.createElement(a.Fragment,null,a.createElement(wt,{href:"https://youtu.be/0gOfS6K0x0E",target:"_blank",withArrow:!0},a.createElement(ve,{icon:"video"})," Watch 5m video"),a.createElement($9,null),a.createElement(wt,{href:"https://storybook.js.org/docs/react/essentials/controls",target:"_blank",withArrow:!0},"Read docs")),!e&&a.createElement(wt,{href:"https://storybook.js.org/docs/react/essentials/controls",target:"_blank",withArrow:!0},"Learn how to set that up")))},L9=_.table(({theme:e,compact:t,inAddonPanel:r})=>({"&&":{borderSpacing:0,color:e.color.defaultText,"td, th":{padding:0,border:"none",verticalAlign:"top",textOverflow:"ellipsis"},fontSize:e.typography.size.s2-1,lineHeight:"20px",textAlign:"left",width:"100%",marginTop:r?0:25,marginBottom:r?0:40,"thead th:first-of-type, td:first-of-type":{width:"25%"},"th:first-of-type, td:first-of-type":{paddingLeft:20},"th:nth-of-type(2), td:nth-of-type(2)":{...t?null:{width:"35%"}},"td:nth-of-type(3)":{...t?null:{width:"15%"}},"th:last-of-type, td:last-of-type":{paddingRight:20,...t?null:{width:"25%"}},th:{color:e.base==="light"?ee(.25,e.color.defaultText):ee(.45,e.color.defaultText),paddingTop:10,paddingBottom:10,paddingLeft:15,paddingRight:15},td:{paddingTop:"10px",paddingBottom:"10px","&:not(:first-of-type)":{paddingLeft:15,paddingRight:15},"&:last-of-type":{paddingRight:20}},marginLeft:r?0:1,marginRight:r?0:1,tbody:{...r?null:{filter:e.base==="light"?"drop-shadow(0px 1px 3px rgba(0, 0, 0, 0.10))":"drop-shadow(0px 1px 3px rgba(0, 0, 0, 0.20))"},"> tr > *":{background:e.background.content,borderTop:`1px solid ${e.appBorderColor}`},...r?null:{"> tr:first-of-type > *":{borderBlockStart:`1px solid ${e.appBorderColor}`},"> tr:last-of-type > *":{borderBlockEnd:`1px solid ${e.appBorderColor}`},"> tr > *:first-of-type":{borderInlineStart:`1px solid ${e.appBorderColor}`},"> tr > *:last-of-type":{borderInlineEnd:`1px solid ${e.appBorderColor}`},"> tr:first-of-type > td:first-of-type":{borderTopLeftRadius:e.appBorderRadius},"> tr:first-of-type > td:last-of-type":{borderTopRightRadius:e.appBorderRadius},"> tr:last-of-type > td:first-of-type":{borderBottomLeftRadius:e.appBorderRadius},"> tr:last-of-type > td:last-of-type":{borderBottomRightRadius:e.appBorderRadius}}}}})),M9=_(jt)(({theme:e})=>({color:e.barTextColor,margin:"-4px -12px -4px 0"})),B9=_.span({display:"flex",justifyContent:"space-between"}),I9={alpha:(e,t)=>e.name.localeCompare(t.name),requiredFirst:(e,t)=>{var r,n;return+!!((r=t.type)!=null&&r.required)-+!!((n=e.type)!=null&&n.required)||e.name.localeCompare(t.name)},none:void 0},P9=(e,t)=>{let r={ungrouped:[],ungroupedSubsections:{},sections:{}};if(!e)return r;Object.entries(e).forEach(([l,i])=>{let{category:u,subcategory:s}=(i==null?void 0:i.table)||{};if(u){let c=r.sections[u]||{ungrouped:[],subsections:{}};if(!s)c.ungrouped.push({key:l,...i});else{let d=c.subsections[s]||[];d.push({key:l,...i}),c.subsections[s]=d}r.sections[u]=c}else if(s){let c=r.ungroupedSubsections[s]||[];c.push({key:l,...i}),r.ungroupedSubsections[s]=c}else r.ungrouped.push({key:l,...i})});let n=I9[t],o=l=>n?Object.keys(l).reduce((i,u)=>({...i,[u]:l[u].sort(n)}),{}):l;return{ungrouped:r.ungrouped.sort(n),ungroupedSubsections:o(r.ungroupedSubsections),sections:Object.keys(r.sections).reduce((l,i)=>({...l,[i]:{ungrouped:r.sections[i].ungrouped.sort(n),subsections:o(r.sections[i].subsections)}}),{})}},j9=(e,t,r)=>{try{return Y0(e,t,r)}catch(n){return b8.warn(n.message),!1}},N9=e=>{let{updateArgs:t,resetArgs:r,compact:n,inAddonPanel:o,initialExpandedArgs:l,sort:i="none",isLoading:u}=e;if("error"in e){let{error:w}=e;return a.createElement(y0,null,w," ",a.createElement(wt,{href:"http://storybook.js.org/docs/",target:"_blank",withArrow:!0},"Read the docs"))}if(u)return a.createElement(k9,null);let{rows:s,args:c,globals:d}="rows"in e&&e,f=P9(Ay(s,w=>{var v;return!((v=w==null?void 0:w.table)!=null&&v.disable)&&j9(w,c||{},d||{})}),i),m=f.ungrouped.length===0,p=Object.entries(f.sections).length===0,h=Object.entries(f.ungroupedSubsections).length===0;if(m&&p&&h)return a.createElement(D9,{inAddonPanel:o});let g=1;t&&(g+=1),n||(g+=2);let x=Object.keys(f.sections).length>0,y={updateArgs:t,compact:n,inAddonPanel:o,initialExpandedArgs:l};return a.createElement(il,null,a.createElement(L9,{compact:n,inAddonPanel:o,className:"docblock-argstable sb-unstyled"},a.createElement("thead",{className:"docblock-argstable-head"},a.createElement("tr",null,a.createElement("th",null,a.createElement("span",null,"Name")),n?null:a.createElement("th",null,a.createElement("span",null,"Description")),n?null:a.createElement("th",null,a.createElement("span",null,"Default")),t?a.createElement("th",null,a.createElement(B9,null,"Control"," ",!u&&r&&a.createElement(M9,{onClick:()=>r(),title:"Reset controls"},a.createElement(ve,{icon:"undo","aria-hidden":!0})))):null)),a.createElement("tbody",{className:"docblock-argstable-body"},f.ungrouped.map(w=>a.createElement(ln,{key:w.key,row:w,arg:c&&c[w.key],...y})),Object.entries(f.ungroupedSubsections).map(([w,v])=>a.createElement(Na,{key:w,label:w,level:"subsection",colSpan:g},v.map(E=>a.createElement(ln,{key:E.key,row:E,arg:c&&c[E.key],expandable:x,...y})))),Object.entries(f.sections).map(([w,v])=>a.createElement(Na,{key:w,label:w,level:"section",colSpan:g},v.ungrouped.map(E=>a.createElement(ln,{key:E.key,row:E,arg:c&&c[E.key],...y})),Object.entries(v.subsections).map(([E,A])=>a.createElement(Na,{key:E,label:E,level:"subsection",colSpan:g},A.map(S=>a.createElement(ln,{key:S.key,row:S,arg:c&&c[S.key],expandable:x,...y})))))))))};_.div(({theme:e})=>({marginRight:30,fontSize:`${e.typography.size.s1}px`,color:e.base==="light"?ee(.4,e.color.defaultText):ee(.6,e.color.defaultText)}));_.div({overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"});_.div({display:"flex",flexDirection:"row",alignItems:"baseline","&:not(:last-child)":{marginBottom:"1rem"}});_.div(te,({theme:e})=>({...aa(e),margin:"25px 0 40px",padding:"30px 20px"}));_.div(({theme:e})=>({fontWeight:e.typography.weight.bold,color:e.color.defaultText}));_.div(({theme:e})=>({color:e.base==="light"?ee(.2,e.color.defaultText):ee(.6,e.color.defaultText)}));_.div({flex:"0 0 30%",lineHeight:"20px",marginTop:5});_.div(({theme:e})=>({flex:1,textAlign:"center",fontFamily:e.typography.fonts.mono,fontSize:e.typography.size.s1,lineHeight:1,overflow:"hidden",color:e.base==="light"?ee(.4,e.color.defaultText):ee(.6,e.color.defaultText),"> div":{display:"inline-block",overflow:"hidden",maxWidth:"100%",textOverflow:"ellipsis"},span:{display:"block",marginTop:2}}));_.div({display:"flex",flexDirection:"row"});_.div(({background:e})=>({position:"relative",flex:1,"&::before":{position:"absolute",top:0,left:0,width:"100%",height:"100%",background:e,content:'""'}}));_.div(({theme:e})=>({...aa(e),display:"flex",flexDirection:"row",height:50,marginBottom:5,overflow:"hidden",backgroundColor:"white",backgroundImage:"repeating-linear-gradient(-45deg, #ccc, #ccc 1px, #fff 1px, #fff 16px)",backgroundClip:"padding-box"}));_.div({display:"flex",flexDirection:"column",flex:1,position:"relative",marginBottom:30});_.div({flex:1,display:"flex",flexDirection:"row"});_.div({display:"flex",alignItems:"flex-start"});_.div({flex:"0 0 30%"});_.div({flex:1});_.div(({theme:e})=>({display:"flex",flexDirection:"row",alignItems:"center",paddingBottom:20,fontWeight:e.typography.weight.bold,color:e.base==="light"?ee(.4,e.color.defaultText):ee(.6,e.color.defaultText)}));_.div(({theme:e})=>({fontSize:e.typography.size.s2,lineHeight:"20px",display:"flex",flexDirection:"column"}));_.div(({theme:e})=>({fontFamily:e.typography.fonts.base,fontSize:e.typography.size.s2,color:e.color.defaultText,marginLeft:10,lineHeight:1.2}));_.div(({theme:e})=>({...aa(e),overflow:"hidden",height:40,width:40,display:"flex",alignItems:"center",justifyContent:"center",flex:"none","> img, > svg":{width:20,height:20}}));_.div({display:"inline-flex",flexDirection:"row",alignItems:"center",flex:"0 1 calc(20% - 10px)",minWidth:120,margin:"0px 10px 30px 0"});_.div({display:"flex",flexFlow:"row wrap"});var H9=e=>`anchor--${e}`,Z9=({storyId:e,children:t})=>a.createElement("div",{id:H9(e),className:"sb-anchor"},t);$e&&$e.__DOCS_CONTEXT__===void 0&&($e.__DOCS_CONTEXT__=b.createContext(null),$e.__DOCS_CONTEXT__.displayName="DocsContext");var Te=$e?$e.__DOCS_CONTEXT__:b.createContext(null),Yr=(e,t)=>b.useContext(Te).resolveOf(e,t);function V9(e,t="start"){e.scrollIntoView({behavior:"smooth",block:t,inline:"nearest"})}function z9(e,t){let r=Fl([e],t);return r&&r[0]}function Fl(e,t){let[r,n]=b.useState({});return b.useEffect(()=>{Promise.all(e.map(async o=>{let l=await t.loadStory(o);n(i=>i[o]===l?i:{...i,[o]:l})}))}),e.map(o=>{if(r[o])return r[o];try{return t.storyById(o)}catch{return null}})}function D0(e){return d8(e)}var L0=b.createContext({sources:{}}),M0="--unknown--",q9=({children:e,channel:t})=>{let[r,n]=b.useState({});return b.useEffect(()=>{let o=(l,i=null,u=!1)=>{let{id:s,args:c=void 0,source:d,format:f}=typeof l=="string"?{id:l,source:i,format:u}:l,m=c?D0(c):M0;n(p=>({...p,[s]:{...p[s],[m]:{code:d,format:f}}}))};return t.on(Pl,o),()=>t.off(Pl,o)},[]),a.createElement(L0.Provider,{value:{sources:r}},e)},U9=(e=>(e.OPEN="open",e.CLOSED="closed",e.NONE="none",e))(U9||{}),W9=e=>{let t=e.map(r=>{var n,o;return(o=(n=r.parameters.docs)==null?void 0:n.source)==null?void 0:o.state}).filter(Boolean);return t.length===0?"closed":t[0]},G9=(e,t,r)=>{let{sources:n}=r,o=n==null?void 0:n[e];return(o==null?void 0:o[D0(t)])||(o==null?void 0:o[M0])||{code:""}},Y9=({snippet:e,storyContext:t,typeFromProps:r,transformFromProps:n})=>{var s,c,d,f,m,p;let{__isArgsStory:o}=t.parameters,l=((s=t.parameters.docs)==null?void 0:s.source)||{},i=r||l.type||ua.AUTO;if(l.code!==void 0)return l.code;let u=i===ua.DYNAMIC||i===ua.AUTO&&e&&o?e:l.originalSource||"";return l.transformSource&&pe(xe`The \`transformSource\` parameter at \`parameters.docs.source.transformSource\` is deprecated, please use \`parameters.docs.source.transform\` instead. + ${Dt(.02,e.input.background)} 100%)`,boxShadow:`${e.appBorderColor} 0 0 0 1px inset`,color:"transparent",width:"100%",height:"6px",cursor:"pointer"},"&::-ms-fill-lower":{borderRadius:6},"&::-ms-fill-upper":{borderRadius:6},"&::-ms-thumb":{width:16,height:16,background:`${e.input.background}`,border:`1px solid ${pt(e.appBorderColor,.2)}`,borderRadius:50,cursor:"grab",marginTop:0},"@supports (-ms-ime-align:auto)":{"input[type=range]":{margin:"0"}}})),$0=_.span({paddingLeft:5,paddingRight:5,fontSize:12,whiteSpace:"nowrap",fontFeatureSettings:"tnum",fontVariantNumeric:"tabular-nums"}),e9=_($0)(({numberOFDecimalsPlaces:e,max:t})=>({width:`${e+t.toString().length*2+3}ch`,textAlign:"right",flexShrink:0})),t9=_.div({display:"flex",alignItems:"center",width:"100%"});function r9(e){let t=e.toString().match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return t?Math.max(0,(t[1]?t[1].length:0)-(t[2]?+t[2]:0)):0}var n9=({name:e,value:t,onChange:r,min:n=0,max:o=100,step:l=1,onBlur:i,onFocus:u})=>{let s=f=>{r(hx(f.target.value))},c=t!==void 0,d=b.useMemo(()=>r9(l),[l]);return a.createElement(t9,null,a.createElement($0,null,n),a.createElement(Qx,{id:He(e),type:"range",onChange:s,name:e,value:t,min:n,max:o,step:l,onFocus:u,onBlur:i}),a.createElement(e9,{numberOFDecimalsPlaces:d,max:o},c?t.toFixed(d):"--"," / ",o))},a9=_.label({display:"flex"}),o9=_.div(({isMaxed:e})=>({marginLeft:"0.75rem",paddingTop:"0.35rem",color:e?"red":void 0})),l9=({name:e,value:t,onChange:r,onFocus:n,onBlur:o,maxLength:l})=>{let i=f=>{r(f.target.value)},[u,s]=b.useState(!1),c=b.useCallback(()=>{r(""),s(!0)},[s]);if(t===void 0)return a.createElement(Ne.Button,{id:Dn(e),onClick:c},"Set string");let d=typeof t=="string";return a.createElement(a9,null,a.createElement(Ne.Textarea,{id:He(e),maxLength:l,onChange:i,size:"flex",placeholder:"Edit string...",autoFocus:u,valid:d?null:"error",name:e,value:d?t:"",onFocus:n,onBlur:o}),l&&a.createElement(o9,{isMaxed:(t==null?void 0:t.length)===l},(t==null?void 0:t.length)??0," / ",l))},i9=_(Ne.Input)({padding:10});function s9(e){e.forEach(t=>{t.startsWith("blob:")&&URL.revokeObjectURL(t)})}var u9=({onChange:e,name:t,accept:r="image/*",value:n})=>{let o=b.useRef(null);function l(i){if(!i.target.files)return;let u=Array.from(i.target.files).map(s=>URL.createObjectURL(s));e(u),s9(n)}return b.useEffect(()=>{n==null&&o.current&&(o.current.value=null)},[n,t]),a.createElement(i9,{ref:o,id:He(t),type:"file",name:t,multiple:!0,onChange:l,accept:r,size:"flex"})},c9=b.lazy(()=>At(()=>import("./Color-6VNJS4EI-_bWmNl2W.js"),__vite__mapDeps([14,2,3,10,1,4,5,6,7,8,9,11]),import.meta.url)),d9=e=>a.createElement(b.Suspense,{fallback:a.createElement("div",null)},a.createElement(c9,{...e})),p9={array:vs,object:vs,boolean:sx,color:d9,date:mx,number:bx,check:Gt,"inline-check":Gt,radio:Gt,"inline-radio":Gt,select:Gt,"multi-select":Gt,range:n9,text:l9,file:u9},Es=()=>a.createElement(a.Fragment,null,"-"),f9=({row:e,arg:t,updateArgs:r,isHovered:n})=>{let{key:o,control:l}=e,[i,u]=b.useState(!1),[s,c]=b.useState({value:t});b.useEffect(()=>{i||c({value:t})},[i,t]);let d=b.useCallback(g=>(c({value:g}),r({[o]:g}),g),[r,o]),f=b.useCallback(()=>u(!1),[]),m=b.useCallback(()=>u(!0),[]);if(!l||l.disable)return n?a.createElement(wt,{href:"https://storybook.js.org/docs/react/essentials/controls",target:"_blank",withArrow:!0},"Setup controls"):a.createElement(Es,null);let p={name:o,argType:e,value:s.value,onChange:d,onBlur:f,onFocus:m},h=p9[l.type]||Es;return a.createElement(h,{...p,...l,controlType:l.type})},m9=_.span({fontWeight:"bold"}),g9=_.span(({theme:e})=>({color:e.color.negative,fontFamily:e.typography.fonts.mono,cursor:"help"})),h9=_.div(({theme:e})=>({"&&":{p:{margin:"0 0 10px 0"},a:{color:e.color.secondary}},code:{...gt({theme:e}),fontSize:12,fontFamily:e.typography.fonts.mono},"& code":{margin:0,display:"inline-block"},"& pre > code":{whiteSpace:"pre-wrap"}})),b9=_.div(({theme:e,hasDescription:t})=>({color:e.base==="light"?ee(.1,e.color.defaultText):ee(.2,e.color.defaultText),marginTop:t?4:0})),y9=_.div(({theme:e,hasDescription:t})=>({color:e.base==="light"?ee(.1,e.color.defaultText):ee(.2,e.color.defaultText),marginTop:t?12:0,marginBottom:12})),v9=_.td(({theme:e,expandable:t})=>({paddingLeft:t?"40px !important":"20px !important"})),ln=e=>{var g;let[t,r]=b.useState(!1),{row:n,updateArgs:o,compact:l,expandable:i,initialExpandedArgs:u}=e,{name:s,description:c}=n,d=n.table||{},f=d.type||n.type,m=d.defaultValue||n.defaultValue,p=(g=n.type)==null?void 0:g.required,h=c!=null&&c!=="";return a.createElement("tr",{onMouseEnter:()=>r(!0),onMouseLeave:()=>r(!1)},a.createElement(v9,{expandable:i},a.createElement(m9,null,s),p?a.createElement(g9,{title:"Required"},"*"):null),l?null:a.createElement("td",null,h&&a.createElement(h9,null,a.createElement(n0,null,c)),d.jsDocTags!=null?a.createElement(a.Fragment,null,a.createElement(y9,{hasDescription:h},a.createElement(Pa,{value:f,initialExpandedArgs:u})),a.createElement(K8,{tags:d.jsDocTags})):a.createElement(b9,{hasDescription:h},a.createElement(Pa,{value:f,initialExpandedArgs:u}))),l?null:a.createElement("td",null,a.createElement(Pa,{value:m,initialExpandedArgs:u})),o?a.createElement("td",null,a.createElement(f9,{...e,isHovered:t})):null)},E9=_(ve)(({theme:e})=>({marginRight:8,marginLeft:-10,marginTop:-2,height:12,width:12,color:e.base==="light"?ee(.25,e.color.defaultText):ee(.3,e.color.defaultText),border:"none",display:"inline-block"})),x9=_.span(({theme:e})=>({display:"flex",lineHeight:"20px",alignItems:"center"})),w9=_.td(({theme:e})=>({position:"relative",letterSpacing:"0.35em",textTransform:"uppercase",fontWeight:e.typography.weight.bold,fontSize:e.typography.size.s1-1,color:e.base==="light"?ee(.4,e.color.defaultText):ee(.6,e.color.defaultText),background:`${e.background.app} !important`,"& ~ td":{background:`${e.background.app} !important`}})),A9=_.td(({theme:e})=>({position:"relative",fontWeight:e.typography.weight.bold,fontSize:e.typography.size.s2-1,background:e.background.app})),S9=_.td(()=>({position:"relative"})),C9=_.tr(({theme:e})=>({"&:hover > td":{backgroundColor:`${Dt(.005,e.background.app)} !important`,boxShadow:`${e.color.mediumlight} 0 - 1px 0 0 inset`,cursor:"row-resize"}})),xs=_.button(()=>({background:"none",border:"none",padding:"0",font:"inherit",position:"absolute",top:0,bottom:0,left:0,right:0,height:"100%",width:"100%",color:"transparent",cursor:"row-resize !important"})),Na=({level:e="section",label:t,children:r,initialExpanded:n=!0,colSpan:o=3})=>{let[l,i]=b.useState(n),u=e==="subsection"?A9:w9,s=(r==null?void 0:r.length)||0,c=e==="subsection"?`${s} item${s!==1?"s":""}`:"",d=l?"arrowdown":"arrowright",f=`${l?"Hide":"Show"} ${e==="subsection"?s:t} item${s!==1?"s":""}`;return a.createElement(a.Fragment,null,a.createElement(C9,{title:f},a.createElement(u,{colSpan:1},a.createElement(xs,{onClick:m=>i(!l),tabIndex:0},f),a.createElement(x9,null,a.createElement(E9,{icon:d}),t)),a.createElement(S9,{colSpan:o-1},a.createElement(xs,{onClick:m=>i(!l),tabIndex:-1,style:{outline:"none"}},f),l?null:c)),l?r:null)},sn=_.div(({theme:e})=>({display:"flex",gap:16,borderBottom:`1px solid ${e.appBorderColor}`,"&:last-child":{borderBottom:0}})),me=_.div(({numColumn:e})=>({display:"flex",flexDirection:"column",flex:e||1,gap:5,padding:"12px 20px"})),ie=_.div(({theme:e,width:t,height:r})=>({animation:`${e.animation.glow} 1.5s ease-in-out infinite`,background:e.appBorderColor,width:t||"100%",height:r||16,borderRadius:3})),ge=[2,4,2,2],k9=()=>a.createElement(a.Fragment,null,a.createElement(sn,null,a.createElement(me,{numColumn:ge[0]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[1]},a.createElement(ie,{width:"30%"})),a.createElement(me,{numColumn:ge[2]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[3]},a.createElement(ie,{width:"60%"}))),a.createElement(sn,null,a.createElement(me,{numColumn:ge[0]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[1]},a.createElement(ie,{width:"80%"}),a.createElement(ie,{width:"30%"})),a.createElement(me,{numColumn:ge[2]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[3]},a.createElement(ie,{width:"60%"}))),a.createElement(sn,null,a.createElement(me,{numColumn:ge[0]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[1]},a.createElement(ie,{width:"80%"}),a.createElement(ie,{width:"30%"})),a.createElement(me,{numColumn:ge[2]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[3]},a.createElement(ie,{width:"60%"}))),a.createElement(sn,null,a.createElement(me,{numColumn:ge[0]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[1]},a.createElement(ie,{width:"80%"}),a.createElement(ie,{width:"30%"})),a.createElement(me,{numColumn:ge[2]},a.createElement(ie,{width:"60%"})),a.createElement(me,{numColumn:ge[3]},a.createElement(ie,{width:"60%"})))),_9=_.div(({inAddonPanel:e,theme:t})=>({height:e?"100%":"auto",display:"flex",border:e?"none":`1px solid ${t.appBorderColor}`,borderRadius:e?0:t.appBorderRadius,padding:e?0:40,alignItems:"center",justifyContent:"center",flexDirection:"column",gap:15,background:t.background.content,boxShadow:"rgba(0, 0, 0, 0.10) 0 1px 3px 0"})),O9=_.div({display:"flex",flexDirection:"column",gap:4,maxWidth:415}),T9=_.div(({theme:e})=>({fontWeight:e.typography.weight.bold,fontSize:e.typography.size.s2-1,textAlign:"center",color:e.textColor})),F9=_.div(({theme:e})=>({fontWeight:e.typography.weight.regular,fontSize:e.typography.size.s2-1,textAlign:"center",color:e.textMutedColor})),R9=_.div(({theme:e})=>({display:"flex",fontSize:e.typography.size.s2-1,gap:25})),$9=_.div(({theme:e})=>({width:1,height:16,backgroundColor:e.appBorderColor})),D9=({inAddonPanel:e})=>{let[t,r]=b.useState(!0);return b.useEffect(()=>{let n=setTimeout(()=>{r(!1)},100);return()=>clearTimeout(n)},[]),t?null:a.createElement(_9,{inAddonPanel:e},a.createElement(O9,null,a.createElement(T9,null,e?"Interactive story playground":"Args table with interactive controls couldn't be auto-generated"),a.createElement(F9,null,"Controls give you an easy to use interface to test your components. Set your story args and you'll see controls appearing here automatically.")),a.createElement(R9,null,e&&a.createElement(a.Fragment,null,a.createElement(wt,{href:"https://youtu.be/0gOfS6K0x0E",target:"_blank",withArrow:!0},a.createElement(ve,{icon:"video"})," Watch 5m video"),a.createElement($9,null),a.createElement(wt,{href:"https://storybook.js.org/docs/react/essentials/controls",target:"_blank",withArrow:!0},"Read docs")),!e&&a.createElement(wt,{href:"https://storybook.js.org/docs/react/essentials/controls",target:"_blank",withArrow:!0},"Learn how to set that up")))},L9=_.table(({theme:e,compact:t,inAddonPanel:r})=>({"&&":{borderSpacing:0,color:e.color.defaultText,"td, th":{padding:0,border:"none",verticalAlign:"top",textOverflow:"ellipsis"},fontSize:e.typography.size.s2-1,lineHeight:"20px",textAlign:"left",width:"100%",marginTop:r?0:25,marginBottom:r?0:40,"thead th:first-of-type, td:first-of-type":{width:"25%"},"th:first-of-type, td:first-of-type":{paddingLeft:20},"th:nth-of-type(2), td:nth-of-type(2)":{...t?null:{width:"35%"}},"td:nth-of-type(3)":{...t?null:{width:"15%"}},"th:last-of-type, td:last-of-type":{paddingRight:20,...t?null:{width:"25%"}},th:{color:e.base==="light"?ee(.25,e.color.defaultText):ee(.45,e.color.defaultText),paddingTop:10,paddingBottom:10,paddingLeft:15,paddingRight:15},td:{paddingTop:"10px",paddingBottom:"10px","&:not(:first-of-type)":{paddingLeft:15,paddingRight:15},"&:last-of-type":{paddingRight:20}},marginLeft:r?0:1,marginRight:r?0:1,tbody:{...r?null:{filter:e.base==="light"?"drop-shadow(0px 1px 3px rgba(0, 0, 0, 0.10))":"drop-shadow(0px 1px 3px rgba(0, 0, 0, 0.20))"},"> tr > *":{background:e.background.content,borderTop:`1px solid ${e.appBorderColor}`},...r?null:{"> tr:first-of-type > *":{borderBlockStart:`1px solid ${e.appBorderColor}`},"> tr:last-of-type > *":{borderBlockEnd:`1px solid ${e.appBorderColor}`},"> tr > *:first-of-type":{borderInlineStart:`1px solid ${e.appBorderColor}`},"> tr > *:last-of-type":{borderInlineEnd:`1px solid ${e.appBorderColor}`},"> tr:first-of-type > td:first-of-type":{borderTopLeftRadius:e.appBorderRadius},"> tr:first-of-type > td:last-of-type":{borderTopRightRadius:e.appBorderRadius},"> tr:last-of-type > td:first-of-type":{borderBottomLeftRadius:e.appBorderRadius},"> tr:last-of-type > td:last-of-type":{borderBottomRightRadius:e.appBorderRadius}}}}})),M9=_(jt)(({theme:e})=>({color:e.barTextColor,margin:"-4px -12px -4px 0"})),B9=_.span({display:"flex",justifyContent:"space-between"}),I9={alpha:(e,t)=>e.name.localeCompare(t.name),requiredFirst:(e,t)=>{var r,n;return+!!((r=t.type)!=null&&r.required)-+!!((n=e.type)!=null&&n.required)||e.name.localeCompare(t.name)},none:void 0},P9=(e,t)=>{let r={ungrouped:[],ungroupedSubsections:{},sections:{}};if(!e)return r;Object.entries(e).forEach(([l,i])=>{let{category:u,subcategory:s}=(i==null?void 0:i.table)||{};if(u){let c=r.sections[u]||{ungrouped:[],subsections:{}};if(!s)c.ungrouped.push({key:l,...i});else{let d=c.subsections[s]||[];d.push({key:l,...i}),c.subsections[s]=d}r.sections[u]=c}else if(s){let c=r.ungroupedSubsections[s]||[];c.push({key:l,...i}),r.ungroupedSubsections[s]=c}else r.ungrouped.push({key:l,...i})});let n=I9[t],o=l=>n?Object.keys(l).reduce((i,u)=>({...i,[u]:l[u].sort(n)}),{}):l;return{ungrouped:r.ungrouped.sort(n),ungroupedSubsections:o(r.ungroupedSubsections),sections:Object.keys(r.sections).reduce((l,i)=>({...l,[i]:{ungrouped:r.sections[i].ungrouped.sort(n),subsections:o(r.sections[i].subsections)}}),{})}},j9=(e,t,r)=>{try{return Y0(e,t,r)}catch(n){return b8.warn(n.message),!1}},N9=e=>{let{updateArgs:t,resetArgs:r,compact:n,inAddonPanel:o,initialExpandedArgs:l,sort:i="none",isLoading:u}=e;if("error"in e){let{error:w}=e;return a.createElement(y0,null,w," ",a.createElement(wt,{href:"http://storybook.js.org/docs/",target:"_blank",withArrow:!0},"Read the docs"))}if(u)return a.createElement(k9,null);let{rows:s,args:c,globals:d}="rows"in e&&e,f=P9(Ay(s,w=>{var v;return!((v=w==null?void 0:w.table)!=null&&v.disable)&&j9(w,c||{},d||{})}),i),m=f.ungrouped.length===0,p=Object.entries(f.sections).length===0,h=Object.entries(f.ungroupedSubsections).length===0;if(m&&p&&h)return a.createElement(D9,{inAddonPanel:o});let g=1;t&&(g+=1),n||(g+=2);let x=Object.keys(f.sections).length>0,y={updateArgs:t,compact:n,inAddonPanel:o,initialExpandedArgs:l};return a.createElement(il,null,a.createElement(L9,{compact:n,inAddonPanel:o,className:"docblock-argstable sb-unstyled"},a.createElement("thead",{className:"docblock-argstable-head"},a.createElement("tr",null,a.createElement("th",null,a.createElement("span",null,"Name")),n?null:a.createElement("th",null,a.createElement("span",null,"Description")),n?null:a.createElement("th",null,a.createElement("span",null,"Default")),t?a.createElement("th",null,a.createElement(B9,null,"Control"," ",!u&&r&&a.createElement(M9,{onClick:()=>r(),title:"Reset controls"},a.createElement(ve,{icon:"undo","aria-hidden":!0})))):null)),a.createElement("tbody",{className:"docblock-argstable-body"},f.ungrouped.map(w=>a.createElement(ln,{key:w.key,row:w,arg:c&&c[w.key],...y})),Object.entries(f.ungroupedSubsections).map(([w,v])=>a.createElement(Na,{key:w,label:w,level:"subsection",colSpan:g},v.map(E=>a.createElement(ln,{key:E.key,row:E,arg:c&&c[E.key],expandable:x,...y})))),Object.entries(f.sections).map(([w,v])=>a.createElement(Na,{key:w,label:w,level:"section",colSpan:g},v.ungrouped.map(E=>a.createElement(ln,{key:E.key,row:E,arg:c&&c[E.key],...y})),Object.entries(v.subsections).map(([E,A])=>a.createElement(Na,{key:E,label:E,level:"subsection",colSpan:g},A.map(S=>a.createElement(ln,{key:S.key,row:S,arg:c&&c[S.key],expandable:x,...y})))))))))};_.div(({theme:e})=>({marginRight:30,fontSize:`${e.typography.size.s1}px`,color:e.base==="light"?ee(.4,e.color.defaultText):ee(.6,e.color.defaultText)}));_.div({overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"});_.div({display:"flex",flexDirection:"row",alignItems:"baseline","&:not(:last-child)":{marginBottom:"1rem"}});_.div(te,({theme:e})=>({...aa(e),margin:"25px 0 40px",padding:"30px 20px"}));_.div(({theme:e})=>({fontWeight:e.typography.weight.bold,color:e.color.defaultText}));_.div(({theme:e})=>({color:e.base==="light"?ee(.2,e.color.defaultText):ee(.6,e.color.defaultText)}));_.div({flex:"0 0 30%",lineHeight:"20px",marginTop:5});_.div(({theme:e})=>({flex:1,textAlign:"center",fontFamily:e.typography.fonts.mono,fontSize:e.typography.size.s1,lineHeight:1,overflow:"hidden",color:e.base==="light"?ee(.4,e.color.defaultText):ee(.6,e.color.defaultText),"> div":{display:"inline-block",overflow:"hidden",maxWidth:"100%",textOverflow:"ellipsis"},span:{display:"block",marginTop:2}}));_.div({display:"flex",flexDirection:"row"});_.div(({background:e})=>({position:"relative",flex:1,"&::before":{position:"absolute",top:0,left:0,width:"100%",height:"100%",background:e,content:'""'}}));_.div(({theme:e})=>({...aa(e),display:"flex",flexDirection:"row",height:50,marginBottom:5,overflow:"hidden",backgroundColor:"white",backgroundImage:"repeating-linear-gradient(-45deg, #ccc, #ccc 1px, #fff 1px, #fff 16px)",backgroundClip:"padding-box"}));_.div({display:"flex",flexDirection:"column",flex:1,position:"relative",marginBottom:30});_.div({flex:1,display:"flex",flexDirection:"row"});_.div({display:"flex",alignItems:"flex-start"});_.div({flex:"0 0 30%"});_.div({flex:1});_.div(({theme:e})=>({display:"flex",flexDirection:"row",alignItems:"center",paddingBottom:20,fontWeight:e.typography.weight.bold,color:e.base==="light"?ee(.4,e.color.defaultText):ee(.6,e.color.defaultText)}));_.div(({theme:e})=>({fontSize:e.typography.size.s2,lineHeight:"20px",display:"flex",flexDirection:"column"}));_.div(({theme:e})=>({fontFamily:e.typography.fonts.base,fontSize:e.typography.size.s2,color:e.color.defaultText,marginLeft:10,lineHeight:1.2}));_.div(({theme:e})=>({...aa(e),overflow:"hidden",height:40,width:40,display:"flex",alignItems:"center",justifyContent:"center",flex:"none","> img, > svg":{width:20,height:20}}));_.div({display:"inline-flex",flexDirection:"row",alignItems:"center",flex:"0 1 calc(20% - 10px)",minWidth:120,margin:"0px 10px 30px 0"});_.div({display:"flex",flexFlow:"row wrap"});var H9=e=>`anchor--${e}`,Z9=({storyId:e,children:t})=>a.createElement("div",{id:H9(e),className:"sb-anchor"},t);$e&&$e.__DOCS_CONTEXT__===void 0&&($e.__DOCS_CONTEXT__=b.createContext(null),$e.__DOCS_CONTEXT__.displayName="DocsContext");var Te=$e?$e.__DOCS_CONTEXT__:b.createContext(null),Yr=(e,t)=>b.useContext(Te).resolveOf(e,t);function V9(e,t="start"){e.scrollIntoView({behavior:"smooth",block:t,inline:"nearest"})}function z9(e,t){let r=Fl([e],t);return r&&r[0]}function Fl(e,t){let[r,n]=b.useState({});return b.useEffect(()=>{Promise.all(e.map(async o=>{let l=await t.loadStory(o);n(i=>i[o]===l?i:{...i,[o]:l})}))}),e.map(o=>{if(r[o])return r[o];try{return t.storyById(o)}catch{return null}})}function D0(e){return d8(e)}var L0=b.createContext({sources:{}}),M0="--unknown--",q9=({children:e,channel:t})=>{let[r,n]=b.useState({});return b.useEffect(()=>{let o=(l,i=null,u=!1)=>{let{id:s,args:c=void 0,source:d,format:f}=typeof l=="string"?{id:l,source:i,format:u}:l,m=c?D0(c):M0;n(p=>({...p,[s]:{...p[s],[m]:{code:d,format:f}}}))};return t.on(Pl,o),()=>t.off(Pl,o)},[]),a.createElement(L0.Provider,{value:{sources:r}},e)},U9=(e=>(e.OPEN="open",e.CLOSED="closed",e.NONE="none",e))(U9||{}),W9=e=>{let t=e.map(r=>{var n,o;return(o=(n=r.parameters.docs)==null?void 0:n.source)==null?void 0:o.state}).filter(Boolean);return t.length===0?"closed":t[0]},G9=(e,t,r)=>{let{sources:n}=r,o=n==null?void 0:n[e];return(o==null?void 0:o[D0(t)])||(o==null?void 0:o[M0])||{code:""}},Y9=({snippet:e,storyContext:t,typeFromProps:r,transformFromProps:n})=>{var s,c,d,f,m,p;let{__isArgsStory:o}=t.parameters,l=((s=t.parameters.docs)==null?void 0:s.source)||{},i=r||l.type||ua.AUTO;if(l.code!==void 0)return l.code;let u=i===ua.DYNAMIC||i===ua.AUTO&&e&&o?e:l.originalSource||"";return l.transformSource&&pe(xe`The \`transformSource\` parameter at \`parameters.docs.source.transformSource\` is deprecated, please use \`parameters.docs.source.transform\` instead. Please refer to the migration guide: https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#source-block `),(c=t.parameters.docs)!=null&&c.transformSource&&pe(xe`The \`transformSource\` parameter at \`parameters.docs.transformSource\` is deprecated, please use \`parameters.docs.source.transform\` instead. @@ -364,7 +364,7 @@ ${t}`);let r=t.match(zg);if(!r)return a.createElement(b.Fragment,null,t);let[,n, `),o?a.createElement(V0,{of:o.moduleExport,expanded:!1,__primary:!0,withToolbar:!0}):null},Tw=({children:e,disableAnchor:t,...r})=>{if(t||typeof e!="string")return a.createElement(ol,null,e);let n=e.toLowerCase().replace(/[^a-z0-9]/gi,"-");return a.createElement($l,{as:"h2",id:n,...r},e)},Fw=_(Tw)(({theme:e})=>({fontSize:`${e.typography.size.s2-1}px`,fontWeight:e.typography.weight.bold,lineHeight:"16px",letterSpacing:"0.35em",textTransform:"uppercase",color:e.textMutedColor,border:0,marginBottom:"12px","&:first-of-type":{marginTop:"56px"}})),Rw=({title:e="Stories",includePrimary:t=!0})=>{let{componentStories:r}=b.useContext(Te),n=r().filter(o=>{var l,i;return!((i=(l=o.parameters)==null?void 0:l.docs)!=null&&i.disable)});return t||(n=n.slice(1)),!n||n.length===0?null:a.createElement(a.Fragment,null,a.createElement(Fw,null,e),n.map(o=>o&&a.createElement(V0,{key:o.id,of:o.moduleExport,expanded:!0,__forceInitialArgs:!0})))},$w=()=>{let e=Yr("meta",["meta"]),{stories:t}=e.csfFile,r=Object.keys(t).length===1;return a.createElement(a.Fragment,null,a.createElement(Cw,null),a.createElement(kw,null),a.createElement(ko,{of:"meta"}),r?a.createElement(ko,{of:"story"}):null,a.createElement(Ow,null),a.createElement(nw,null),r?null:a.createElement(Rw,null))};function Dw({context:e,docsParameter:t}){let r=t.container||ww,n=t.page||$w;return a.createElement(r,{context:e,theme:t.theme},a.createElement(n,null))}var z0={code:j0,a:N0,...Z0},Lw=class extends b.Component{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){let{showException:t}=this.props;t(e)}render(){let{hasError:e}=this.state,{children:t}=this.props;return e?null:a.createElement(a.Fragment,null,t)}},Mw=class{constructor(){this.render=async(e,t,r)=>{let n={...z0,...t==null?void 0:t.components},o=Dw;return new Promise((l,i)=>{At(()=>import("./index-Aiv9N5p3.js"),__vite__mapDeps([15,2,3]),import.meta.url).then(({MDXProvider:u})=>U0(a.createElement(Lw,{showException:i,key:Math.random()},a.createElement(u,{components:n},a.createElement(o,{context:e,docsParameter:t}))),r)).then(()=>l())})},this.unmount=e=>{W0(e)}}};const Xw=Object.freeze(Object.defineProperty({__proto__:null,DocsRenderer:Mw,defaultComponents:z0},Symbol.toStringTag,{value:"Module"}));export{Xw as D,Ne as F,ve as I,Wo as S,vh as T,Im as W,_e as _,Uu as a,Z as b,Du as c,dh as d,He as g,Ht as m,_ as n,Ww as s}; function __vite__mapDeps(indexes) { if (!__vite__mapDeps.viteFileDeps) { - __vite__mapDeps.viteFileDeps = ["./syntaxhighlighter-B5GMVT5T-miRWAUdB.js","./iframe-sjDFBNDn.js","./index-TT1qJ6UJ.js","./_commonjsHelpers-4gQjN7DL.js","./react-18-N0svEjlN.js","./client-rbWgHzHN.js","./index-7vsPyIck.js","./_commonjs-dynamic-modules-h-SxKiO4.js","./bundle.esm-7jAAHVxW.js","./index-ogXoivrg.js","./_getPrototype-bjD8Yebc.js","./index-PPLHz8o0.js","./formatter-SWP5E3XI-DFe396sY.js","./WithTooltip-V3YHNWJZ-cmK_sC0G.js","./Color-6VNJS4EI-APgtbMfN.js","./index-Aiv9N5p3.js"] + __vite__mapDeps.viteFileDeps = ["./syntaxhighlighter-B5GMVT5T-IV_pqN5-.js","./iframe-uulHRm1N.js","./index-TT1qJ6UJ.js","./_commonjsHelpers-4gQjN7DL.js","./react-18-N0svEjlN.js","./client-rbWgHzHN.js","./index-7vsPyIck.js","./_commonjs-dynamic-modules-h-SxKiO4.js","./bundle.esm-7jAAHVxW.js","./index-ogXoivrg.js","./_getPrototype-bjD8Yebc.js","./index-PPLHz8o0.js","./formatter-SWP5E3XI-VlZk_GWI.js","./WithTooltip-V3YHNWJZ-YO_ynaZI.js","./Color-6VNJS4EI-_bWmNl2W.js","./index-Aiv9N5p3.js"] } return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) } diff --git a/assets/WithTooltip-V3YHNWJZ-cmK_sC0G.js b/assets/WithTooltip-V3YHNWJZ-YO_ynaZI.js similarity index 75% rename from assets/WithTooltip-V3YHNWJZ-cmK_sC0G.js rename to assets/WithTooltip-V3YHNWJZ-YO_ynaZI.js index d4d72c1ecd..428fbd0898 100644 --- a/assets/WithTooltip-V3YHNWJZ-cmK_sC0G.js +++ b/assets/WithTooltip-V3YHNWJZ-YO_ynaZI.js @@ -1 +1 @@ -import{W as u,W as x,a as P}from"./DocsRenderer-NNNQARDV-ONpjav1a.js";import"./iframe-sjDFBNDn.js";import"../sb-preview/runtime.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./react-18-N0svEjlN.js";import"./client-rbWgHzHN.js";import"./index-7vsPyIck.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./bundle.esm-7jAAHVxW.js";import"./index-ogXoivrg.js";import"./_getPrototype-bjD8Yebc.js";import"./index-PPLHz8o0.js";export{u as WithToolTipState,x as WithTooltip,P as WithTooltipPure}; +import{W as u,W as x,a as P}from"./DocsRenderer-NNNQARDV-AKp_79_j.js";import"./iframe-uulHRm1N.js";import"../sb-preview/runtime.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./react-18-N0svEjlN.js";import"./client-rbWgHzHN.js";import"./index-7vsPyIck.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./bundle.esm-7jAAHVxW.js";import"./index-ogXoivrg.js";import"./_getPrototype-bjD8Yebc.js";import"./index-PPLHz8o0.js";export{u as WithToolTipState,x as WithTooltip,P as WithTooltipPure}; diff --git a/assets/answer-choices-SJhxKMzc.js b/assets/answer-choices-2q3o0s95.js similarity index 93% rename from assets/answer-choices-SJhxKMzc.js rename to assets/answer-choices-2q3o0s95.js index b6318f27f6..515dfdf6fc 100644 --- a/assets/answer-choices-SJhxKMzc.js +++ b/assets/answer-choices-2q3o0s95.js @@ -1,3 +1,3 @@ -import{a as c,j as e}from"./jsx-runtime-FVsy8kgq.js";import{g as x}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as N}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{l as t}from"./index-awljIyHI.js";import{F as z}from"./form-wrapped-text-field-DtGz9PJ5.js";import{r as R}from"./index-TT1qJ6UJ.js";const T="javascript:void(0)",h=class h extends R.Component{render(){const{children:s,className:i,highlighted:n,href:d,inlineStyles:k,referrer:p,style:u,target:g,testId:b,element:f,...w}=this.props,[C,v]=d?d.split("#"):[T];let o=C;p&&(o.indexOf("?")>-1?o+="&ref="+p:o+="?ref="+p),v&&(o+="#"+v);const m=[S.link,n&&S.highlighted];Array.isArray(u)?m.push(...u):m.push(u);const I=i?" "+i:"",M=f==="a"?{href:o}:{to:o};let y=w.rel;return g==="_blank"&&!y&&(y="noopener noreferrer"),R.createElement(f,{"data-testid":b,...w,...M,className:t.css(...m)+I,style:k,target:g,rel:y},s)}};h.defaultProps={highlighted:!1,href:T,style:[],element:"a"};let l=h;const S=t.StyleSheet.create({link:{backgroundColor:"transparent",color:"inherit",textDecoration:"none",":hover":{textDecoration:"underline"}},highlighted:{textDecoration:"underline"}});l.__docgenInfo={description:"A wrapper that creates an anchor tag with normalized styles",methods:[],displayName:"Link",props:{element:{required:!1,tsType:{name:"ReactElementType",raw:"React.ElementType"},description:"",defaultValue:{value:'"a"',computed:!1}},highlighted:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},href:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"javascript:void(0)"',computed:!1}},style:{required:!1,tsType:{name:"union",raw:"CSSProperties | Array",elements:[{name:"CSSProperties"},{name:"Array",elements:[{name:"CSSProperties"}],raw:"Array"}]},description:"",defaultValue:{value:"[]",computed:!1}},children:{required:!1,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},className:{required:!1,tsType:{name:"string"},description:""},inlineStyles:{required:!1,tsType:{name:"signature",type:"object",raw:`{ +import{a as c,j as e}from"./jsx-runtime-FVsy8kgq.js";import{g as x}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as N}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{l as t}from"./index-awljIyHI.js";import{F as z}from"./form-wrapped-text-field-BopYavUW.js";import{r as R}from"./index-TT1qJ6UJ.js";const T="javascript:void(0)",h=class h extends R.Component{render(){const{children:s,className:i,highlighted:n,href:d,inlineStyles:k,referrer:p,style:u,target:g,testId:b,element:f,...w}=this.props,[C,v]=d?d.split("#"):[T];let o=C;p&&(o.indexOf("?")>-1?o+="&ref="+p:o+="?ref="+p),v&&(o+="#"+v);const m=[S.link,n&&S.highlighted];Array.isArray(u)?m.push(...u):m.push(u);const I=i?" "+i:"",M=f==="a"?{href:o}:{to:o};let y=w.rel;return g==="_blank"&&!y&&(y="noopener noreferrer"),R.createElement(f,{"data-testid":b,...w,...M,className:t.css(...m)+I,style:k,target:g,rel:y},s)}};h.defaultProps={highlighted:!1,href:T,style:[],element:"a"};let l=h;const S=t.StyleSheet.create({link:{backgroundColor:"transparent",color:"inherit",textDecoration:"none",":hover":{textDecoration:"underline"}},highlighted:{textDecoration:"underline"}});l.__docgenInfo={description:"A wrapper that creates an anchor tag with normalized styles",methods:[],displayName:"Link",props:{element:{required:!1,tsType:{name:"ReactElementType",raw:"React.ElementType"},description:"",defaultValue:{value:'"a"',computed:!1}},highlighted:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},href:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"javascript:void(0)"',computed:!1}},style:{required:!1,tsType:{name:"union",raw:"CSSProperties | Array",elements:[{name:"CSSProperties"},{name:"Array",elements:[{name:"CSSProperties"}],raw:"Array"}]},description:"",defaultValue:{value:"[]",computed:!1}},children:{required:!1,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},className:{required:!1,tsType:{name:"string"},description:""},inlineStyles:{required:!1,tsType:{name:"signature",type:"object",raw:`{ [key: string]: any; }`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},description:""},referrer:{required:!1,tsType:{name:"string"},description:""},target:{required:!1,tsType:{name:"string"},description:""},rel:{required:!1,tsType:{name:"string"},description:""},testId:{required:!1,tsType:{name:"string"},description:""},onClick:{required:!1,tsType:{name:"signature",type:"function",raw:"(e: React.MouseEvent) => unknown",signature:{arguments:[{type:{name:"ReactMouseEvent",raw:"React.MouseEvent"},name:"e"}],return:{name:"unknown"}}},description:""},onMouseOver:{required:!1,tsType:{name:"signature",type:"function",raw:"(e: React.MouseEvent) => unknown",signature:{arguments:[{type:{name:"ReactMouseEvent",raw:"React.MouseEvent"},name:"e"}],return:{name:"unknown"}}},description:""},onMouseLeave:{required:!1,tsType:{name:"signature",type:"function",raw:"(e: React.MouseEvent) => unknown",signature:{arguments:[{type:{name:"ReactMouseEvent",raw:"React.MouseEvent"},name:"e"}],return:{name:"unknown"}}},description:""},onMouseEnter:{required:!1,tsType:{name:"signature",type:"function",raw:"(e: React.MouseEvent) => unknown",signature:{arguments:[{type:{name:"ReactMouseEvent",raw:"React.MouseEvent"},name:"e"}],return:{name:"unknown"}}},description:""},onBlur:{required:!1,tsType:{name:"signature",type:"function",raw:"(e: React.SyntheticEvent) => unknown",signature:{arguments:[{type:{name:"ReactSyntheticEvent",raw:"React.SyntheticEvent"},name:"e"}],return:{name:"unknown"}}},description:""},onFocus:{required:!1,tsType:{name:"signature",type:"function",raw:"(e: React.SyntheticEvent) => unknown",signature:{arguments:[{type:{name:"ReactSyntheticEvent",raw:"React.SyntheticEvent"},name:"e"}],return:{name:"unknown"}}},description:""},onKeyDown:{required:!1,tsType:{name:"signature",type:"function",raw:"(e: React.KeyboardEvent) => unknown",signature:{arguments:[{type:{name:"ReactKeyboardEvent",raw:"React.KeyboardEvent"},name:"e"}],return:{name:"unknown"}}},description:""},"aria-label":{required:!1,tsType:{name:"string"},description:""},"aria-selected":{required:!1,tsType:{name:"boolean"},description:""},"aria-current":{required:!1,tsType:{name:"boolean"},description:""},role:{required:!1,tsType:{name:"literal",value:'"tab"'},description:""},title:{required:!1,tsType:{name:"string"},description:""},id:{required:!1,tsType:{name:"string"},description:""},tabIndex:{required:!1,tsType:{name:"number"},description:""}}};const{colors:q,typography:E}=x,{Icon:A}=N,B={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},D={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},P=()=>c("svg",{width:"16",height:"16",viewBox:"0 0 16 16",children:[c("filter",{id:"draggable-grip-shadow",width:"112.5%",height:"116.7%",x:"-6.2%",y:"-8.3%",filterUnits:"objectBoundingBox",children:[e("feGaussianBlur",{in:"SourceAlpha",stdDeviation:".5",result:"shadowBlurInner"}),e("feOffset",{in:"shadowBlurInner",dy:"1",result:"shadowOffsetInner"}),e("feComposite",{in:"shadowOffsetInner",in2:"SourceAlpha",k2:"-1",k3:"1",operator:"arithmetic",result:"shadowInnerInner"}),e("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"})]}),e("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:q.gray17,filter:"url(#draggable-grip-shadow)"})]}),j=({onClick:r})=>c(l,{className:t.css(a.addAnswer,O.addAnswer),onClick:r,children:[e(A,{icon:B,size:24}),e("div",{className:t.css(a.spacer)}),"Add an answer choice"]}),H=({answer:r,onChange:s,onRemove:i})=>c("li",{className:t.css(a.answer),children:[e(l,{onClick:i,children:e(A,{icon:D,size:24,color:"#D92916"})}),e("div",{className:t.css(a.spacer)}),e(z,{grow:1,onChange:n=>s(n.target.value),value:r}),e("div",{className:t.css(a.spacer)}),e(l,{style:[a.disabled],title:"Answer reordering is not implemented.",children:e(P,{})})]}),F=({choices:r,onChange:s})=>c("div",{children:[e("div",{className:t.css(a.title),children:"Answer Choices"}),e("ul",{className:t.css(a.answers),children:r.map((i,n)=>e(H,{answer:i,onChange:d=>s([...r.slice(0,n),d,...r.slice(n+1)]),onRemove:()=>s([...r.slice(0,n),...r.slice(n+1)])},n))}),e(j,{onClick:()=>s([...r,""])})]}),a=t.StyleSheet.create({title:{...E.bodyXsmallBold,marginBottom:6,color:q.gray17},answers:{marginTop:12,marginBottom:12},answer:{display:"flex",flexDirection:"row",alignItems:"center",":not(:first-child)":{marginTop:12}},addAnswer:{...E.bodyXsmallBold,display:"flex",flexDirection:"row",alignItems:"center",color:"#1865f2"},spacer:{width:16},disabled:{cursor:"not-allowed"}}),O=t.StyleSheet.create({addAnswer:{":link":{color:"#1865f2"}}});F.__docgenInfo={description:"The list of choices, handles adding, removing and reording of answers.",methods:[],displayName:"AnswerChoices",props:{choices:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(choices: ReadonlyArray) => void",signature:{arguments:[{type:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},name:"choices"}],return:{name:"void"}}},description:""}}};export{F as A}; diff --git a/assets/answer-choices-uB4giKvU.js b/assets/answer-choices-xSqM961S.js similarity index 99% rename from assets/answer-choices-uB4giKvU.js rename to assets/answer-choices-xSqM961S.js index 7d6b8de799..7a4831639c 100644 --- a/assets/answer-choices-uB4giKvU.js +++ b/assets/answer-choices-xSqM961S.js @@ -1,4 +1,4 @@ -import{j as et}from"./jsx-runtime-FVsy8kgq.js";import{a as g,_ as d,b as yt,V as Ce,I as ke}from"./index-6h5t6F0w.js";import{r as o}from"./index-TT1qJ6UJ.js";import{l as v}from"./index-awljIyHI.js";import{C as gr,a as yr}from"./index-o3wWn3Y5.js";import{s as m,c as a,m as ee,b as X,a as br,f as Sr}from"./index-deFLJwr4.js";import{a as bt,b as Qt,L as xr}from"./index-h_CiYGGb.js";import{P as St}from"./index-xuPsLuPk.js";import{c as Gt,m as Cr}from"./minus-bold-ONmDo3Ve.js";import{r as Ie}from"./index-7vsPyIck.js";import{I as vr,x as Ir}from"./index-rfN0X25E.js";import{w as kn}from"./index-CkAxGj88.js";import{P as wr,d as $r}from"./Popper-kGnKOid7.js";import{m as Er}from"./index-YCTzZMik.js";import{u as kr}from"./i18n-context-hxuRe8oU.js";import{R as Rr}from"./renderer-vBOYiNCS.js";function Rn(s){const e=[];if(s)if(Array.isArray(s))for(const t of s)e.push(...Rn(t));else e.push(s);else return e;return e}function _n(s){const e=[],t=[];if(!s)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;Rn(s).forEach(l=>{const i=l._definition;if(i!=null)if(n){const c={};for(const[f,h]of Object.entries(i))c[f.replace(/-[a-z]/g,p=>p[1].toUpperCase())]=h;t.push(c)}else e.push(l);else t.push(l)});const r=Object.assign({},...t);if(t.length>0&&!n){const l=v.StyleSheet.create({inlineStyles:r});e.push(l.inlineStyles)}return{style:n?r:{},className:v.css(...e)}}const _r=["children","style","tag","testId"],Fr=/^h[1-6]$/,Jt=v.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}}),B=o.forwardRef(function(e,t){let{children:n,style:r,tag:l="span",testId:i}=e,c=g(e,_r);const f=Fr.test(l),h=_n([Jt.text,f&&Jt.header,r]),p=c.className?[c.className,h.className].join(" "):h.className;return o.createElement(l,d({},c,{style:h.style,className:p,"data-testid":i,ref:t}),n)}),Tr=["className","style"];function qe(s,e){return o.forwardRef((t,n)=>{const{className:r,style:l}=t,i=g(t,Tr),c=typeof s=="string"?zr[s]:null,{className:f,style:h}=_n([c,e,l]);return o.createElement(s,d({},i,{ref:n,className:[f,r].filter(Boolean).join(" "),style:h}))})}const zr=v.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),Pr=["testId","tag"],Ve=v.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}}),Or=qe("div",Ve.default),Br=qe("article",Ve.default),Lr=qe("aside",Ve.default),Dr=qe("nav",Ve.default),Nr=qe("section",Ve.default),Re=o.forwardRef(function(e,t){const{testId:n,tag:r="div"}=e,l=g(e,Pr),i=d({},l,{"data-testid":n});switch(r){case"article":return o.createElement(Br,d({},i,{ref:t}));case"aside":return o.createElement(Lr,d({},i,{ref:t}));case"nav":return o.createElement(Dr,d({},i,{ref:t}));case"section":return o.createElement(Nr,d({},i,{ref:t}));case"div":return o.createElement(Or,d({},i,{ref:t}));default:throw Error(`${r} is not an allowed value for the 'tag' prop`)}});let be=function(s){return s.Root="root",s.Initial="initial",s.Standard="standard",s}({});const ut=o.createContext(be.Root);ut.displayName="RenderStateContext";let Hr=class extends o.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,fallback:n}=this.props;return this._isTheRootComponent=!0,e?o.createElement(ut.Provider,{value:be.Standard},t()):n?o.createElement(ut.Provider,{value:be.Initial},n()):null}_maybeRender(e){const{children:t,fallback:n}=this.props;switch(e){case be.Root:return this._renderAsRootComponent();case be.Initial:return n?n():null;case be.Standard:return t()}{var r;return console.log(`We got a render state we don't understand: "${(r=JSON.stringify(e))!=null?r:""}"`),this._maybeRender(be.Root)}}render(){return o.createElement(ut.Consumer,null,e=>this._maybeRender(e))}},Fn=class Tn{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const r=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${r}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${Tn._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}};Fn._factoryUniquenessCounter=0;let Mt=class{get(e){return e}};Mt.Default=new Mt;var Mr=Mt.Default;let Wr=class extends o.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(Mr):null:(this._idFactory||(this._idFactory=new Fn(r)),t(this._idFactory))}render(){return o.createElement(Hr,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}},Ar=class zn extends o.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(zn.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():o.createElement(Wr,{scope:t,mockOnFirstRender:!0},n=>this.renderChildren(n))}};Ar.defaultId="wb-id";const Z=400,Be=700,qr=900,Rt="@media (max-width: 1023px)",_t="@media (min-width: 1024px)",z={display:"block"},A='Lato, "Noto Sans", sans-serif',en='"Noto Serif", serif',Vr="Inconsolata, monospace",L=v.StyleSheet.create({Title:d({},z,{fontFamily:A,fontWeight:qr,[_t]:{fontSize:36,lineHeight:"40px"},[Rt]:{fontSize:28,lineHeight:"32px"}}),Tagline:d({},z,{fontFamily:A,fontWeight:Z,fontSize:20,lineHeight:"24px"}),HeadingLarge:d({},z,{fontFamily:A,fontWeight:Be,[_t]:{fontSize:28,lineHeight:"32px"},[Rt]:{fontSize:24,lineHeight:"28px"}}),HeadingMedium:d({},z,{fontFamily:A,fontWeight:Be,[_t]:{fontSize:24,lineHeight:"28px"},[Rt]:{fontSize:22,lineHeight:"26px"}}),HeadingSmall:d({},z,{fontFamily:A,fontWeight:Be,fontSize:20,lineHeight:"24px"}),HeadingXSmall:d({},z,{fontFamily:A,fontWeight:Be,fontSize:12,lineHeight:"16px",letterSpacing:.6,textTransform:"uppercase"}),BodySerifBlock:d({},z,{fontFamily:en,fontWeight:Z,fontSize:22,lineHeight:"28px"}),BodySerif:d({},z,{fontFamily:en,fontWeight:Z,fontSize:18,lineHeight:"22px"}),BodyMonospace:d({},z,{fontFamily:Vr,fontWeight:Z,fontSize:17,lineHeight:"22px"}),Body:d({},z,{fontFamily:A,fontWeight:Z,fontSize:16,lineHeight:"22px"}),LabelLarge:d({},z,{fontFamily:A,fontWeight:Be,fontSize:16,lineHeight:"20px"}),LabelMedium:d({},z,{fontFamily:A,fontWeight:Z,fontSize:16,lineHeight:"20px"}),LabelSmall:d({},z,{fontFamily:A,fontWeight:Z,fontSize:14,lineHeight:"18px"}),LabelXSmall:d({},z,{fontFamily:A,fontWeight:Z,fontSize:12,lineHeight:"16px"}),Caption:d({},z,{fontFamily:A,fontWeight:Z,fontSize:14,lineHeight:"20px"}),Footnote:d({},z,{fontFamily:A,fontWeight:Z,fontSize:12,lineHeight:"18px"})}),Ur=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h1"}=e,i=g(e,Ur);return o.createElement(B,d({},i,{tag:l,style:[L.Title,n],ref:t}),r)});const Kr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h2"}=e,i=g(e,Kr);return o.createElement(B,d({},i,{tag:l,style:[L.HeadingLarge,n],ref:t}),r)});const jr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h3"}=e,i=g(e,jr);return o.createElement(B,d({},i,{tag:l,style:[L.HeadingMedium,n],ref:t}),r)});const Xr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h4"}=e,i=g(e,Xr);return o.createElement(B,d({},i,{tag:l,style:[L.HeadingSmall,n],ref:t}),r)});const Gr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h4"}=e,i=g(e,Gr);return o.createElement(B,d({},i,{tag:l,style:[L.HeadingXSmall,n],ref:t}),r)});const Zr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Zr);return o.createElement(B,d({},i,{tag:l,style:[L.BodySerifBlock,n],ref:t}),r)});const Yr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Yr);return o.createElement(B,d({},i,{tag:l,style:[L.BodySerif,n],ref:t}),r)});const Qr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Qr);return o.createElement(B,d({},i,{tag:l,style:[L.BodyMonospace,n],ref:t}),r)});const Jr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Jr);return o.createElement(B,d({},i,{tag:l,style:[L.Body,n],ref:t}),r)});const eo=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,eo);return o.createElement(B,d({},i,{tag:l,style:[L.LabelLarge,n],ref:t}),r)});const to=["style","children","tag"],Pn=o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,to);return o.createElement(B,d({},i,{tag:l,style:[L.LabelMedium,n],ref:t}),r)}),no=["style","children","tag"],ro=o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,no);return o.createElement(B,d({},i,{tag:l,style:[L.LabelSmall,n],ref:t}),r)}),oo=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,oo);return o.createElement(B,d({},i,{tag:l,style:[L.LabelXSmall,n],ref:t}),r)});const lo=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,lo);return o.createElement(B,d({},i,{tag:l,style:[L.Tagline,n],ref:t}),r)});const so=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,so);return o.createElement(B,d({},i,{tag:l,style:[L.Caption,n],ref:t}),r)});const io=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,io);return o.createElement(B,d({},i,{tag:l,style:[L.Footnote,n],ref:t}),r)});const tn=m.large_24,ao={small:{query:"(max-width: 767px)",totalColumns:4,gutterWidth:m.medium_16,marginWidth:m.medium_16},medium:{query:"(min-width: 768px) and (max-width: 1023px)",totalColumns:8,gutterWidth:m.xLarge_32,marginWidth:m.large_24},large:{query:"(min-width: 1024px)",totalColumns:12,gutterWidth:m.xLarge_32,marginWidth:tn,maxWidth:1120+tn*2}},co={ssrSize:"large",mediaSpec:ao},uo=o.createContext(co);uo.displayName="MediaLayoutContext";v.StyleSheet.create({grow:{flexGrow:1}});let gt=class extends o.Component{render(){const{size:e,style:t}=this.props;return o.createElement(Re,{"aria-hidden":"true",style:[ho(e),t]})}};const ho=s=>({width:s,MsFlexBasis:s,MsFlexPreferredSize:s,WebkitFlexBasis:s,flexBasis:s,flexShrink:0}),G={cellMinHeight:m.xxLarge_48,cellPadding:{paddingVertical:m.small_12,paddingHorizontal:m.medium_16},detailCellPadding:{paddingVertical:m.medium_16,paddingHorizontal:m.medium_16},accessoryHorizontalSpacing:m.medium_16},fo=s=>{switch(s){case"inset":return[Ft.horizontalRule,Ft.horizontalRuleInset];case"full-width":return Ft.horizontalRule;case"none":return{}}},Ft=v.StyleSheet.create({horizontalRule:{position:"relative",":after":{width:"100%",content:"''",position:"absolute",bottom:0,right:0,height:m.xxxxSmall_2,boxShadow:`inset 0px -1px 0px ${a.offBlack8}`}},horizontalRuleInset:{":after":{width:`calc(100% - ${G.cellPadding.paddingHorizontal}px)`}}}),po=({leftAccessory:s,leftAccessoryStyle:e,disabled:t})=>s?o.createElement(o.Fragment,null,o.createElement(Re,{style:[W.accessory,t&&W.accessoryDisabled,d({},e)]},s),o.createElement(gt,{size:G.accessoryHorizontalSpacing})):null,mo=({rightAccessory:s,rightAccessoryStyle:e,active:t,disabled:n})=>s?o.createElement(o.Fragment,null,o.createElement(gt,{size:G.accessoryHorizontalSpacing}),o.createElement(Re,{style:[W.accessory,W.accessoryRight,n&&W.accessoryDisabled,d({},e),t&&W.accessoryActive]},s)):null;function nn(s){const{active:e,children:t,disabled:n,horizontalRule:r="inset",contentStyle:l=void 0,leftAccessory:i=void 0,leftAccessoryStyle:c=void 0,rightAccessory:f=void 0,rightAccessoryStyle:h=void 0,style:p,testId:b,innerStyle:x}=s,C=fo(r);return o.createElement(Re,{style:[W.innerWrapper,x,p,C]},o.createElement(po,{leftAccessory:i,leftAccessoryStyle:c,disabled:n}),o.createElement(Re,{style:[W.content,l],testId:b},t),o.createElement(mo,{rightAccessory:f,rightAccessoryStyle:h,active:e,disabled:n}))}const On=s=>{const{active:e,disabled:t,href:n,onClick:r,"aria-label":l,"aria-selected":i,"aria-checked":c,target:f,role:h,rootStyle:p}=s;return r||n?o.createElement(gr,{disabled:t,onClick:r,href:n,hideDefaultFocusRing:!0,"aria-label":l||void 0,"aria-selected":i||void 0,"aria-checked":c,role:h,target:f,style:[W.wrapper,W.clickable,p,e&&W.active,t&&W.disabled],"aria-current":e?"true":void 0},()=>o.createElement(nn,s)):o.createElement(Re,{style:[W.wrapper,p,e&&W.active],"aria-current":e?"true":void 0,role:h},o.createElement(nn,s))},W=v.StyleSheet.create({wrapper:{background:a.white,color:a.offBlack,display:"flex",minHeight:G.cellMinHeight,textAlign:"left",width:"100%"},innerWrapper:{minHeight:G.cellMinHeight,padding:`${G.cellPadding.paddingVertical}px ${G.cellPadding.paddingHorizontal}px`,flexDirection:"row",flex:1,":focus-visible":{padding:`${G.cellPadding.paddingVertical-2}px ${G.cellPadding.paddingHorizontal-2}px`}},content:{alignSelf:"center",flex:1,overflowWrap:"break-word"},accessory:{minWidth:"auto",alignItems:"center",alignSelf:"center"},accessoryRight:{color:a.offBlack64},clickable:{outline:"none",":hover[aria-disabled=true]":{cursor:"not-allowed"},":focus-visible":{borderRadius:m.xxxSmall_4,overflow:"hidden",position:"relative"},":focus-visible:after":{content:"''",position:"absolute",top:0,left:0,zIndex:1,width:`calc(100% - ${m.xxxSmall_4}px)`,height:`calc(100% - ${m.xxxSmall_4}px)`,border:`${m.xxxxSmall_2}px solid ${a.blue}`,borderRadius:m.xxxSmall_4},":hover[aria-disabled=false]":{background:a.offBlack8},":active[aria-disabled=false]":{background:a.offBlack16}},active:{background:a.fadedBlue8,color:a.blue,":hover[aria-disabled=false]":{background:a.fadedBlue16},":active[aria-disabled=false]":{background:a.fadedBlue24}},disabled:{color:a.offBlack32,":focus-visible":{outline:"none"}},accessoryActive:{color:a.blue},accessoryDisabled:{color:a.offBlack,opacity:.32}}),go=["title"],yo=function(e){const{title:t}=e,n=g(e,go);return o.createElement(On,n,typeof t=="string"?o.createElement(Pn,null,t):t)},bo=["title","subtitle1","subtitle2"],rn=({subtitle:s,disabled:e})=>s?typeof s=="string"?o.createElement(ro,{style:!e&&Bn.subtitle},s):s:null,So=function(e){const{title:t,subtitle1:n,subtitle2:r}=e,l=g(e,bo);return o.createElement(On,d({},l,{innerStyle:Bn.innerWrapper}),o.createElement(rn,{subtitle:n,disabled:l.disabled}),n&&o.createElement(gt,{size:m.xxxxSmall_2}),typeof t=="string"?o.createElement(Pn,null,t):t,r&&o.createElement(gt,{size:m.xxxxSmall_2}),o.createElement(rn,{subtitle:r,disabled:l.disabled}))},Bn=v.StyleSheet.create({subtitle:{color:a.offBlack64},innerWrapper:{padding:`${G.detailCellPadding.paddingVertical}px ${G.detailCellPadding.paddingHorizontal}px`}});function Ln(s){const e=[];if(s)if(Array.isArray(s))for(const t of s)e.push(...Ln(t));else e.push(s);else return e;return e}function Dn(s){const e=[],t=[];if(!s)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;Ln(s).forEach(l=>{const i=l._definition;if(i!=null)if(n){const c={};for(const[f,h]of Object.entries(i))c[f.replace(/-[a-z]/g,p=>p[1].toUpperCase())]=h;t.push(c)}else e.push(l);else t.push(l)});const r=Object.assign({},...t);if(t.length>0&&!n){const l=v.StyleSheet.create({inlineStyles:r});e.push(l.inlineStyles)}return{style:n?r:{},className:v.css(...e)}}const xo=["children","style","tag","testId"],Co=/^h[1-6]$/,on=v.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}});o.forwardRef(function(e,t){let{children:n,style:r,tag:l="span",testId:i}=e,c=g(e,xo);const f=Co.test(l),h=Dn([on.text,f&&on.header,r]),p=c.className?[c.className,h.className].join(" "):h.className;return o.createElement(l,d({},c,{style:h.style,className:p,"data-testid":i,ref:t}),n)});const vo=["className","style"];function Ue(s,e){return o.forwardRef((t,n)=>{const{className:r,style:l}=t,i=g(t,vo),c=typeof s=="string"?Io[s]:null,{className:f,style:h}=Dn([c,e,l]);return o.createElement(s,d({},i,{ref:n,className:[f,r].filter(Boolean).join(" "),style:h}))})}const Io=v.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),wo=["testId","tag"],Ke=v.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}}),$o=Ue("div",Ke.default),Eo=Ue("article",Ke.default),ko=Ue("aside",Ke.default),Ro=Ue("nav",Ke.default),_o=Ue("section",Ke.default),Fo=o.forwardRef(function(e,t){const{testId:n,tag:r="div"}=e,l=g(e,wo),i=d({},l,{"data-testid":n});switch(r){case"article":return o.createElement(Eo,d({},i,{ref:t}));case"aside":return o.createElement(ko,d({},i,{ref:t}));case"nav":return o.createElement(Ro,d({},i,{ref:t}));case"section":return o.createElement(_o,d({},i,{ref:t}));case"div":return o.createElement($o,d({},i,{ref:t}));default:throw Error(`${r} is not an allowed value for the 'tag' prop`)}});let Se=function(s){return s.Root="root",s.Initial="initial",s.Standard="standard",s}({});const ht=o.createContext(Se.Root);ht.displayName="RenderStateContext";let To=class extends o.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,fallback:n}=this.props;return this._isTheRootComponent=!0,e?o.createElement(ht.Provider,{value:Se.Standard},t()):n?o.createElement(ht.Provider,{value:Se.Initial},n()):null}_maybeRender(e){const{children:t,fallback:n}=this.props;switch(e){case Se.Root:return this._renderAsRootComponent();case Se.Initial:return n?n():null;case Se.Standard:return t()}{var r;return console.log(`We got a render state we don't understand: "${(r=JSON.stringify(e))!=null?r:""}"`),this._maybeRender(Se.Root)}}render(){return o.createElement(ht.Consumer,null,e=>this._maybeRender(e))}},Nn=class Hn{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const r=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${r}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${Hn._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}};Nn._factoryUniquenessCounter=0;let Wt=class{get(e){return e}};Wt.Default=new Wt;var zo=Wt.Default;let Po=class extends o.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(zo):null:(this._idFactory||(this._idFactory=new Nn(r)),t(this._idFactory))}render(){return o.createElement(To,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}},Oo=class Mn extends o.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(Mn.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():o.createElement(Po,{scope:t,mockOnFirstRender:!0},n=>this.renderChildren(n))}};Oo.defaultId="wb-id";const ln=m.large_24,Bo={small:{query:"(max-width: 767px)",totalColumns:4,gutterWidth:m.medium_16,marginWidth:m.medium_16},medium:{query:"(min-width: 768px) and (max-width: 1023px)",totalColumns:8,gutterWidth:m.xLarge_32,marginWidth:m.large_24},large:{query:"(min-width: 1024px)",totalColumns:12,gutterWidth:m.xLarge_32,marginWidth:ln,maxWidth:1120+ln*2}},Lo={ssrSize:"large",mediaSpec:Bo},Do=o.createContext(Lo);Do.displayName="MediaLayoutContext";v.StyleSheet.create({grow:{flexGrow:1}});class de extends o.Component{render(){const{size:e,style:t}=this.props;return o.createElement(Fo,{"aria-hidden":"true",style:[No(e),t]})}}const No=s=>({width:s,MsFlexBasis:s,MsFlexPreferredSize:s,WebkitFlexBasis:s,flexBasis:s,flexShrink:0}),Ho=""+new URL("magnifying-glass-IX5mxYeF.svg",import.meta.url).href;function Wn(s){const e=[];if(s)if(Array.isArray(s))for(const t of s)e.push(...Wn(t));else e.push(s);else return e;return e}function An(s){const e=[],t=[];if(!s)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;Wn(s).forEach(l=>{const i=l._definition;if(i!=null)if(n){const c={};for(const[f,h]of Object.entries(i))c[f.replace(/-[a-z]/g,p=>p[1].toUpperCase())]=h;t.push(c)}else e.push(l);else t.push(l)});const r=Object.assign({},...t);if(t.length>0&&!n){const l=v.StyleSheet.create({inlineStyles:r});e.push(l.inlineStyles)}return{style:n?r:{},className:v.css(...e)}}const Mo=["children","style","tag","testId"],Wo=/^h[1-6]$/,sn=v.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}}),D=o.forwardRef(function(e,t){let{children:n,style:r,tag:l="span",testId:i}=e,c=g(e,Mo);const f=Wo.test(l),h=An([sn.text,f&&sn.header,r]),p=c.className?[c.className,h.className].join(" "):h.className;return o.createElement(l,d({},c,{style:h.style,className:p,"data-testid":i,ref:t}),n)}),Ao=["className","style"];function Te(s,e){return o.forwardRef((t,n)=>{const{className:r,style:l}=t,i=g(t,Ao),c=typeof s=="string"?qo[s]:null,{className:f,style:h}=An([c,e,l]);return o.createElement(s,d({},i,{ref:n,className:[f,r].filter(Boolean).join(" "),style:h}))})}const qo=v.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),Vo=["testId","tag"],je=v.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}}),Uo=Te("div",je.default),Ko=Te("article",je.default),jo=Te("aside",je.default),Xo=Te("nav",je.default),Go=Te("section",je.default),Zo=o.forwardRef(function(e,t){const{testId:n,tag:r="div"}=e,l=g(e,Vo),i=d({},l,{"data-testid":n});switch(r){case"article":return o.createElement(Ko,d({},i,{ref:t}));case"aside":return o.createElement(jo,d({},i,{ref:t}));case"nav":return o.createElement(Xo,d({},i,{ref:t}));case"section":return o.createElement(Go,d({},i,{ref:t}));case"div":return o.createElement(Uo,d({},i,{ref:t}));default:throw Error(`${r} is not an allowed value for the 'tag' prop`)}});let xe=function(s){return s.Root="root",s.Initial="initial",s.Standard="standard",s}({});const ft=o.createContext(xe.Root);ft.displayName="RenderStateContext";let Yo=class extends o.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,fallback:n}=this.props;return this._isTheRootComponent=!0,e?o.createElement(ft.Provider,{value:xe.Standard},t()):n?o.createElement(ft.Provider,{value:xe.Initial},n()):null}_maybeRender(e){const{children:t,fallback:n}=this.props;switch(e){case xe.Root:return this._renderAsRootComponent();case xe.Initial:return n?n():null;case xe.Standard:return t()}{var r;return console.log(`We got a render state we don't understand: "${(r=JSON.stringify(e))!=null?r:""}"`),this._maybeRender(xe.Root)}}render(){return o.createElement(ft.Consumer,null,e=>this._maybeRender(e))}},qn=class Vn{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const r=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${r}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${Vn._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}};qn._factoryUniquenessCounter=0;let At=class{get(e){return e}};At.Default=new At;var Qo=At.Default;let Jo=class extends o.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(Qo):null:(this._idFactory||(this._idFactory=new qn(r)),t(this._idFactory))}render(){return o.createElement(Yo,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}},Un=class Kn extends o.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(Kn.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():o.createElement(Jo,{scope:t,mockOnFirstRender:!0},n=>this.renderChildren(n))}};Un.defaultId="wb-id";const Y=400,Le=700,el=900,Tt="@media (max-width: 1023px)",zt="@media (min-width: 1024px)",P={display:"block"},q='Lato, "Noto Sans", sans-serif',an='"Noto Serif", serif',tl="Inconsolata, monospace",T=v.StyleSheet.create({Title:d({},P,{fontFamily:q,fontWeight:el,[zt]:{fontSize:36,lineHeight:"40px"},[Tt]:{fontSize:28,lineHeight:"32px"}}),Tagline:d({},P,{fontFamily:q,fontWeight:Y,fontSize:20,lineHeight:"24px"}),HeadingLarge:d({},P,{fontFamily:q,fontWeight:Le,[zt]:{fontSize:28,lineHeight:"32px"},[Tt]:{fontSize:24,lineHeight:"28px"}}),HeadingMedium:d({},P,{fontFamily:q,fontWeight:Le,[zt]:{fontSize:24,lineHeight:"28px"},[Tt]:{fontSize:22,lineHeight:"26px"}}),HeadingSmall:d({},P,{fontFamily:q,fontWeight:Le,fontSize:20,lineHeight:"24px"}),HeadingXSmall:d({},P,{fontFamily:q,fontWeight:Le,fontSize:12,lineHeight:"16px",letterSpacing:.6,textTransform:"uppercase"}),BodySerifBlock:d({},P,{fontFamily:an,fontWeight:Y,fontSize:22,lineHeight:"28px"}),BodySerif:d({},P,{fontFamily:an,fontWeight:Y,fontSize:18,lineHeight:"22px"}),BodyMonospace:d({},P,{fontFamily:tl,fontWeight:Y,fontSize:17,lineHeight:"22px"}),Body:d({},P,{fontFamily:q,fontWeight:Y,fontSize:16,lineHeight:"22px"}),LabelLarge:d({},P,{fontFamily:q,fontWeight:Le,fontSize:16,lineHeight:"20px"}),LabelMedium:d({},P,{fontFamily:q,fontWeight:Y,fontSize:16,lineHeight:"20px"}),LabelSmall:d({},P,{fontFamily:q,fontWeight:Y,fontSize:14,lineHeight:"18px"}),LabelXSmall:d({},P,{fontFamily:q,fontWeight:Y,fontSize:12,lineHeight:"16px"}),Caption:d({},P,{fontFamily:q,fontWeight:Y,fontSize:14,lineHeight:"20px"}),Footnote:d({},P,{fontFamily:q,fontWeight:Y,fontSize:12,lineHeight:"18px"})}),nl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h1"}=e,i=g(e,nl);return o.createElement(D,d({},i,{tag:l,style:[T.Title,n],ref:t}),r)});const rl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h2"}=e,i=g(e,rl);return o.createElement(D,d({},i,{tag:l,style:[T.HeadingLarge,n],ref:t}),r)});const ol=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h3"}=e,i=g(e,ol);return o.createElement(D,d({},i,{tag:l,style:[T.HeadingMedium,n],ref:t}),r)});const ll=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h4"}=e,i=g(e,ll);return o.createElement(D,d({},i,{tag:l,style:[T.HeadingSmall,n],ref:t}),r)});const sl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h4"}=e,i=g(e,sl);return o.createElement(D,d({},i,{tag:l,style:[T.HeadingXSmall,n],ref:t}),r)});const il=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,il);return o.createElement(D,d({},i,{tag:l,style:[T.BodySerifBlock,n],ref:t}),r)});const al=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,al);return o.createElement(D,d({},i,{tag:l,style:[T.BodySerif,n],ref:t}),r)});const dl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,dl);return o.createElement(D,d({},i,{tag:l,style:[T.BodyMonospace,n],ref:t}),r)});const cl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,cl);return o.createElement(D,d({},i,{tag:l,style:[T.Body,n],ref:t}),r)});const ul=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,ul);return o.createElement(D,d({},i,{tag:l,style:[T.LabelLarge,n],ref:t}),r)});const hl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,hl);return o.createElement(D,d({},i,{tag:l,style:[T.LabelMedium,n],ref:t}),r)});const fl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,fl);return o.createElement(D,d({},i,{tag:l,style:[T.LabelSmall,n],ref:t}),r)});const pl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,pl);return o.createElement(D,d({},i,{tag:l,style:[T.LabelXSmall,n],ref:t}),r)});const ml=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,ml);return o.createElement(D,d({},i,{tag:l,style:[T.Tagline,n],ref:t}),r)});const gl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,gl);return o.createElement(D,d({},i,{tag:l,style:[T.Caption,n],ref:t}),r)});const yl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,yl);return o.createElement(D,d({},i,{tag:l,style:[T.Footnote,n],ref:t}),r)});function jn(s){const e=[];if(s)if(Array.isArray(s))for(const t of s)e.push(...jn(t));else e.push(s);else return e;return e}function Xn(s){const e=[],t=[];if(!s)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;jn(s).forEach(l=>{const i=l._definition;if(i!=null)if(n){const c={};for(const[f,h]of Object.entries(i))c[f.replace(/-[a-z]/g,p=>p[1].toUpperCase())]=h;t.push(c)}else e.push(l);else t.push(l)});const r=Object.assign({},...t);if(t.length>0&&!n){const l=v.StyleSheet.create({inlineStyles:r});e.push(l.inlineStyles)}return{style:n?r:{},className:v.css(...e)}}const bl=["children","style","tag","testId"],Sl=/^h[1-6]$/,dn=v.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}}),N=o.forwardRef(function(e,t){let{children:n,style:r,tag:l="span",testId:i}=e,c=g(e,bl);const f=Sl.test(l),h=Xn([dn.text,f&&dn.header,r]),p=c.className?[c.className,h.className].join(" "):h.className;return o.createElement(l,d({},c,{style:h.style,className:p,"data-testid":i,ref:t}),n)}),xl=["className","style"];function H(s,e){return o.forwardRef((t,n)=>{const{className:r,style:l}=t,i=g(t,xl),c=typeof s=="string"?Cl[s]:null,{className:f,style:h}=Xn([c,e,l]);return o.createElement(s,d({},i,{ref:n,className:[f,r].filter(Boolean).join(" "),style:h}))})}const Cl=v.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),vl=["testId","tag"],Xe=v.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}}),Il=H("div",Xe.default),wl=H("article",Xe.default),$l=H("aside",Xe.default),El=H("nav",Xe.default),kl=H("section",Xe.default),_e=o.forwardRef(function(e,t){const{testId:n,tag:r="div"}=e,l=g(e,vl),i=d({},l,{"data-testid":n});switch(r){case"article":return o.createElement(wl,d({},i,{ref:t}));case"aside":return o.createElement($l,d({},i,{ref:t}));case"nav":return o.createElement(El,d({},i,{ref:t}));case"section":return o.createElement(kl,d({},i,{ref:t}));case"div":return o.createElement(Il,d({},i,{ref:t}));default:throw Error(`${r} is not an allowed value for the 'tag' prop`)}});let ie=function(s){return s.Root="root",s.Initial="initial",s.Standard="standard",s}({});const We=o.createContext(ie.Root);We.displayName="RenderStateContext";class Rl extends o.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,fallback:n}=this.props;return this._isTheRootComponent=!0,e?o.createElement(We.Provider,{value:ie.Standard},t()):n?o.createElement(We.Provider,{value:ie.Initial},n()):null}_maybeRender(e){const{children:t,fallback:n}=this.props;switch(e){case ie.Root:return this._renderAsRootComponent();case ie.Initial:return n?n():null;case ie.Standard:return t()}{var r;return console.log(`We got a render state we don't understand: "${(r=JSON.stringify(e))!=null?r:""}"`),this._maybeRender(ie.Root)}}render(){return o.createElement(We.Consumer,null,e=>this._maybeRender(e))}}class Ge{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const r=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${r}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${Ge._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}}Ge._factoryUniquenessCounter=0;class qt{get(e){return e}}qt.Default=new qt;var Gn=qt.Default;class Zn extends o.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(Gn):null:(this._idFactory||(this._idFactory=new Ge(r)),t(this._idFactory))}render(){return o.createElement(Rl,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}}class Ze extends o.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(Ze.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():o.createElement(Zn,{scope:t,mockOnFirstRender:!0},n=>this.renderChildren(n))}}Ze.defaultId="wb-id";const _l=()=>o.useContext(We),Fl=s=>{const e=_l(),t=o.useRef(null);if(e===ie.Root)throw new Error("Components using useUniqueIdWithMock() should be descendants of ");return e===ie.Initial?Gn:(t.current||(t.current=new Ge(s)),t.current)},Tl=s=>{o.useEffect(s,[])},Q=400,De=700,zl=900,Pt="@media (max-width: 1023px)",Ot="@media (min-width: 1024px)",O={display:"block"},V='Lato, "Noto Sans", sans-serif',cn='"Noto Serif", serif',Pl="Inconsolata, monospace",F=v.StyleSheet.create({Title:d({},O,{fontFamily:V,fontWeight:zl,[Ot]:{fontSize:36,lineHeight:"40px"},[Pt]:{fontSize:28,lineHeight:"32px"}}),Tagline:d({},O,{fontFamily:V,fontWeight:Q,fontSize:20,lineHeight:"24px"}),HeadingLarge:d({},O,{fontFamily:V,fontWeight:De,[Ot]:{fontSize:28,lineHeight:"32px"},[Pt]:{fontSize:24,lineHeight:"28px"}}),HeadingMedium:d({},O,{fontFamily:V,fontWeight:De,[Ot]:{fontSize:24,lineHeight:"28px"},[Pt]:{fontSize:22,lineHeight:"26px"}}),HeadingSmall:d({},O,{fontFamily:V,fontWeight:De,fontSize:20,lineHeight:"24px"}),HeadingXSmall:d({},O,{fontFamily:V,fontWeight:De,fontSize:12,lineHeight:"16px",letterSpacing:.6,textTransform:"uppercase"}),BodySerifBlock:d({},O,{fontFamily:cn,fontWeight:Q,fontSize:22,lineHeight:"28px"}),BodySerif:d({},O,{fontFamily:cn,fontWeight:Q,fontSize:18,lineHeight:"22px"}),BodyMonospace:d({},O,{fontFamily:Pl,fontWeight:Q,fontSize:17,lineHeight:"22px"}),Body:d({},O,{fontFamily:V,fontWeight:Q,fontSize:16,lineHeight:"22px"}),LabelLarge:d({},O,{fontFamily:V,fontWeight:De,fontSize:16,lineHeight:"20px"}),LabelMedium:d({},O,{fontFamily:V,fontWeight:Q,fontSize:16,lineHeight:"20px"}),LabelSmall:d({},O,{fontFamily:V,fontWeight:Q,fontSize:14,lineHeight:"18px"}),LabelXSmall:d({},O,{fontFamily:V,fontWeight:Q,fontSize:12,lineHeight:"16px"}),Caption:d({},O,{fontFamily:V,fontWeight:Q,fontSize:14,lineHeight:"20px"}),Footnote:d({},O,{fontFamily:V,fontWeight:Q,fontSize:12,lineHeight:"18px"})}),Ol=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h1"}=e,i=g(e,Ol);return o.createElement(N,d({},i,{tag:l,style:[F.Title,n],ref:t}),r)});const Bl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h2"}=e,i=g(e,Bl);return o.createElement(N,d({},i,{tag:l,style:[F.HeadingLarge,n],ref:t}),r)});const Ll=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h3"}=e,i=g(e,Ll);return o.createElement(N,d({},i,{tag:l,style:[F.HeadingMedium,n],ref:t}),r)});const Dl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h4"}=e,i=g(e,Dl);return o.createElement(N,d({},i,{tag:l,style:[F.HeadingSmall,n],ref:t}),r)});const Nl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h4"}=e,i=g(e,Nl);return o.createElement(N,d({},i,{tag:l,style:[F.HeadingXSmall,n],ref:t}),r)});const Hl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Hl);return o.createElement(N,d({},i,{tag:l,style:[F.BodySerifBlock,n],ref:t}),r)});const Ml=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Ml);return o.createElement(N,d({},i,{tag:l,style:[F.BodySerif,n],ref:t}),r)});const Wl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Wl);return o.createElement(N,d({},i,{tag:l,style:[F.BodyMonospace,n],ref:t}),r)});const Al=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Al);return o.createElement(N,d({},i,{tag:l,style:[F.Body,n],ref:t}),r)});const ql=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,ql);return o.createElement(N,d({},i,{tag:l,style:[F.LabelLarge,n],ref:t}),r)});const Vl=["style","children","tag"],xt=o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Vl);return o.createElement(N,d({},i,{tag:l,style:[F.LabelMedium,n],ref:t}),r)}),Ul=["style","children","tag"],we=o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Ul);return o.createElement(N,d({},i,{tag:l,style:[F.LabelSmall,n],ref:t}),r)}),Kl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Kl);return o.createElement(N,d({},i,{tag:l,style:[F.LabelXSmall,n],ref:t}),r)});const jl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,jl);return o.createElement(N,d({},i,{tag:l,style:[F.Tagline,n],ref:t}),r)});const Xl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Xl);return o.createElement(N,d({},i,{tag:l,style:[F.Caption,n],ref:t}),r)});const Gl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Gl);return o.createElement(N,d({},i,{tag:l,style:[F.Footnote,n],ref:t}),r)});const Zl=s=>({small:16,medium:24,large:48,xlarge:96})[s],Yl=["color","icon","size","style","testId","className"],Ql=H("span"),Yn=o.forwardRef(function(e,t){const{color:n="currentColor",icon:r,size:l="small",style:i,testId:c,className:f}=e,h=g(e,Yl),p=Zl(l),b=`${f??""}`,x=Jl(n,p);return o.createElement(Ql,d({},h,{className:b,style:[Vt.svg,x.icon,{maskImage:`url(${r})`},i],"data-testid":c,ref:t}))}),un={},Jl=(s,e)=>{const t=`${s}-${e}`;if(Vt[t])return Vt[t];const n={icon:{backgroundColor:s,width:e,height:e}};return un[t]=v.StyleSheet.create(n),un[t]},Vt=v.StyleSheet.create({svg:{display:"inline-block",verticalAlign:"text-bottom",flexShrink:0,flexGrow:0,maskSize:"100%",maskRepeat:"no-repeat",maskPosition:"center"}});Yn.displayName="PhosphorIcon";const es=["checked","disabled","error","groupName","id","testId"];function ts(s){switch(s){case!0:return"true";case!1:return"false";default:return"mixed"}}const{blue:Qn,red:Jn,white:ae,offWhite:ns,offBlack16:rs,offBlack32:os,offBlack50:ls}=a,Ne=m.medium_16,Ut=m.small_12,ss=H("input"),is=o.forwardRef(function(e,t){const{checked:n,disabled:r,error:l,groupName:i,id:c,testId:f}=e,h=g(e,es),p=o.useRef(null);o.useEffect(()=>{p.current!=null&&(p.current.indeterminate=n==null)},[n,p]);const b=()=>{},x=cs(n,l),C=[tt.inputReset,tt.default,!r&&x.default,r&&tt.disabled],I=o.createElement(Yn,{color:r?os:ae,icon:n?Gt:Cr,size:"small",style:[tt.checkboxIcon,{width:Ut,height:Ut}]}),u=ts(n);return o.createElement(o.Fragment,null,o.createElement(ss,d({},h,{ref:y=>{p.current=y,typeof t=="function"?t(y):t!=null&&(t.current=y)},type:"checkbox","aria-checked":u,"aria-invalid":l,checked:n??void 0,disabled:r,id:c,name:i,onChange:b,style:C,"data-testid":f})),n||n==null?I:o.createElement(o.Fragment,null))}),tt=v.StyleSheet.create({inputReset:{appearance:"none",WebkitAppearance:"none",MozAppearance:"none"},default:{height:Ne,width:Ne,minHeight:Ne,minWidth:Ne,margin:0,outline:"none",boxSizing:"border-box",borderStyle:"solid",borderWidth:1,borderRadius:3},disabled:{cursor:"auto",backgroundColor:ns,borderColor:rs,borderWidth:1},checkboxIcon:{position:"absolute",pointerEvents:"none",margin:(Ne-Ut)/2}}),as=ee(a.fadedBlue16,ae),ds=a.activeBlue,pt=ee(a.fadedRed8,ae),er=a.activeRed,hn={default:{faded:as,base:Qn,active:ds},error:{faded:pt,base:Jn,active:er}},nt={},cs=(s,e)=>{const t=`${String(s)}-${String(e)}`;if(nt[t])return nt[t];const n=e?hn.error:hn.default;let r={};return s||s==null?r={default:{backgroundColor:n.base,borderWidth:0,":focus-visible":{boxShadow:`0 0 0 1px ${ae}, 0 0 0 3px ${n.base}`},":hover":{boxShadow:`0 0 0 1px ${ae}, 0 0 0 3px ${n.base}`},":active":{boxShadow:`0 0 0 1px ${ae}, 0 0 0 3px ${n.active}`,background:n.active}}}:r={default:{backgroundColor:e?pt:ae,borderColor:e?Jn:ls,":focus-visible":{backgroundColor:e?pt:ae,borderColor:n.base,borderWidth:2},":hover":{backgroundColor:e?pt:ae,borderColor:n.base,borderWidth:2},":active":{backgroundColor:n.faded,borderColor:e?er:Qn,borderWidth:2}}},nt[t]=v.StyleSheet.create(r),nt[t]},us=["checked","disabled","error","groupName","id","testId"],{blue:tr,red:nr,white:se,offWhite:hs,offBlack16:fs,offBlack32:ps,offBlack50:ms}=a,gs=H("input"),ys=o.forwardRef(function(e,t){const n=()=>{},{checked:r,disabled:l,error:i,groupName:c,id:f,testId:h}=e,p=g(e,us),b=xs(r,i),x=[Bt.inputReset,Bt.default,!l&&b.default,l&&Bt.disabled];return o.createElement(o.Fragment,null,o.createElement(gs,d({},p,{type:"radio","aria-invalid":i,checked:r??void 0,disabled:l,id:f,name:c,onChange:n,style:x,"data-testid":h,ref:t})),l&&r&&o.createElement("span",{style:bs}))}),ce=16,bs={position:"absolute",top:ce/4,left:ce/4,height:ce/2,width:ce/2,borderRadius:"50%",backgroundColor:ps},Bt=v.StyleSheet.create({inputReset:{appearance:"none",WebkitAppearance:"none",MozAppearance:"none"},default:{height:ce,width:ce,minHeight:ce,minWidth:ce,margin:0,outline:"none",boxSizing:"border-box",borderStyle:"solid",borderWidth:1,borderRadius:"50%"},disabled:{cursor:"auto",backgroundColor:hs,borderColor:fs,borderWidth:1}}),Ss=ee(a.fadedBlue16,se),mt=ee(a.fadedRed8,se),fn={default:{faded:Ss,base:tr,active:a.activeBlue},error:{faded:mt,base:nr,active:a.activeRed}},rt={},xs=(s,e)=>{const t=`${String(s)}-${String(e)}`;if(rt[t])return rt[t];const n=e?fn.error:fn.default;let r={};return s?r={default:{backgroundColor:se,borderColor:n.base,borderWidth:ce/4,":focus-visible":{boxShadow:`0 0 0 1px ${se}, 0 0 0 3px ${n.base}`},":hover":{boxShadow:`0 0 0 1px ${se}, 0 0 0 3px ${n.base}`},":active":{boxShadow:`0 0 0 1px ${se}, 0 0 0 3px ${n.active}`,borderColor:n.active}}}:r={default:{backgroundColor:e?mt:se,borderColor:e?nr:ms,":focus-visible":{backgroundColor:e?mt:se,borderColor:n.base,borderWidth:2},":hover":{backgroundColor:e?mt:se,borderColor:n.base,borderWidth:2},":active":{backgroundColor:n.faded,borderColor:e?a.activeRed:tr,borderWidth:2}}},rt[t]=v.StyleSheet.create(r),rt[t]},Cs=["checked","description","disabled","error","id","label","onChange","style","className","variant"],rr=o.forwardRef(function(e,t){const{checked:n,description:r,disabled:l=!1,error:i=!1,id:c,label:f,onChange:h,style:p,className:b,variant:x}=e,C=g(e,Cs),I=()=>{x==="radio"&&n||h(!n)},u=()=>x==="radio"?ys:is,y=w=>o.createElement(xt,{style:[ot.label,l&&ot.disabledLabel]},o.createElement("label",{htmlFor:w},f)),S=w=>o.createElement(we,{style:ot.description,id:w},r),$=u();return o.createElement(Zn,{mockOnFirstRender:!0,scope:"choice"},w=>{const k=c||w.get("main"),E=r?w.get("description"):void 0;return o.createElement(_e,{style:p,className:b},o.createElement(_e,{style:ot.wrapper,tabIndex:-1},o.createElement($,d({},C,{id:k,checked:n,"aria-describedby":E,onClick:I,disabled:l,error:i,ref:t})),o.createElement(de,{size:m.xSmall_8}),f&&y(k)),r&&S(E))})}),ot=v.StyleSheet.create({wrapper:{flexDirection:"row",alignItems:"flex-start",outline:"none"},label:{marginTop:-2},disabledLabel:{color:a.offBlack32},description:{marginLeft:m.medium_16+m.xSmall_8,marginTop:m.xxxSmall_4,color:a.offBlack64}}),vs=o.forwardRef(function(e,t){const{disabled:n=!1,error:r=!1}=e;return o.createElement(rr,d({},e,{variant:"checkbox",disabled:n,error:r,ref:t}))}),Is=["disabled","error"],ws=o.forwardRef(function(e,t){const{disabled:n=!1,error:r=!1}=e,l=g(e,Is);return o.createElement(rr,d({},l,{variant:"radio",disabled:n,error:r,ref:t}))}),$s=["checked","disabled","onChange","value","variant"];o.forwardRef(function(e,t){const{checked:n=!1,disabled:r=!1,onChange:l=()=>{},variant:i}=e,c=g(e,$s),h=(p=>p==="checkbox"?vs:ws)(i);return o.createElement(h,d({},c,{checked:n,disabled:r,onChange:l,ref:t}))});const J=v.StyleSheet.create({fieldset:{border:"none",padding:0,margin:0},legend:{padding:0},description:{marginTop:m.xxxSmall_4,color:a.offBlack64},error:{marginTop:m.xxxSmall_4,color:a.red},defaultLineGap:{marginTop:m.xSmall_8}}),Es=H("fieldset"),ks=H("legend");o.forwardRef(function(e,t){const{children:n,label:r,description:l,errorMessage:i,groupName:c,onChange:f,selectedValues:h,style:p,testId:b}=e,x=(I,u)=>{if(u){const y=h.indexOf(I),S=[...h.slice(0,y),...h.slice(y+1)];f(S)}else f([...h,I])},C=o.Children.toArray(n).filter(Boolean);return o.createElement(Es,{"data-testid":b,style:J.fieldset,ref:t},o.createElement(_e,{style:p},r&&o.createElement(ks,{style:J.legend},o.createElement(xt,null,r)),l&&o.createElement(we,{style:J.description},l),i&&o.createElement(we,{style:J.error},i),(r||l||i)&&o.createElement(de,{size:m.small_12}),C.map((I,u)=>{const{style:y,value:S}=I.props,$=h.includes(S);return o.cloneElement(I,{checked:$,error:!!i,groupName:c,id:`${c}-${S}`,key:S,onChange:()=>x(S,$),style:[u>0&&J.defaultLineGap,y],variant:"checkbox"})})))});const Rs=H("fieldset"),_s=H("legend");o.forwardRef(function(e,t){const{children:n,label:r,description:l,errorMessage:i,groupName:c,onChange:f,selectedValue:h,style:p,testId:b}=e,x=o.Children.toArray(n).filter(Boolean);return o.createElement(Rs,{"data-testid":b,style:J.fieldset,ref:t},o.createElement(_e,{style:p},r&&o.createElement(_s,{style:J.legend},o.createElement(xt,null,r)),l&&o.createElement(we,{style:J.description},l),i&&o.createElement(we,{style:J.error},i),(r||l||i)&&o.createElement(de,{size:m.small_12}),x.map((C,I)=>{const{style:u,value:y}=C.props,S=h===y;return o.cloneElement(C,{checked:S,error:!!i,groupName:c,id:`${c}-${y}`,key:y,onChange:()=>f(y),style:[I>0&&J.defaultLineGap,u],variant:"radio"})})))});const Fs=["id","type","value","name","disabled","onKeyDown","placeholder","style","testId","readOnly","autoFocus","autoComplete","forwardedRef","light","onFocus","onBlur","onValidate","validate","onChange","required"],Ts="This field is required.",zs=H("input");class or extends o.Component{constructor(e){super(e),this.state={error:null},this.maybeValidate=t=>{const{validate:n,onValidate:r,required:l}=this.props;if(n){const i=n(t)||null;this.setState({error:i},()=>{r&&r(i)})}else if(l){const c=t?null:typeof l=="string"?l:Ts;this.setState({error:c},()=>{r&&r(c)})}},this.handleChange=t=>{const{onChange:n}=this.props,r=t.target.value;this.maybeValidate(r),n(r)},this.handleFocus=t=>{const{onFocus:n}=this.props;n&&n(t)},this.handleBlur=t=>{const{onBlur:n}=this.props;n&&n(t)},this.getStyles=()=>{const{disabled:t,light:n}=this.props,{error:r}=this.state,l=[oe.input,F.LabelMedium],i=[oe.default,!t&&oe.defaultFocus,t&&oe.disabled,!!r&&oe.error],c=[oe.light,!t&&oe.lightFocus,t&&oe.lightDisabled,!!r&&oe.lightError];return[...l,...n?c:i]},e.validate&&e.value!==""&&(this.state.error=e.validate(e.value)||null)}componentDidMount(){this.props.value!==""&&this.maybeValidate(this.props.value)}render(){const e=this.props,{id:t,type:n,value:r,name:l,disabled:i,onKeyDown:c,placeholder:f,style:h,testId:p,readOnly:b,autoFocus:x,autoComplete:C,forwardedRef:I}=e,u=g(e,Fs);return o.createElement(Ze,{id:t,scope:"text-field"},y=>o.createElement(zs,d({style:[this.getStyles(),h],id:y,type:n,placeholder:f,value:r,name:l,disabled:i,onChange:this.handleChange,onKeyDown:c,onFocus:this.handleFocus,onBlur:this.handleBlur,"data-testid":p,readOnly:b,autoFocus:x,autoComplete:C,ref:I},u,{"aria-invalid":this.state.error?"true":"false"})))}}or.defaultProps={type:"text",disabled:!1,light:!1};const oe=v.StyleSheet.create({input:{width:"100%",height:40,borderRadius:X.radius.medium_4,boxSizing:"border-box",paddingLeft:m.medium_16,margin:0},default:{background:a.white,border:`1px solid ${a.offBlack50}`,color:a.offBlack,"::placeholder":{color:a.offBlack64}},defaultFocus:{":focus-visible":{borderColor:a.blue,outline:`1px solid ${a.blue}`,outlineOffset:0}},error:{background:a.fadedRed8,border:`1px solid ${a.red}`,color:a.offBlack,"::placeholder":{color:a.offBlack64},":focus-visible":{outlineColor:a.red,borderColor:a.red}},disabled:{background:a.offWhite,border:`1px solid ${a.offBlack16}`,color:a.offBlack64,"::placeholder":{color:a.offBlack64},cursor:"not-allowed",":focus-visible":{outline:"none",boxShadow:`0 0 0 1px ${a.white}, 0 0 0 3px ${a.offBlack32}`}},light:{background:a.white,border:`1px solid ${a.offBlack16}`,color:a.offBlack,"::placeholder":{color:a.offBlack64}},lightFocus:{":focus-visible":{outline:`1px solid ${a.blue}`,outlineOffset:0,borderColor:a.blue,boxShadow:`0px 0px 0px 2px ${a.blue}, 0px 0px 0px 3px ${a.white}`}},lightDisabled:{backgroundColor:"transparent",border:`1px solid ${a.white32}`,color:a.white64,"::placeholder":{color:a.white64},cursor:"not-allowed",":focus-visible":{borderColor:ee(a.white32,a.blue),outline:"none",boxShadow:`0 0 0 1px ${a.offBlack32}, 0 0 0 3px ${a.fadedBlue}`}},lightError:{background:a.fadedRed8,border:`1px solid ${a.red}`,boxShadow:`0px 0px 0px 1px ${a.red}, 0px 0px 0px 2px ${a.white}`,color:a.offBlack,"::placeholder":{color:a.offBlack64},":focus-visible":{outlineColor:a.red,borderColor:a.red,boxShadow:`0px 0px 0px 2px ${a.red}, 0px 0px 0px 3px ${a.white}`}}});var lr=o.forwardRef((s,e)=>o.createElement(or,d({},s,{forwardedRef:e})));const Ps=H("span");class Os extends o.Component{renderLabel(){const{label:e,id:t,required:n,testId:r,light:l}=this.props,i=o.createElement(Ps,{style:l?he.lightRequired:he.required,"aria-hidden":!0}," ","*");return o.createElement(o.Fragment,null,o.createElement(xt,{style:l?he.lightLabel:he.label,tag:"label",htmlFor:t&&`${t}-field`,testId:r&&`${r}-label`},e,n&&i),o.createElement(de,{size:m.xxxSmall_4}))}maybeRenderDescription(){const{description:e,testId:t,light:n}=this.props;return e?o.createElement(o.Fragment,null,o.createElement(we,{style:n?he.lightDescription:he.description,testId:t&&`${t}-description`},e),o.createElement(de,{size:m.xxxSmall_4})):null}maybeRenderError(){const{error:e,id:t,testId:n,light:r}=this.props;return e?o.createElement(o.Fragment,null,o.createElement(de,{size:m.small_12}),o.createElement(we,{style:r?he.lightError:he.error,role:"alert",id:t&&`${t}-error`,testId:n&&`${n}-error`},e)):null}render(){const{field:e,style:t}=this.props;return o.createElement(_e,{style:t},this.renderLabel(),this.maybeRenderDescription(),o.createElement(de,{size:m.xSmall_8}),e,this.maybeRenderError())}}const he=v.StyleSheet.create({label:{color:a.offBlack},lightLabel:{color:a.white},description:{color:a.offBlack64},lightDescription:{color:a.white64},error:{color:a.red},lightError:{color:a.fadedRed},required:{color:a.red},lightRequired:{color:a.fadedRed}}),Bs=["id","type","label","description","value","disabled","required","validate","onChange","onKeyDown","placeholder","light","style","testId","readOnly","autoComplete","forwardedRef","ariaDescribedby","onValidate","onFocus","onBlur"];class sr extends o.Component{constructor(e){super(e),this.handleValidate=t=>{const{onValidate:n}=this.props;this.setState({error:t},()=>{n&&n(t)})},this.handleFocus=t=>{const{onFocus:n}=this.props;this.setState({focused:!0},()=>{n&&n(t)})},this.handleBlur=t=>{const{onBlur:n}=this.props;this.setState({focused:!1},()=>{n&&n(t)})},this.state={error:null,focused:!1}}render(){const e=this.props,{id:t,type:n,label:r,description:l,value:i,disabled:c,required:f,validate:h,onChange:p,onKeyDown:b,placeholder:x,light:C,style:I,testId:u,readOnly:y,autoComplete:S,forwardedRef:$,ariaDescribedby:w}=e,k=g(e,Bs);return o.createElement(Ze,{id:t,scope:"labeled-text-field"},E=>o.createElement(Os,{id:E,testId:u,style:I,light:C,field:o.createElement(lr,d({id:`${E}-field`,"aria-describedby":w||`${E}-error`,"aria-required":f?"true":"false",required:f,testId:u&&`${u}-field`,type:n,value:i,placeholder:x,disabled:c,validate:h,onValidate:this.handleValidate,onChange:p,onKeyDown:b,onFocus:this.handleFocus,onBlur:this.handleBlur,light:C,readOnly:y,autoComplete:S,ref:$},k)),label:r,description:l,required:!!f,error:!this.state.focused&&this.state.error||""}))}}sr.defaultProps={type:"text",disabled:!1,light:!1};o.forwardRef((s,e)=>o.createElement(sr,d({},s,{forwardedRef:e})));const Ls=["onChange","value","placeholder","disabled","id","testId","style","readOnly","autoComplete","name","className","autoFocus","rows","spellCheck","wrap","minLength","maxLength","onClick","onKeyDown","onKeyUp","onFocus","onBlur","validate","onValidate","required","resizeType","light","rootStyle"],Ds="This field is required.",Ns=H("textarea");o.forwardRef(function(e,t){const{onChange:n,value:r,placeholder:l,disabled:i,id:c,testId:f,style:h,readOnly:p,autoComplete:b,name:x,className:C,autoFocus:I,rows:u,spellCheck:y,wrap:S,minLength:$,maxLength:w,onClick:k,onKeyDown:E,onKeyUp:R,onFocus:_,onBlur:j,validate:U,onValidate:te,required:ne,resizeType:Ye,light:It,rootStyle:wt}=e,$t=g(e,Ls),[ze,Pe]=o.useState(null),Oe=Fl("text-area"),Et=c??Oe.get("id"),Qe=re=>{const M=re.target.value;n(M),Je(M)},Je=re=>{if(U){const M=U(re)||null;Pe(M),te&&te(M)}else if(ne){const ge=re?null:typeof ne=="string"?ne:Ds;Pe(ge),te&&te(ge)}};Tl(()=>{r!==""&&Je(r)});const kt=()=>{const re=[le.textarea,F.LabelMedium,Ye&&Hs[Ye]],M=[le.default,!i&&le.defaultFocus,i&&le.disabled,!!ze&&le.error],ge=[le.light,!i&&le.lightFocus,i&&le.lightDisabled,!!ze&&le.lightError];return[...re,...It?ge:M]};return o.createElement(_e,{style:[{width:"100%"},wt]},o.createElement(Ns,d({id:Et,"data-testid":f,ref:t,className:C,style:[kt(),h],value:r,onChange:Qe,placeholder:l,"aria-disabled":i,readOnly:p||i,autoComplete:b,name:x,autoFocus:I,rows:u,spellCheck:y,wrap:S,minLength:$,maxLength:w,onClick:i?void 0:k,onKeyDown:i?void 0:E,onKeyUp:i?void 0:R,onFocus:_,onBlur:j,required:!!ne},$t,{"aria-invalid":!!ze})))});const pn=10,le=v.StyleSheet.create({textarea:{borderRadius:X.radius.medium_4,boxSizing:"border-box",padding:`${pn}px ${m.medium_16}px`,minHeight:`${pn*2+br.lineHeight.medium+2*X.width.hairline}px`},default:{background:a.white,border:`1px solid ${a.offBlack50}`,color:a.offBlack,"::placeholder":{color:a.offBlack64}},defaultFocus:{":focus-visible":{borderColor:a.blue,outline:`1px solid ${a.blue}`,outlineOffset:0}},disabled:{background:a.offWhite,border:`1px solid ${a.offBlack16}`,color:a.offBlack64,"::placeholder":{color:a.offBlack64},cursor:"not-allowed",":focus-visible":{outline:"none",boxShadow:`0 0 0 1px ${a.white}, 0 0 0 3px ${a.offBlack32}`}},error:{background:a.fadedRed8,border:`1px solid ${a.red}`,color:a.offBlack,"::placeholder":{color:a.offBlack64},":focus-visible":{outlineColor:a.red,borderColor:a.red}},light:{background:a.white,border:`1px solid ${a.offBlack16}`,color:a.offBlack,"::placeholder":{color:a.offBlack64}},lightFocus:{":focus-visible":{outline:`1px solid ${a.blue}`,outlineOffset:0,borderColor:a.blue,boxShadow:`0px 0px 0px 2px ${a.blue}, 0px 0px 0px 3px ${a.white}`}},lightDisabled:{backgroundColor:"transparent",border:`1px solid ${a.white32}`,color:a.white64,"::placeholder":{color:a.white64},cursor:"not-allowed",":focus-visible":{borderColor:ee(a.white32,a.blue),outline:"none",boxShadow:`0 0 0 1px ${a.offBlack32}, 0 0 0 3px ${a.fadedBlue}`}},lightError:{background:a.fadedRed8,border:`1px solid ${a.red}`,boxShadow:`0px 0px 0px 1px ${a.red}, 0px 0px 0px 2px ${a.white}`,color:a.offBlack,"::placeholder":{color:a.offBlack64},":focus-visible":{outlineColor:a.red,borderColor:a.red,boxShadow:`0px 0px 0px 2px ${a.red}, 0px 0px 0px 3px ${a.white}`}}}),Hs=v.StyleSheet.create({both:{resize:"both"},none:{resize:"none"},horizontal:{resize:"horizontal"},vertical:{resize:"vertical"}}),Ms=s=>({small:16,medium:24,large:48,xlarge:96})[s],Ws=["color","icon","size","style","testId","className"],As=Te("span"),ir=o.forwardRef(function(e,t){const{color:n="currentColor",icon:r,size:l="small",style:i,testId:c,className:f}=e,h=g(e,Ws),p=Ms(l),b=`${f??""}`,x=qs(n,p);return o.createElement(As,d({},h,{className:b,style:[Kt.svg,x.icon,{maskImage:`url(${r})`},i],"data-testid":c,ref:t}))}),mn={},qs=(s,e)=>{const t=`${s}-${e}`;if(Kt[t])return Kt[t];const n={icon:{backgroundColor:s,width:e,height:e}};return mn[t]=v.StyleSheet.create(n),mn[t]},Kt=v.StyleSheet.create({svg:{display:"inline-block",verticalAlign:"text-bottom",flexShrink:0,flexGrow:0,maskSize:"100%",maskRepeat:"no-repeat",maskPosition:"center"}});ir.displayName="PhosphorIcon";const Vs={clearSearch:"Clear search"},Us=["clearAriaLabel","autoFocus","disabled","light","id","value","placeholder","style","testId","onClick","onChange","onFocus","onBlur"],Ks=o.forwardRef(function(e,t){const{clearAriaLabel:n=Vs.clearSearch,autoFocus:r,disabled:l=!1,light:i=!1,id:c,value:f,placeholder:h,style:p,testId:b,onClick:x,onChange:C,onFocus:I,onBlur:u}=e,y=g(e,Us),S=o.useRef(null),$=()=>{var k;C(""),S==null||(k=S.current)==null||k.focus()},w=()=>f.length?o.createElement(vr,{icon:Ir,kind:"tertiary",onClick:$,style:lt.dismissIcon,"aria-label":n}):null;return o.createElement(Un,{id:c,scope:"search-field"},k=>o.createElement(Zo,{onClick:x,style:[lt.inputContainer,p]},o.createElement(ir,{icon:Ho,size:"medium",color:a.offBlack64,style:lt.searchIcon,"aria-hidden":"true"}),o.createElement(lr,d({id:`${k}-field`,type:"text",autoFocus:r,disabled:l,light:i,onChange:C,onFocus:I,onBlur:u,placeholder:h,ref:E=>{t&&(t.current=E),S.current=E},value:f,style:[lt.inputStyleReset,T.LabelMedium],testId:b},y)),w()))}),lt=v.StyleSheet.create({inputContainer:{boxSizing:"border-box",flexDirection:"row",borderRadius:m.xxxSmall_4,alignItems:"center",height:40},searchIcon:{marginLeft:m.xSmall_8,marginRight:m.xSmall_8,position:"absolute"},dismissIcon:{margin:0,position:"absolute",right:0,":hover":{border:"none"}},inputStyleReset:{display:"flex",flex:1,"::placeholder":{color:a.offBlack64},width:"100%",color:"inherit",paddingLeft:m.large_24+m.medium_16,paddingRight:m.large_24+m.medium_16}});function jt(){return jt=Object.assign||function(s){for(var e=1;e=e?s.call(null):r.id=requestAnimationFrame(n)}var r={id:requestAnimationFrame(n)};return r}var $e=null;function xn(s){if(s===void 0&&(s=!1),$e===null||s){var e=document.createElement("div"),t=e.style;t.width="50px",t.height="50px",t.overflow="scroll",t.direction="rtl";var n=document.createElement("div"),r=n.style;return r.width="100px",r.height="100px",e.appendChild(n),document.body.appendChild(e),e.scrollLeft>0?$e="positive-descending":(e.scrollLeft=1,e.scrollLeft===0?$e="negative":$e="positive-ascending"),document.body.removeChild(e),$e}return $e}var Qs=150,Js=function(e,t){return e};function ei(s){var e,t=s.getItemOffset,n=s.getEstimatedTotalSize,r=s.getItemSize,l=s.getOffsetForIndexAndAlignment,i=s.getStartIndexForOffset,c=s.getStopIndexForStartIndex,f=s.initInstanceProps,h=s.shouldResetStyleCacheOnItemSizeChange,p=s.validateProps;return e=function(b){js(x,b);function x(I){var u;return u=b.call(this,I)||this,u._instanceProps=f(u.props,gn(u)),u._outerRef=void 0,u._resetIsScrollingTimeoutId=null,u.state={instance:gn(u),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof u.props.initialScrollOffset=="number"?u.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},u._callOnItemsRendered=void 0,u._callOnItemsRendered=Lt(function(y,S,$,w){return u.props.onItemsRendered({overscanStartIndex:y,overscanStopIndex:S,visibleStartIndex:$,visibleStopIndex:w})}),u._callOnScroll=void 0,u._callOnScroll=Lt(function(y,S,$){return u.props.onScroll({scrollDirection:y,scrollOffset:S,scrollUpdateWasRequested:$})}),u._getItemStyle=void 0,u._getItemStyle=function(y){var S=u.props,$=S.direction,w=S.itemSize,k=S.layout,E=u._getItemStyleCache(h&&w,h&&k,h&&$),R;if(E.hasOwnProperty(y))R=E[y];else{var _=t(u.props,y,u._instanceProps),j=r(u.props,y,u._instanceProps),U=$==="horizontal"||k==="horizontal",te=$==="rtl",ne=U?_:0;E[y]=R={position:"absolute",left:te?void 0:ne,right:te?ne:void 0,top:U?0:_,height:U?"100%":j,width:U?j:"100%"}}return R},u._getItemStyleCache=void 0,u._getItemStyleCache=Lt(function(y,S,$){return{}}),u._onScrollHorizontal=function(y){var S=y.currentTarget,$=S.clientWidth,w=S.scrollLeft,k=S.scrollWidth;u.setState(function(E){if(E.scrollOffset===w)return null;var R=u.props.direction,_=w;if(R==="rtl")switch(xn()){case"negative":_=-w;break;case"positive-descending":_=k-$-w;break}return _=Math.max(0,Math.min(_,k-$)),{isScrolling:!0,scrollDirection:E.scrollOffset0)for(var M=Je;M<=kt;M++)re.push(o.createElement(y,{data:j,key:te(M,j),index:M,isScrolling:$t?Pe:void 0,style:this._getItemStyle(M)}));var ge=n(this.props,this._instanceProps);return o.createElement(Ye||It||"div",{className:S,onScroll:Et,ref:this._outerRefSetter,style:jt({position:"relative",height:w,width:ze,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:$},wt)},o.createElement(E||R||"div",{children:re,ref:k,style:{height:Oe?"100%":ge,pointerEvents:Pe?"none":void 0,width:Oe?ge:"100%"}}))},C._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var u=this.props.itemCount;if(u>0){var y=this._getRangeToRender(),S=y[0],$=y[1],w=y[2],k=y[3];this._callOnItemsRendered(S,$,w,k)}}if(typeof this.props.onScroll=="function"){var E=this.state,R=E.scrollDirection,_=E.scrollOffset,j=E.scrollUpdateWasRequested;this._callOnScroll(R,_,j)}},C._getRangeToRender=function(){var u=this.props,y=u.itemCount,S=u.overscanCount,$=this.state,w=$.isScrolling,k=$.scrollDirection,E=$.scrollOffset;if(y===0)return[0,0,0,0];var R=i(this.props,E,this._instanceProps),_=c(this.props,R,E,this._instanceProps),j=!w||k==="backward"?Math.max(1,S):1,U=!w||k==="forward"?Math.max(1,S):1;return[Math.max(0,R-j),Math.max(0,Math.min(y-1,_+U)),R,_]},x}(o.PureComponent),e.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},e}var ti=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},ni=50,Ee=function(e,t,n){var r=e,l=r.itemSize,i=n.itemMetadataMap,c=n.lastMeasuredIndex;if(t>c){var f=0;if(c>=0){var h=i[c];f=h.offset+h.size}for(var p=c+1;p<=t;p++){var b=l(p);i[p]={offset:f,size:b},f+=b}n.lastMeasuredIndex=t}return i[t]},ri=function(e,t,n){var r=t.itemMetadataMap,l=t.lastMeasuredIndex,i=l>0?r[l].offset:0;return i>=n?ar(e,t,l,0,n):oi(e,t,Math.max(0,l),n)},ar=function(e,t,n,r,l){for(;r<=n;){var i=r+Math.floor((n-r)/2),c=Ee(e,i,t).offset;if(c===l)return i;cl&&(n=i-1)}return r>0?r-1:0},oi=function(e,t,n,r){for(var l=e.itemCount,i=1;n=n&&(i=n-1),i>=0){var f=r[i];c=f.offset+f.size}var h=n-i-1,p=h*l;return c+p},li=ei({getItemOffset:function(e,t,n){return Ee(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:Cn,getOffsetForIndexAndAlignment:function(e,t,n,r,l){var i=e.direction,c=e.height,f=e.layout,h=e.width,p=i==="horizontal"||f==="horizontal",b=p?h:c,x=Ee(e,t,l),C=Cn(e,l),I=Math.max(0,Math.min(C-b,x.offset)),u=Math.max(0,x.offset-b+x.size);switch(n==="smart"&&(r>=u-b&&r<=I+b?n="auto":n="center"),n){case"start":return I;case"end":return u;case"center":return Math.round(u+(I-u)/2);case"auto":default:return r>=u&&r<=I?r:r`Select all (${s})`,noneSelected:"0 items",someSelected:s=>s===1?"1 item":`${s} items`,allSelected:"All items"},{blue:si,white:vn,offBlack:ii}=a;class Fe extends o.Component{static isClassOf(e){return e&&e.type&&e.type.__IS_ACTION_ITEM__}render(){const{disabled:e,horizontalRule:t,href:n,target:r,indent:l,label:i,lang:c,leftAccessory:f,rightAccessory:h,onClick:p,role:b,style:x,testId:C}=this.props,I=[He.wrapper,x],u=typeof i=="string"?o.createElement(bt,{lang:c,style:He.label},i):o.cloneElement(i,d({lang:c,style:He.label},i.props));return o.createElement(yo,{disabled:e,horizontalRule:t,rootStyle:I,leftAccessory:f,rightAccessory:h,style:[He.shared,l&&He.indent],role:b,testId:C,title:u,href:n,target:r,onClick:p})}}Fe.defaultProps={disabled:!1,horizontalRule:"none",indent:!1,role:"menuitem"};Fe.__IS_ACTION_ITEM__=!0;const He=v.StyleSheet.create({wrapper:{minHeight:me,touchAction:"manipulation",":focus":{borderRadius:m.xxxSmall_4,outline:`${m.xxxxSmall_2}px solid ${a.blue}`,outlineOffset:-m.xxxxSmall_2},":hover[aria-disabled=false]":{color:vn,background:si},"@media not (hover: hover)":{":hover[aria-disabled=false]":{color:vn,background:ii}},":active[aria-disabled=false]":{color:a.fadedBlue,background:a.activeBlue}},shared:{minHeight:me,height:me},label:{whiteSpace:"nowrap",userSelect:"none"},indent:{paddingLeft:m.medium_16*2}}),ai=function(e){const{selected:t}=e;return o.createElement(St,{icon:Gt,size:"small",style:[In.bounds,!t&&In.hide]})},In=v.StyleSheet.create({bounds:{alignSelf:"center",height:m.medium_16,minHeight:m.medium_16,minWidth:m.medium_16},hide:{visibility:"hidden"}}),{offBlack16:di,offBlack50:ci,offWhite:ui}=a,hi=function(e){const{disabled:t,selected:n}=e;return o.createElement(Ce,{className:"checkbox",style:[st.checkbox,n&&!t&&st.noBorder,t&&st.disabledCheckbox]},n&&o.createElement(St,{icon:Gt,size:"small",className:"check",style:[{width:m.small_12,height:m.small_12,margin:m.xxxxSmall_2},t&&n&&st.disabledCheckFormatting]}))},st=v.StyleSheet.create({checkbox:{alignSelf:"center",minHeight:m.medium_16,minWidth:m.medium_16,height:m.medium_16,borderRadius:3,borderWidth:1,borderStyle:"solid",borderColor:ci},noBorder:{borderWidth:0},disabledCheckbox:{borderColor:di,backgroundColor:ui},disabledCheckFormatting:{position:"absolute",top:-1,left:-1}}),fi=["disabled","label","selected","testId","leftAccessory","horizontalRule","parentComponent","rightAccessory","style","subtitle1","subtitle2","value","onClick","onToggle","variant","role"],pi=yt("li");class ve extends o.Component{constructor(...e){super(...e),this.handleClick=()=>{const{onClick:t,onToggle:n,value:r}=this.props;n(r),t&&t()}}static isClassOf(e){return e&&e.type&&e.type.__IS_OPTION_ITEM__}getCheckComponent(){return this.props.variant==="check"?ai:hi}renderCell(){const e=this.props,{disabled:t,label:n,selected:r,testId:l,leftAccessory:i,horizontalRule:c,parentComponent:f,rightAccessory:h,style:p,subtitle1:b,subtitle2:x,role:C}=e,I=g(e,fi),u=this.getCheckComponent(),y=[fe.item,p];return o.createElement(So,d({disabled:t,horizontalRule:c,rootStyle:f==="listbox"?fe.listboxItem:y,style:fe.itemContainer,"aria-selected":f!=="listbox"&&r?"true":"false",role:f!=="listbox"?C:void 0,testId:l,leftAccessory:o.createElement(o.Fragment,null,i?o.createElement(Ce,{style:{flexDirection:"row"}},o.createElement(u,{disabled:t,selected:r}),o.createElement(de,{size:m.xSmall_8}),i):o.createElement(u,{disabled:t,selected:r})),rightAccessory:h,subtitle1:b?o.createElement(Qt,{className:"subtitle"},b):void 0,title:o.createElement(bt,{style:fe.label},n),subtitle2:x?o.createElement(Qt,{className:"subtitle"},x):void 0,onClick:f!=="listbox"?this.handleClick:void 0},I))}render(){const{disabled:e,focused:t,parentComponent:n,role:r,selected:l}=this.props;return n==="listbox"?o.createElement(pi,{onMouseDown:i=>{i.preventDefault()},onClick:this.handleClick,style:[fe.reset,fe.item,t&&fe.itemFocused,e&&fe.itemDisabled],role:r,"aria-selected":l?"true":"false","aria-disabled":e?"true":"false",id:this.props.id,tabIndex:-1},this.renderCell()):this.renderCell()}}ve.defaultProps={disabled:!1,focused:!1,horizontalRule:"none",onToggle:()=>{},role:"option",selected:!1};ve.__IS_OPTION_ITEM__=!0;const{blue:Dt,white:Me,offBlack:mi}=a,wn={borderRadius:m.xxxSmall_4,outline:`${m.xxxxSmall_2}px solid ${a.blue}`,outlineOffset:-m.xxxxSmall_2},fe=v.StyleSheet.create({reset:{margin:0,padding:0,border:0,background:"none",outline:"none",fontSize:"100%",verticalAlign:"baseline",textAlign:"left",textDecoration:"none",listStyle:"none",cursor:"pointer"},listboxItem:{backgroundColor:"transparent",color:"inherit"},item:{backgroundColor:a.white,minHeight:"unset",":focus":wn,":focus-visible":{overflow:"visible"},":hover[aria-disabled=false]":{color:Me,background:Dt},":active[aria-selected=false]":{},":hover[aria-disabled=true]":{cursor:"not-allowed"},":is([aria-disabled=true])":{color:a.offBlack32,":focus-visible":{outline:"none"}},"@media not (hover: hover)":{":hover[aria-disabled=false]":{color:Me,background:mi}},":active[aria-disabled=false]":{color:a.fadedBlue,background:a.activeBlue},":hover[aria-disabled=false] .checkbox":{background:Me},":hover[aria-disabled=false] .check":{color:Dt},":active[aria-disabled=false] .check":{color:a.activeBlue},":is([aria-selected=true]) .checkbox":{background:Dt},":is([aria-selected=true]) .check":{color:Me},":is([aria-disabled=false]) .subtitle":{color:a.offBlack64},":hover[aria-disabled=false] .subtitle":{color:a.offWhite},":active[aria-disabled=false] .subtitle":{color:ee(a.fadedBlue16,Me)}},itemFocused:wn,itemDisabled:{outlineColor:a.offBlack32},itemContainer:{minHeight:"unset",padding:`${m.xSmall_8+m.xxxxSmall_2}px ${m.xSmall_8}px`,paddingRight:m.medium_16,whiteSpace:"nowrap"},label:{whiteSpace:"nowrap",userSelect:"none",overflow:"hidden",textOverflow:"ellipsis"},hide:{visibility:"hidden"}});class ue extends o.Component{static isClassOf(e){return e&&e.type&&e.type.__IS_SEPARATOR_ITEM__}render(){return o.createElement(Ce,{style:[gi.separator,this.props.style],"aria-hidden":"true"})}}ue.__IS_SEPARATOR_ITEM__=!0;const gi=v.StyleSheet.create({separator:{boxShadow:`0 -1px ${a.offBlack16}`,height:1,minHeight:1,marginTop:m.xxxSmall_4,marginBottom:m.xxxSmall_4}});class Ct extends o.Component{constructor(...e){super(...e),this.getTestIdFromProps=t=>t.testId||t["data-testid"]}renderAnchorChildren(e,t){const{disabled:n,testId:r,text:l,opened:i,"aria-controls":c,"aria-haspopup":f,id:h}=this.props,p=this.props.children(d({},e,{text:l,opened:i})),b=p.props,x=this.getTestIdFromProps(b);return o.cloneElement(p,d({},t,{disabled:n,"aria-controls":c,id:h,"aria-expanded":i?"true":"false","aria-haspopup":f,onClick:b.onClick?C=>{b.onClick(C),t.onClick(C)}:t.onClick,"data-testid":x||r}))}render(){return o.createElement(yr,{onClick:this.props.onClick,disabled:this.props.disabled,tabIndex:0},(e,t)=>this.renderAnchorChildren(e,t))}}Ct.defaultProps={disabled:!1};class yi extends o.Component{render(){const{data:e,index:t,style:n}=this.props,r=e[t];if(ue.isClassOf(r.component))return o.cloneElement(r.component,{style:n});{const{component:l,populatedProps:i,onClick:c,role:f,ref:h}=r;return o.cloneElement(l,d({style:n},i,{key:t,onClick:c,ref:r.focusable&&h,role:f}))}}}function $n(s,e=0){return s.slice(0,hr).reduce((t,n)=>ue.isClassOf(n.component)?t+fr:t+me,e)}class bi extends o.Component{constructor(e){super(e),this.getItemSize=t=>{const n=this.props.data[t];return ue.isClassOf(n.component)?fr:me},this.state={height:$n(e.data),width:e.width}}componentDidMount(){const{schedule:e}=this.props;e.animationFrame(()=>{this.setWidth()})}componentDidUpdate(e){const{data:t,listRef:n}=this.props;e.data.length!==t.length&&(this.setHeight(),n&&n.current&&n.current.resetAfterIndex(1))}setWidth(){const e=Ie.findDOMNode(this),t=e==null?void 0:e.parentElement;if(t){const n=t.getBoundingClientRect().width;this.setState({width:n})}}setHeight(){const e=$n(this.props.data);this.setState({height:e})}renderInitialItems(){const{data:e}=this.props,t=e.map(r=>r.component);return o.Children.toArray(t).filter(Boolean).sort((r,l)=>l.props.label&&r.props.label?l.props.label.length-r.props.label.length:-1).slice(0,hr).map(r=>o.cloneElement(r,{style:{visibility:"hidden"}}))}renderVirtualizedList(e,t){const{data:n,listRef:r}=this.props;return o.createElement(li,{height:t,itemCount:n.length,itemSize:this.getItemSize,itemData:n,style:{overflowX:"hidden"},width:e,overscanCount:5,ref:r},yi)}render(){const{width:e,height:t}=this.state;return e==null?this.renderInitialItems():this.renderVirtualizedList(e,t)}}var Si=kn(bi);function xi({state:s,options:e}){const t=$r(s,e),{y:n}=s.modifiersData.preventOverflow||{x:0,y:0},{height:r}=s.rects.popper,[l]=s.placement.split("-"),c=r-t[l==="top"?"top":"bottom"]-n;s.styles.popper=d({},s.styles.popper,{maxHeight:`${c}px`,"--popper-max-height":`${c}px`})}const Ci={name:"maxHeight",enabled:!0,phase:"main",options:{padding:me},requiresIfExists:["offset","preventOverflow","flip"],fn:xi},vi=[{name:"preventOverflow",options:{rootBoundary:"viewport",altAxis:!0,tether:!1}},Ci],Ii=function({children:e,alignment:t="left",onPopperElement:n,referenceElement:r}){const l=Er(r)||document.querySelector("body");return l?Ie.createPortal(o.createElement(wr,{innerRef:i=>{i&&n&&n(i)},referenceElement:r,strategy:"fixed",placement:t==="left"?"bottom-start":"bottom-end",modifiers:vi},({placement:i,ref:c,style:f,hasPopperEscaped:h,isReferenceHidden:p})=>{const b=!!(h||p);return o.createElement("div",{ref:c,style:f,"data-testid":"dropdown-popper","data-placement":i},e(b))}),l):null};function wi(s){return s.length===1||!/^[A-Z]/i.test(s)?s:""}function $i(s,e){let t;return function(...r){const l=()=>{clearTimeout(t),s(...r)};clearTimeout(t),t=setTimeout(l,e)}}function En(s){return typeof s=="string"}function Ae(s){return En(s.label)?s.label:En(s.labelAsText)?s.labelAsText:""}const Ei=125,ki=yt("span");class vt extends o.Component{static sameItemsFocusable(e,t){if(e.length!==t.length)return!1;for(let n=0;n{const{open:n,onOpenChanged:r}=this.props,l=t.target,i=Ie.findDOMNode(this);n&&i&&!i.contains(l)&&this.popperElement&&!this.popperElement.contains(l)&&r(!1)},this.handleKeyDown=t=>{const{enableTypeAhead:n,onOpenChanged:r,open:l,searchText:i}=this.props,c=t.which||t.keyCode;if(n&&wi(t.key)&&(t.stopPropagation(),this.textSuggestion+=t.key,this.handleKeyDownDebounced(this.textSuggestion)),!l){if(c===ye.down){t.preventDefault(),r(!0);return}return}switch(c){case ye.tab:if(this.isSearchFieldFocused()&&i)return;this.restoreTabOrder(),r(!1);return;case ye.space:if(this.isSearchFieldFocused())return;t.preventDefault();return;case ye.up:t.preventDefault(),this.focusPreviousItem();return;case ye.down:t.preventDefault(),this.focusNextItem();return}},this.handleKeyUp=t=>{const{onOpenChanged:n,open:r}=this.props;switch(t.which||t.keyCode){case ye.space:if(this.isSearchFieldFocused())return;t.preventDefault();return;case ye.escape:r&&(t.stopPropagation(),this.restoreTabOrder(),n(!1));return}},this.handleKeyDownDebounceResult=t=>{const n=this.props.items.filter(r=>r.focusable).findIndex(({component:r})=>{if(ue.isClassOf(r))return!1;if(ve.isClassOf(r)){const l=r.props;return Ae(l).toLowerCase().startsWith(t.toLowerCase())}return!1});if(n>=0){const r=!this.props.open;r&&this.props.onOpenChanged(!0),this.focusedIndex=n,this.scheduleToFocusCurrentItem(l=>{this.props.selectionType==="single"&&r&&l&&(l.click(),this.props.onOpenChanged(!1))})}this.textSuggestion=""},this.handleClickFocus=t=>{this.itemsClicked=!0,this.focusedIndex=t,this.focusedOriginalIndex=this.state.itemRefs[this.focusedIndex].originalIndex},this.handleDropdownMouseUp=t=>{t.nativeEvent.stopImmediatePropagation?t.nativeEvent.stopImmediatePropagation():t.stopPropagation()},this.handleItemClick=(t,n)=>{this.handleClickFocus(t),n.component.props.onClick&&n.component.props.onClick(),n.populatedProps.onClick&&n.populatedProps.onClick()},this.handleSearchTextChanged=t=>{const{onSearchTextChanged:n}=this.props;n&&n(t)},this.resetFocusedIndex(),this.state={prevItems:this.props.items,itemRefs:[],sameItemsFocusable:!1,labels:d({noResults:K.noResults,someResults:K.someSelected},e.labels)},this.virtualizedListRef=o.createRef(),this.handleKeyDownDebounced=$i(this.handleKeyDownDebounceResult,500),this.textSuggestion=""}componentDidMount(){this.updateEventListeners(),this.maybeFocusInitialItem()}componentDidUpdate(e){const{open:t,searchText:n}=this.props;if(e.open!==t)this.updateEventListeners(),this.maybeFocusInitialItem();else if(t){const{itemRefs:r,sameItemsFocusable:l}=this.state;if(l||e.searchText!==n)return;{const i=r.findIndex(c=>c.originalIndex===this.focusedOriginalIndex);i===-1?(this.focusedIndex=0,this.itemsClicked=!1,this.scheduleToFocusCurrentItem()):this.focusedIndex=i}this.props.labels!==e.labels&&this.setState({labels:d({},this.state.labels,this.props.labels)})}}componentWillUnmount(){this.removeEventListeners()}resetFocusedIndex(){const{initialFocusedIndex:e}=this.props;if(typeof e<"u")this.focusedIndex=e;else{if(this.hasSearchField()&&!this.isSearchFieldFocused())return this.focusSearchField();this.focusedIndex=0}}maybeFocusInitialItem(){const{autoFocus:e,open:t}=this.props;e&&(t?(this.resetFocusedIndex(),this.scheduleToFocusCurrentItem()):t||(this.itemsClicked=!1))}updateEventListeners(){this.props.open?this.addEventListeners():this.removeEventListeners()}addEventListeners(){document.addEventListener("mouseup",this.handleInteract),document.addEventListener("touchend",this.handleInteract)}removeEventListeners(){document.removeEventListener("mouseup",this.handleInteract),document.removeEventListener("touchend",this.handleInteract)}scheduleToFocusCurrentItem(e){this.shouldVirtualizeList()?this.props.schedule.animationFrame(()=>{this.focusCurrentItem(e)}):this.focusCurrentItem(e)}focusCurrentItem(e){const t=this.state.itemRefs[this.focusedIndex];if(t){this.virtualizedListRef.current&&this.virtualizedListRef.current.scrollToItem(t.originalIndex);const n=Ie.findDOMNode(t.ref.current);n&&(n.focus(),this.focusedOriginalIndex=t.originalIndex,e&&e(n))}}focusSearchField(){this.searchFieldRef.current&&this.searchFieldRef.current.focus()}hasSearchField(){return!!this.props.isFilterable}isSearchFieldFocused(){return this.hasSearchField()&&document.activeElement===this.searchFieldRef.current}focusPreviousItem(){if(this.focusedIndex===0||this.isSearchFieldFocused()&&!this.props.enableTypeAhead){if(this.hasSearchField()&&!this.isSearchFieldFocused())return this.focusSearchField();this.focusedIndex=this.state.itemRefs.length-1}else this.focusedIndex-=1;this.scheduleToFocusCurrentItem()}focusNextItem(){if(this.focusedIndex===this.state.itemRefs.length-1||this.isSearchFieldFocused()&&!this.props.enableTypeAhead){if(this.hasSearchField()&&!this.isSearchFieldFocused())return this.focusSearchField();this.focusedIndex=0}else this.focusedIndex+=1;this.scheduleToFocusCurrentItem()}restoreTabOrder(){this.props.openerElement&&this.props.openerElement.focus()}getItemRole(){const{role:e}=this.props;switch(e){case"listbox":return"option";case"menu":return"menuitem";default:throw new Error(`Expected "listbox" or "menu" for role, but receieved "${e}" instead.`)}}maybeRenderNoResults(){const{items:e,labels:{noResults:t}}=this.props;return e.length===0?o.createElement(bt,{style:pe.noResult,testId:"dropdown-core-no-results"},t):null}shouldVirtualizeList(){return this.props.items.length>Ei}renderList(){let e=0;const t=this.getItemRole();return this.props.items.map((n,r)=>{if(ue.isClassOf(n.component))return n.component;const{component:l,focusable:i,populatedProps:c}=n;i&&(e+=1);const f=e-1,h=this.state.itemRefs[f]?this.state.itemRefs[f].ref:null;return o.cloneElement(l,d({},c,{key:r,onClick:()=>{this.handleItemClick(f,n)},ref:i?h:null,role:c.role||t}))})}parseVirtualizedItems(){let e=0;const t=this.getItemRole();return this.props.items.map((n,r)=>{const{populatedProps:l}=n;!ue.isClassOf(n.component)&&n.focusable&&(e+=1);const i=e-1;return d({},n,{role:l.role||t,ref:n.focusable&&this.state.itemRefs[i]?this.state.itemRefs[i].ref:null,onClick:()=>{this.handleItemClick(i,n)}})})}renderVirtualizedList(){const e=this.parseVirtualizedItems();return o.createElement(Si,{data:e,listRef:this.virtualizedListRef})}renderSearchField(){const{searchText:e}=this.props,{labels:t}=this.state;return o.createElement(Ks,{clearAriaLabel:t.clearSearch,onChange:this.handleSearchTextChanged,placeholder:t.filter,ref:this.searchFieldRef,style:pe.searchInputStyle,value:e||""})}renderDropdownMenu(e,t){const{"aria-invalid":n,"aria-required":r,dropdownStyle:l,isFilterable:i,light:c,openerElement:f,role:h,id:p}=this.props,b=f&&window.getComputedStyle(f),x=b?b.getPropertyValue("width"):0;return o.createElement(Ce,{onMouseUp:this.handleDropdownMouseUp,style:[pe.dropdown,c&&pe.light,t&&pe.hidden,l],testId:"dropdown-core-container"},i&&this.renderSearchField(),o.createElement(Ce,{id:p,role:h,style:[pe.listboxOrMenu,{minWidth:x}],"aria-invalid":h==="listbox"?n:void 0,"aria-required":h==="listbox"?r:void 0},e),this.maybeRenderNoResults())}renderDropdown(){const{alignment:e,openerElement:t}=this.props,n=this.shouldVirtualizeList()?this.renderVirtualizedList():this.renderList();return o.createElement(Ii,{alignment:e,onPopperElement:r=>{this.popperElement=r},referenceElement:t},r=>this.renderDropdownMenu(n,r))}renderLiveRegion(){const{items:e,open:t}=this.props,{labels:n}=this.state,r=e.length;return o.createElement(ki,{"aria-live":"polite","aria-atomic":"true","aria-relevant":"additions text",style:pe.srOnly,"data-testid":"dropdown-live-region"},t&&n.someResults(r))}render(){const{open:e,opener:t,style:n,className:r,disabled:l}=this.props;return o.createElement(Ce,{onKeyDown:l?void 0:this.handleKeyDown,onKeyUp:l?void 0:this.handleKeyUp,style:[pe.menuWrapper,n],className:r},this.renderLiveRegion(),t,e&&this.renderDropdown())}}vt.defaultProps={alignment:"left",autoFocus:!0,enableTypeAhead:!0,labels:{clearSearch:K.clearSearch,filter:K.filter,noResults:K.noResults,someResults:K.someSelected},light:!1,selectionType:"single"};const pe=v.StyleSheet.create({menuWrapper:{width:"fit-content"},dropdown:{backgroundColor:a.white,borderRadius:4,paddingTop:m.xxxSmall_4,paddingBottom:m.xxxSmall_4,border:`solid 1px ${a.offBlack16}`,boxShadow:`0px 8px 8px 0px ${Sr(a.offBlack,.1)}`,maxHeight:"var(--popper-max-height)"},light:{border:"none"},listboxOrMenu:{overflowY:"auto"},hidden:{pointerEvents:"none",visibility:"hidden"},noResult:{color:a.offBlack64,alignSelf:"center",marginTop:m.xxSmall_6},searchInputStyle:{margin:m.xSmall_8,marginTop:m.xxxSmall_4,minHeight:"auto",position:"sticky"},srOnly:{border:0,clip:"rect(0,0,0,0)",height:1,margin:-1,overflow:"hidden",padding:0,position:"absolute",width:1}});var Zt=kn(vt);const Ri=["children","disabled","focused","hovered","pressed","waiting","testId","opened","aria-label"],_i=yt("button");class Fi extends o.Component{render(){const e=this.props,{children:t,disabled:n,focused:r,hovered:l,pressed:i,testId:c,opened:f,"aria-label":h}=e,p=g(e,Ri),b=a.blue,x=Ti(b),C=n,I=[Nt.shared,C&&Nt.disabled,x.default,C&&x.disabled,!C&&i&&x.active],u=o.createElement(xr,{style:Nt.text},t);return o.createElement(_i,d({"aria-expanded":f?"true":"false","aria-haspopup":"menu","aria-label":h,disabled:C,style:I,type:"button"},p,{"data-testid":c}),o.createElement(Ce,{style:!C&&(l||r)&&x.focus},u),o.createElement(de,{size:m.xxxSmall_4}),o.createElement(St,{size:"small",color:"currentColor",icon:dr,"aria-hidden":"true"}))}}const Nt=v.StyleSheet.create({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",height:me,border:"none",borderRadius:m.xxxSmall_4,cursor:"pointer",outline:"none",textDecoration:"none",boxSizing:"border-box",touchAction:"manipulation",":focus":{WebkitTapHighlightColor:"rgba(0,0,0,0)"}},disabled:{cursor:"auto"},small:{height:m.xLarge_32},text:{textAlign:"left",display:"inline-block",alignItems:"center",fontWeight:"bold",userSelect:"none",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",pointerEvents:"none"},hiddenText:{visibility:"hidden"},spinner:{position:"absolute"}}),it={},Ti=s=>{const e=s;if(it[e])return it[e];const{offBlack32:t}=a,n=a.activeBlue;let r={};return r={default:{background:"none",color:s},focus:{":after":{content:"''",position:"absolute",height:2,left:0,right:0,bottom:-1,background:"currentColor",borderRadius:2}},active:{color:n},disabled:{color:t,cursor:"default"}},it[e]=v.StyleSheet.create(r),it[e]},zi=["text","opened"];class Pi extends o.Component{constructor(...e){super(...e),this.openerElement=void 0,this.state={opened:!1},this.handleItemSelected=()=>{this.handleOpenChanged(!1),this.openerElement&&this.openerElement.focus()},this.handleOpenChanged=t=>{this.setState({opened:t}),this.props.onToggle&&this.props.onToggle(t)},this.handleOptionSelected=t=>{const{onChange:n,selectedValues:r}=this.props;if(!(!n||!r)){if(r.includes(t)){const l=r.indexOf(t),i=[...r.slice(0,l),...r.slice(l+1)];n(i)}else n([...r,t]);this.handleItemSelected()}},this.handleOpenerRef=t=>{this.openerElement=Ie.findDOMNode(t)},this.handleClick=t=>{this.handleOpenChanged(!this.state.opened)}}static getDerivedStateFromProps(e,t){return{opened:typeof e.opened=="boolean"?e.opened:t.opened}}getMenuItems(){const{children:e,selectedValues:t}=this.props,n=o.Children.toArray(e).filter(Boolean),r=n.some(l=>ve.isClassOf(l));return n.map(l=>{const{value:i,disabled:c}=l.props,f={component:l,focusable:Fe.isClassOf(l)||ve.isClassOf(l)?!c:!1,populatedProps:{}};if(Fe.isClassOf(l))return d({},f,{populatedProps:{indent:r,onClick:this.handleItemSelected}});if(ve.isClassOf(l)){const h=t?t.includes(i):!1;return d({},f,{populatedProps:{onToggle:this.handleOptionSelected,selected:h,variant:"check",role:"menuitemcheckbox","aria-checked":h,"aria-selected":void 0}})}else return f})}renderOpener(e,t){const{disabled:n,menuText:r,opener:l,testId:i,id:c}=this.props;return o.createElement(ke,{id:c,scope:"action-menu-opener"},f=>o.createElement(Ct,{id:f,"aria-controls":t,"aria-haspopup":"menu",onClick:this.handleClick,disabled:e===0||n,text:r,ref:this.handleOpenerRef,testId:l?void 0:i,opened:this.state.opened},l||(h=>{const{opened:p}=h,b=g(h,zi);return o.createElement(Fi,d({},b,{disabled:n,opened:!!p,testId:i}),r)})))}render(){const{alignment:e,dropdownStyle:t,style:n,className:r,dropdownId:l}=this.props,i=this.getMenuItems();return o.createElement(ke,{id:l,scope:"action-menu-dropdown"},c=>o.createElement(Zt,{id:c,role:"menu",style:n,className:r,opener:this.renderOpener(i.length,c),alignment:e,open:this.state.opened,items:i,openerElement:this.openerElement,onOpenChanged:this.handleOpenChanged,dropdownStyle:[Oi.menuTopSpace,t]}))}}Pi.defaultProps={alignment:"left",disabled:!1};const Oi=v.StyleSheet.create({caret:{marginLeft:4},opener:{whiteSpace:"nowrap",userSelect:"none",overflow:"hidden",textOverflow:"ellipsis"},menuTopSpace:{top:-4}}),Bi=["children","disabled","error","id","isPlaceholder","light","open","testId","onOpenChanged"],Li=yt("button");class Yt extends o.Component{constructor(e){super(e),this.handleClick=t=>{const{open:n}=this.props;this.props.onOpenChanged(!n)},this.handleKeyDown=t=>{const n=t.key;(n==="Enter"||n===" ")&&(this.setState({pressed:!0}),t.preventDefault())},this.handleKeyUp=t=>{const n=t.key;(n==="Enter"||n===" ")&&(this.setState({pressed:!1}),this.handleClick(t))},this.state={pressed:!1}}render(){const e=this.props,{children:t,disabled:n,error:r,id:l,isPlaceholder:i,light:c,open:f,testId:h}=e,p=g(e,Bi),b=Di(c,i,r),x=c?n||r?"currentColor":a.white:n?a.offBlack32:a.offBlack64,C=[Ht.shared,b.default,n&&b.disabled,!n&&this.state.pressed&&b.pressed];return o.createElement(Li,d({},p,{"aria-disabled":n,"aria-expanded":f?"true":"false","aria-haspopup":"listbox","data-testid":h,id:l,style:C,type:"button",onClick:n?void 0:this.handleClick,onKeyDown:n?void 0:this.handleKeyDown,onKeyUp:n?void 0:this.handleKeyUp}),o.createElement(bt,{style:Ht.text},t||" "),o.createElement(St,{icon:dr,color:x,size:"small",style:Ht.caret,"aria-hidden":"true"}))}}Yt.defaultProps={disabled:!1,error:!1,light:!1,isPlaceholder:!1};const Ht=v.StyleSheet.create({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"space-between",color:a.offBlack,height:me,paddingLeft:m.medium_16,paddingRight:m.small_12,borderWidth:0,borderRadius:X.radius.medium_4,borderStyle:"solid",outline:"none",textDecoration:"none",boxSizing:"border-box",whiteSpace:"nowrap",touchAction:"manipulation"},text:{marginRight:m.xSmall_8,whiteSpace:"nowrap",userSelect:"none",overflow:"hidden",textOverflow:"ellipsis"},caret:{minWidth:16}}),at=m.medium_16-1,dt=m.small_12-1,ct={},Di=(s,e,t)=>{const n=`${s}-${e}-${t}`;if(ct[n])return ct[n];let r={};if(s){const l={borderColor:t?a.red:a.white,borderWidth:m.xxxxSmall_2,paddingLeft:at,paddingRight:dt},i={paddingLeft:at,paddingRight:dt,borderColor:t?a.red:a.fadedBlue,borderWidth:X.width.thin,color:t?a.offBlack64:e?ee(a.white32,a.blue):a.fadedBlue,backgroundColor:t?a.fadedRed:a.activeBlue};r={default:{background:t?a.fadedRed8:"transparent",color:t?a.offBlack64:e?a.white50:a.white,borderColor:t?a.red:a.white50,borderWidth:X.width.hairline,":hover:not([aria-disabled=true])":l,"@media not (hover: hover)":{":hover:not([aria-disabled=true])":{borderColor:t?a.red:a.white50,borderWidth:X.width.hairline,paddingLeft:m.medium_16,paddingRight:m.small_12}},":focus-visible:not([aria-disabled=true])":l,":active:not([aria-disabled=true])":i},disabled:{background:"transparent",borderColor:ee(a.white32,a.blue),color:ee(a.white32,a.blue),cursor:"not-allowed",":focus-visible":{boxShadow:`0 0 0 1px ${a.offBlack32}, 0 0 0 3px ${a.fadedBlue}`}},pressed:i}}else{const l={borderColor:t?a.red:a.blue,borderWidth:X.width.thin,paddingLeft:at,paddingRight:dt},i={background:t?a.fadedRed:a.fadedBlue,borderColor:t?a.red:a.activeBlue,borderWidth:X.width.thin,paddingLeft:at,paddingRight:dt};r={default:{background:t?a.fadedRed8:a.white,borderColor:t?a.red:a.offBlack50,borderWidth:X.width.hairline,color:e?a.offBlack64:a.offBlack,":hover:not([aria-disabled=true])":l,"@media not (hover: hover)":{":hover:not([aria-disabled=true])":{borderColor:t?a.red:a.offBlack50,borderWidth:X.width.hairline,paddingLeft:m.medium_16,paddingRight:m.small_12}},":focus-visible:not([aria-disabled=true])":l,":active:not([aria-disabled=true])":i},disabled:{background:a.offWhite,borderColor:a.offBlack16,color:a.offBlack64,cursor:"not-allowed",":focus-visible":{boxShadow:`0 0 0 1px ${a.white}, 0 0 0 3px ${a.offBlack32}`}},pressed:i}}return ct[n]=v.StyleSheet.create(r),ct[n]},Ni=["children","error","id","light","opener","placeholder","selectedValue","testId","alignment","autoFocus","dropdownStyle","enableTypeAhead","isFilterable","labels","onChange","onToggle","opened","style","className","aria-invalid","aria-required"];class pr extends o.Component{constructor(e){super(e),this.selectedIndex=void 0,this.handleOpenChanged=t=>{this.setState({open:t,searchText:""}),this.props.onToggle&&this.props.onToggle(t)},this.handleToggle=t=>{t!==this.props.selectedValue&&this.props.onChange(t),this.state.open&&this.state.openerElement&&this.state.openerElement.focus(),this.setState({open:!1}),this.props.onToggle&&this.props.onToggle(!1)},this.mapOptionItemsToDropdownItems=t=>{let n=0;return this.selectedIndex=0,t.map(r=>{const{selectedValue:l}=this.props,{disabled:i,value:c}=r.props,f=l===c;return f&&(this.selectedIndex=n),i||(n+=1),{component:r,focusable:!i,populatedProps:{onToggle:this.handleToggle,selected:f,variant:"check"}}})},this.handleSearchTextChanged=t=>{this.setState({searchText:t})},this.handleOpenerRef=t=>{const n=Ie.findDOMNode(t);this.setState({openerElement:n})},this.handleClick=t=>{this.handleOpenChanged(!this.state.open)},this.selectedIndex=0,this.state={open:!1,searchText:""}}static getDerivedStateFromProps(e,t){return{open:e.disabled?!1:typeof e.opened=="boolean"?e.opened:t.open}}filterChildren(e){const{searchText:t}=this.state,n=t.toLowerCase();return e.filter(({props:r})=>!t||Ae(r).toLowerCase().indexOf(n)>-1)}getMenuItems(e){const{isFilterable:t}=this.props;return this.mapOptionItemsToDropdownItems(t?this.filterChildren(e):e)}renderOpener(e,t){const n=this.props,{children:r,error:l,id:i,light:c,opener:f,placeholder:h,selectedValue:p,testId:b}=n,x=g(n,Ni),I=o.Children.toArray(r).find(S=>S.props.value===p),u=I?Ae(I.props):h;return o.createElement(ke,{id:i,scope:"single-select-opener"},S=>f?o.createElement(Ct,{id:S,"aria-controls":t,"aria-haspopup":"listbox",onClick:this.handleClick,disabled:e,ref:this.handleOpenerRef,text:u,opened:this.state.open},f):o.createElement(Yt,d({},x,{"aria-controls":t,disabled:e,id:S,error:l,isPlaceholder:!I,light:c,onOpenChanged:this.handleOpenChanged,open:this.state.open,ref:this.handleOpenerRef,testId:b}),u))}render(){const{alignment:e,autoFocus:t,children:n,className:r,dropdownStyle:l,enableTypeAhead:i,isFilterable:c,labels:f,light:h,style:p,"aria-invalid":b,"aria-required":x,disabled:C,dropdownId:I}=this.props,{searchText:u}=this.state,y=o.Children.toArray(n).filter(Boolean),S=y.filter(k=>!k.props.disabled).length,$=this.getMenuItems(y),w=S===0||C;return o.createElement(ke,{id:I,scope:"single-select-dropdown"},k=>o.createElement(Zt,{id:k,role:"listbox",selectionType:"single",alignment:e,autoFocus:t,enableTypeAhead:i,dropdownStyle:[c&&ur,cr,l],initialFocusedIndex:this.selectedIndex,items:$,light:h,onOpenChanged:this.handleOpenChanged,open:this.state.open,opener:this.renderOpener(w,k),openerElement:this.state.openerElement,style:p,className:r,isFilterable:c,onSearchTextChanged:c?this.handleSearchTextChanged:void 0,searchText:c?u:"",labels:f,"aria-invalid":b,"aria-required":x,disabled:w}))}}pr.defaultProps={alignment:"left",autoFocus:!0,disabled:!1,enableTypeAhead:!0,error:!1,light:!1,labels:{clearSearch:K.clearSearch,filter:K.filter,noResults:K.noResults,someResults:K.someSelected}};const Hi=["id","light","opener","testId","alignment","dropdownStyle","implicitAllEnabled","isFilterable","labels","onChange","onToggle","opened","selectedValues","shortcuts","style","className","aria-invalid","aria-required"];class mr extends o.Component{constructor(e){super(e),this.labels=void 0,this.handleOpenChanged=t=>{this.setState({open:t,searchText:"",lastSelectedValues:this.props.selectedValues}),this.props.onToggle&&this.props.onToggle(t)},this.handleToggle=t=>{const{onChange:n,selectedValues:r}=this.props;if(r.includes(t)){const l=r.indexOf(t),i=[...r.slice(0,l),...r.slice(l+1)];n(i)}else n([...r,t])},this.handleSelectAll=()=>{const{children:t,onChange:n}=this.props,l=o.Children.toArray(t).filter(i=>!!i&&!i.props.disabled).map(i=>i.props.value);n(l)},this.handleSelectNone=()=>{const{onChange:t}=this.props;t([])},this.mapOptionItemToDropdownItem=t=>{const{selectedValues:n}=this.props,{disabled:r,value:l}=t.props;return{component:t,focusable:!r,populatedProps:{onToggle:this.handleToggle,selected:n.includes(l),variant:"checkbox"}}},this.handleOpenerRef=t=>{const n=Ie.findDOMNode(t);this.setState({openerElement:n})},this.handleSearchTextChanged=t=>{this.setState({searchText:t})},this.handleClick=t=>{this.handleOpenChanged(!this.state.open)},this.state={open:!1,searchText:"",lastSelectedValues:[],labels:d({},K,e.labels)},this.labels=d({},K,e.labels)}static getDerivedStateFromProps(e,t){return{open:e.disabled?!1:typeof e.opened=="boolean"?e.opened:t.open}}componentDidUpdate(e){this.props.labels!==e.labels&&this.setState({labels:d({},this.state.labels,this.props.labels)})}getMenuText(e){const{implicitAllEnabled:t,selectedValues:n}=this.props,{noneSelected:r,someSelected:l,allSelected:i}=this.state.labels,c=e.filter(h=>!h.props.disabled).length,f=t?i:r;switch(n.length){case 0:return f;case 1:const h=e.find(p=>p.props.value===n[0]);if(h){const p=Ae(h==null?void 0:h.props);return p||l(1)}return f;case c:return i;default:return l(n.length)}}getShortcuts(e){const{selectedValues:t,shortcuts:n}=this.props,{selectAllLabel:r,selectNoneLabel:l}=this.state.labels;if(n&&!this.state.searchText){const i=e===t.length,c={component:o.createElement(Fe,{disabled:i,label:r(e),indent:!0,onClick:this.handleSelectAll}),focusable:!i,populatedProps:{}},f=t.length===0,h={component:o.createElement(Fe,{disabled:f,label:l,indent:!0,onClick:this.handleSelectNone}),focusable:!f,populatedProps:{}},p={component:o.createElement(ue,{key:"shortcuts-separator"}),focusable:!1,populatedProps:{}};return[c,h,p]}else return[]}getMenuItems(e){const{isFilterable:t}=this.props;if(!t)return e.map(this.mapOptionItemToDropdownItem);const{searchText:n,lastSelectedValues:r}=this.state,l=n.toLowerCase(),i=e.filter(({props:p})=>!n||Ae(p).toLowerCase().indexOf(l)>-1),c=[],f=[];for(const p of i)r.includes(p.props.value)?c.push(p):f.push(p);const h=c.map(this.mapOptionItemToDropdownItem);return c.length&&f.length&&h.push({component:o.createElement(ue,{key:"selected-separator"}),focusable:!1,populatedProps:{}}),[...h,...f.map(this.mapOptionItemToDropdownItem)]}renderOpener(e,t,n){const r=this.props,{id:l,light:i,opener:c,testId:f}=r,h=g(r,Hi),{noneSelected:p}=this.state.labels,b=this.getMenuText(e);return o.createElement(ke,{id:l,scope:"multi-select-opener"},C=>c?o.createElement(Ct,{id:C,"aria-controls":n,"aria-haspopup":"listbox",onClick:this.handleClick,disabled:t,ref:this.handleOpenerRef,text:b,opened:this.state.open},c):o.createElement(Yt,d({},h,{disabled:t,id:C,"aria-controls":n,isPlaceholder:b===p,light:i,onOpenChanged:this.handleOpenChanged,open:this.state.open,ref:this.handleOpenerRef,testId:f}),b))}render(){const{alignment:e,light:t,style:n,className:r,dropdownStyle:l,children:i,isFilterable:c,"aria-invalid":f,"aria-required":h,disabled:p,dropdownId:b}=this.props,{open:x,searchText:C}=this.state,{clearSearch:I,filter:u,noResults:y,someSelected:S}=this.state.labels,$=o.Children.toArray(i).filter(Boolean),w=$.filter(R=>!R.props.disabled).length,k=this.getMenuItems($),E=w===0||p;return o.createElement(ke,{id:b,scope:"multi-select-dropdown"},R=>o.createElement(Zt,{id:R,role:"listbox",alignment:e,dropdownStyle:[c&&ur,cr,l],isFilterable:c,items:[...this.getShortcuts(w),...k],light:t,onOpenChanged:this.handleOpenChanged,open:x,opener:this.renderOpener($,E,R),openerElement:this.state.openerElement,selectionType:"multi",style:n,className:r,onSearchTextChanged:c?this.handleSearchTextChanged:void 0,searchText:c?C:"",labels:{clearSearch:I,filter:u,noResults:y,someResults:S},"aria-invalid":f,"aria-required":h,disabled:E}))}}mr.defaultProps={alignment:"left",disabled:!1,error:!1,light:!1,shortcuts:!1,selectedValues:[]};v.StyleSheet.create({listbox:{outline:"none"},disabled:{color:a.offBlack64}});const Mi=s=>{const{strings:e}=kr(),t=h=>{const{choices:p,onChange:b}=s;b(p.map(x=>h.includes(x.content)))},n=h=>h.map(({content:p})=>et(ve,{value:p,label:et(Rr,{content:p,strings:e,inline:!0})},p)),r=s.choices.filter(h=>h.checked).map(h=>h.content),{opener:l,onToggle:i,disabled:c}=s,f={style:{zIndex:"unset"},children:n(s.choices),opener:l,onToggle:i,disabled:c};return s.multipleSelect?et(mr,{...f,selectedValues:r,onChange:h=>t(h)}):et(pr,{...f,selectedValue:r[0],onChange:h=>t([h]),placeholder:s.choices[0].content})};Mi.__docgenInfo={description:"",methods:[],displayName:"AnswerChoices",props:{choices:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ +import{j as et}from"./jsx-runtime-FVsy8kgq.js";import{a as g,_ as d,b as yt,V as Ce,I as ke}from"./index-6h5t6F0w.js";import{r as o}from"./index-TT1qJ6UJ.js";import{l as v}from"./index-awljIyHI.js";import{C as gr,a as yr}from"./index-o3wWn3Y5.js";import{s as m,c as a,m as ee,b as X,a as br,f as Sr}from"./index-deFLJwr4.js";import{a as bt,b as Qt,L as xr}from"./index-h_CiYGGb.js";import{P as St}from"./index-xuPsLuPk.js";import{c as Gt,m as Cr}from"./minus-bold-ONmDo3Ve.js";import{r as Ie}from"./index-7vsPyIck.js";import{I as vr,x as Ir}from"./index-rfN0X25E.js";import{w as kn}from"./index-CkAxGj88.js";import{P as wr,d as $r}from"./Popper-kGnKOid7.js";import{m as Er}from"./index-YCTzZMik.js";import{u as kr}from"./i18n-context-hxuRe8oU.js";import{R as Rr}from"./renderer-hPmI_Chp.js";function Rn(s){const e=[];if(s)if(Array.isArray(s))for(const t of s)e.push(...Rn(t));else e.push(s);else return e;return e}function _n(s){const e=[],t=[];if(!s)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;Rn(s).forEach(l=>{const i=l._definition;if(i!=null)if(n){const c={};for(const[f,h]of Object.entries(i))c[f.replace(/-[a-z]/g,p=>p[1].toUpperCase())]=h;t.push(c)}else e.push(l);else t.push(l)});const r=Object.assign({},...t);if(t.length>0&&!n){const l=v.StyleSheet.create({inlineStyles:r});e.push(l.inlineStyles)}return{style:n?r:{},className:v.css(...e)}}const _r=["children","style","tag","testId"],Fr=/^h[1-6]$/,Jt=v.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}}),B=o.forwardRef(function(e,t){let{children:n,style:r,tag:l="span",testId:i}=e,c=g(e,_r);const f=Fr.test(l),h=_n([Jt.text,f&&Jt.header,r]),p=c.className?[c.className,h.className].join(" "):h.className;return o.createElement(l,d({},c,{style:h.style,className:p,"data-testid":i,ref:t}),n)}),Tr=["className","style"];function qe(s,e){return o.forwardRef((t,n)=>{const{className:r,style:l}=t,i=g(t,Tr),c=typeof s=="string"?zr[s]:null,{className:f,style:h}=_n([c,e,l]);return o.createElement(s,d({},i,{ref:n,className:[f,r].filter(Boolean).join(" "),style:h}))})}const zr=v.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),Pr=["testId","tag"],Ve=v.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}}),Or=qe("div",Ve.default),Br=qe("article",Ve.default),Lr=qe("aside",Ve.default),Dr=qe("nav",Ve.default),Nr=qe("section",Ve.default),Re=o.forwardRef(function(e,t){const{testId:n,tag:r="div"}=e,l=g(e,Pr),i=d({},l,{"data-testid":n});switch(r){case"article":return o.createElement(Br,d({},i,{ref:t}));case"aside":return o.createElement(Lr,d({},i,{ref:t}));case"nav":return o.createElement(Dr,d({},i,{ref:t}));case"section":return o.createElement(Nr,d({},i,{ref:t}));case"div":return o.createElement(Or,d({},i,{ref:t}));default:throw Error(`${r} is not an allowed value for the 'tag' prop`)}});let be=function(s){return s.Root="root",s.Initial="initial",s.Standard="standard",s}({});const ut=o.createContext(be.Root);ut.displayName="RenderStateContext";let Hr=class extends o.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,fallback:n}=this.props;return this._isTheRootComponent=!0,e?o.createElement(ut.Provider,{value:be.Standard},t()):n?o.createElement(ut.Provider,{value:be.Initial},n()):null}_maybeRender(e){const{children:t,fallback:n}=this.props;switch(e){case be.Root:return this._renderAsRootComponent();case be.Initial:return n?n():null;case be.Standard:return t()}{var r;return console.log(`We got a render state we don't understand: "${(r=JSON.stringify(e))!=null?r:""}"`),this._maybeRender(be.Root)}}render(){return o.createElement(ut.Consumer,null,e=>this._maybeRender(e))}},Fn=class Tn{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const r=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${r}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${Tn._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}};Fn._factoryUniquenessCounter=0;let Mt=class{get(e){return e}};Mt.Default=new Mt;var Mr=Mt.Default;let Wr=class extends o.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(Mr):null:(this._idFactory||(this._idFactory=new Fn(r)),t(this._idFactory))}render(){return o.createElement(Hr,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}},Ar=class zn extends o.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(zn.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():o.createElement(Wr,{scope:t,mockOnFirstRender:!0},n=>this.renderChildren(n))}};Ar.defaultId="wb-id";const Z=400,Be=700,qr=900,Rt="@media (max-width: 1023px)",_t="@media (min-width: 1024px)",z={display:"block"},A='Lato, "Noto Sans", sans-serif',en='"Noto Serif", serif',Vr="Inconsolata, monospace",L=v.StyleSheet.create({Title:d({},z,{fontFamily:A,fontWeight:qr,[_t]:{fontSize:36,lineHeight:"40px"},[Rt]:{fontSize:28,lineHeight:"32px"}}),Tagline:d({},z,{fontFamily:A,fontWeight:Z,fontSize:20,lineHeight:"24px"}),HeadingLarge:d({},z,{fontFamily:A,fontWeight:Be,[_t]:{fontSize:28,lineHeight:"32px"},[Rt]:{fontSize:24,lineHeight:"28px"}}),HeadingMedium:d({},z,{fontFamily:A,fontWeight:Be,[_t]:{fontSize:24,lineHeight:"28px"},[Rt]:{fontSize:22,lineHeight:"26px"}}),HeadingSmall:d({},z,{fontFamily:A,fontWeight:Be,fontSize:20,lineHeight:"24px"}),HeadingXSmall:d({},z,{fontFamily:A,fontWeight:Be,fontSize:12,lineHeight:"16px",letterSpacing:.6,textTransform:"uppercase"}),BodySerifBlock:d({},z,{fontFamily:en,fontWeight:Z,fontSize:22,lineHeight:"28px"}),BodySerif:d({},z,{fontFamily:en,fontWeight:Z,fontSize:18,lineHeight:"22px"}),BodyMonospace:d({},z,{fontFamily:Vr,fontWeight:Z,fontSize:17,lineHeight:"22px"}),Body:d({},z,{fontFamily:A,fontWeight:Z,fontSize:16,lineHeight:"22px"}),LabelLarge:d({},z,{fontFamily:A,fontWeight:Be,fontSize:16,lineHeight:"20px"}),LabelMedium:d({},z,{fontFamily:A,fontWeight:Z,fontSize:16,lineHeight:"20px"}),LabelSmall:d({},z,{fontFamily:A,fontWeight:Z,fontSize:14,lineHeight:"18px"}),LabelXSmall:d({},z,{fontFamily:A,fontWeight:Z,fontSize:12,lineHeight:"16px"}),Caption:d({},z,{fontFamily:A,fontWeight:Z,fontSize:14,lineHeight:"20px"}),Footnote:d({},z,{fontFamily:A,fontWeight:Z,fontSize:12,lineHeight:"18px"})}),Ur=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h1"}=e,i=g(e,Ur);return o.createElement(B,d({},i,{tag:l,style:[L.Title,n],ref:t}),r)});const Kr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h2"}=e,i=g(e,Kr);return o.createElement(B,d({},i,{tag:l,style:[L.HeadingLarge,n],ref:t}),r)});const jr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h3"}=e,i=g(e,jr);return o.createElement(B,d({},i,{tag:l,style:[L.HeadingMedium,n],ref:t}),r)});const Xr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h4"}=e,i=g(e,Xr);return o.createElement(B,d({},i,{tag:l,style:[L.HeadingSmall,n],ref:t}),r)});const Gr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h4"}=e,i=g(e,Gr);return o.createElement(B,d({},i,{tag:l,style:[L.HeadingXSmall,n],ref:t}),r)});const Zr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Zr);return o.createElement(B,d({},i,{tag:l,style:[L.BodySerifBlock,n],ref:t}),r)});const Yr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Yr);return o.createElement(B,d({},i,{tag:l,style:[L.BodySerif,n],ref:t}),r)});const Qr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Qr);return o.createElement(B,d({},i,{tag:l,style:[L.BodyMonospace,n],ref:t}),r)});const Jr=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Jr);return o.createElement(B,d({},i,{tag:l,style:[L.Body,n],ref:t}),r)});const eo=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,eo);return o.createElement(B,d({},i,{tag:l,style:[L.LabelLarge,n],ref:t}),r)});const to=["style","children","tag"],Pn=o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,to);return o.createElement(B,d({},i,{tag:l,style:[L.LabelMedium,n],ref:t}),r)}),no=["style","children","tag"],ro=o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,no);return o.createElement(B,d({},i,{tag:l,style:[L.LabelSmall,n],ref:t}),r)}),oo=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,oo);return o.createElement(B,d({},i,{tag:l,style:[L.LabelXSmall,n],ref:t}),r)});const lo=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,lo);return o.createElement(B,d({},i,{tag:l,style:[L.Tagline,n],ref:t}),r)});const so=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,so);return o.createElement(B,d({},i,{tag:l,style:[L.Caption,n],ref:t}),r)});const io=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,io);return o.createElement(B,d({},i,{tag:l,style:[L.Footnote,n],ref:t}),r)});const tn=m.large_24,ao={small:{query:"(max-width: 767px)",totalColumns:4,gutterWidth:m.medium_16,marginWidth:m.medium_16},medium:{query:"(min-width: 768px) and (max-width: 1023px)",totalColumns:8,gutterWidth:m.xLarge_32,marginWidth:m.large_24},large:{query:"(min-width: 1024px)",totalColumns:12,gutterWidth:m.xLarge_32,marginWidth:tn,maxWidth:1120+tn*2}},co={ssrSize:"large",mediaSpec:ao},uo=o.createContext(co);uo.displayName="MediaLayoutContext";v.StyleSheet.create({grow:{flexGrow:1}});let gt=class extends o.Component{render(){const{size:e,style:t}=this.props;return o.createElement(Re,{"aria-hidden":"true",style:[ho(e),t]})}};const ho=s=>({width:s,MsFlexBasis:s,MsFlexPreferredSize:s,WebkitFlexBasis:s,flexBasis:s,flexShrink:0}),G={cellMinHeight:m.xxLarge_48,cellPadding:{paddingVertical:m.small_12,paddingHorizontal:m.medium_16},detailCellPadding:{paddingVertical:m.medium_16,paddingHorizontal:m.medium_16},accessoryHorizontalSpacing:m.medium_16},fo=s=>{switch(s){case"inset":return[Ft.horizontalRule,Ft.horizontalRuleInset];case"full-width":return Ft.horizontalRule;case"none":return{}}},Ft=v.StyleSheet.create({horizontalRule:{position:"relative",":after":{width:"100%",content:"''",position:"absolute",bottom:0,right:0,height:m.xxxxSmall_2,boxShadow:`inset 0px -1px 0px ${a.offBlack8}`}},horizontalRuleInset:{":after":{width:`calc(100% - ${G.cellPadding.paddingHorizontal}px)`}}}),po=({leftAccessory:s,leftAccessoryStyle:e,disabled:t})=>s?o.createElement(o.Fragment,null,o.createElement(Re,{style:[W.accessory,t&&W.accessoryDisabled,d({},e)]},s),o.createElement(gt,{size:G.accessoryHorizontalSpacing})):null,mo=({rightAccessory:s,rightAccessoryStyle:e,active:t,disabled:n})=>s?o.createElement(o.Fragment,null,o.createElement(gt,{size:G.accessoryHorizontalSpacing}),o.createElement(Re,{style:[W.accessory,W.accessoryRight,n&&W.accessoryDisabled,d({},e),t&&W.accessoryActive]},s)):null;function nn(s){const{active:e,children:t,disabled:n,horizontalRule:r="inset",contentStyle:l=void 0,leftAccessory:i=void 0,leftAccessoryStyle:c=void 0,rightAccessory:f=void 0,rightAccessoryStyle:h=void 0,style:p,testId:b,innerStyle:x}=s,C=fo(r);return o.createElement(Re,{style:[W.innerWrapper,x,p,C]},o.createElement(po,{leftAccessory:i,leftAccessoryStyle:c,disabled:n}),o.createElement(Re,{style:[W.content,l],testId:b},t),o.createElement(mo,{rightAccessory:f,rightAccessoryStyle:h,active:e,disabled:n}))}const On=s=>{const{active:e,disabled:t,href:n,onClick:r,"aria-label":l,"aria-selected":i,"aria-checked":c,target:f,role:h,rootStyle:p}=s;return r||n?o.createElement(gr,{disabled:t,onClick:r,href:n,hideDefaultFocusRing:!0,"aria-label":l||void 0,"aria-selected":i||void 0,"aria-checked":c,role:h,target:f,style:[W.wrapper,W.clickable,p,e&&W.active,t&&W.disabled],"aria-current":e?"true":void 0},()=>o.createElement(nn,s)):o.createElement(Re,{style:[W.wrapper,p,e&&W.active],"aria-current":e?"true":void 0,role:h},o.createElement(nn,s))},W=v.StyleSheet.create({wrapper:{background:a.white,color:a.offBlack,display:"flex",minHeight:G.cellMinHeight,textAlign:"left",width:"100%"},innerWrapper:{minHeight:G.cellMinHeight,padding:`${G.cellPadding.paddingVertical}px ${G.cellPadding.paddingHorizontal}px`,flexDirection:"row",flex:1,":focus-visible":{padding:`${G.cellPadding.paddingVertical-2}px ${G.cellPadding.paddingHorizontal-2}px`}},content:{alignSelf:"center",flex:1,overflowWrap:"break-word"},accessory:{minWidth:"auto",alignItems:"center",alignSelf:"center"},accessoryRight:{color:a.offBlack64},clickable:{outline:"none",":hover[aria-disabled=true]":{cursor:"not-allowed"},":focus-visible":{borderRadius:m.xxxSmall_4,overflow:"hidden",position:"relative"},":focus-visible:after":{content:"''",position:"absolute",top:0,left:0,zIndex:1,width:`calc(100% - ${m.xxxSmall_4}px)`,height:`calc(100% - ${m.xxxSmall_4}px)`,border:`${m.xxxxSmall_2}px solid ${a.blue}`,borderRadius:m.xxxSmall_4},":hover[aria-disabled=false]":{background:a.offBlack8},":active[aria-disabled=false]":{background:a.offBlack16}},active:{background:a.fadedBlue8,color:a.blue,":hover[aria-disabled=false]":{background:a.fadedBlue16},":active[aria-disabled=false]":{background:a.fadedBlue24}},disabled:{color:a.offBlack32,":focus-visible":{outline:"none"}},accessoryActive:{color:a.blue},accessoryDisabled:{color:a.offBlack,opacity:.32}}),go=["title"],yo=function(e){const{title:t}=e,n=g(e,go);return o.createElement(On,n,typeof t=="string"?o.createElement(Pn,null,t):t)},bo=["title","subtitle1","subtitle2"],rn=({subtitle:s,disabled:e})=>s?typeof s=="string"?o.createElement(ro,{style:!e&&Bn.subtitle},s):s:null,So=function(e){const{title:t,subtitle1:n,subtitle2:r}=e,l=g(e,bo);return o.createElement(On,d({},l,{innerStyle:Bn.innerWrapper}),o.createElement(rn,{subtitle:n,disabled:l.disabled}),n&&o.createElement(gt,{size:m.xxxxSmall_2}),typeof t=="string"?o.createElement(Pn,null,t):t,r&&o.createElement(gt,{size:m.xxxxSmall_2}),o.createElement(rn,{subtitle:r,disabled:l.disabled}))},Bn=v.StyleSheet.create({subtitle:{color:a.offBlack64},innerWrapper:{padding:`${G.detailCellPadding.paddingVertical}px ${G.detailCellPadding.paddingHorizontal}px`}});function Ln(s){const e=[];if(s)if(Array.isArray(s))for(const t of s)e.push(...Ln(t));else e.push(s);else return e;return e}function Dn(s){const e=[],t=[];if(!s)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;Ln(s).forEach(l=>{const i=l._definition;if(i!=null)if(n){const c={};for(const[f,h]of Object.entries(i))c[f.replace(/-[a-z]/g,p=>p[1].toUpperCase())]=h;t.push(c)}else e.push(l);else t.push(l)});const r=Object.assign({},...t);if(t.length>0&&!n){const l=v.StyleSheet.create({inlineStyles:r});e.push(l.inlineStyles)}return{style:n?r:{},className:v.css(...e)}}const xo=["children","style","tag","testId"],Co=/^h[1-6]$/,on=v.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}});o.forwardRef(function(e,t){let{children:n,style:r,tag:l="span",testId:i}=e,c=g(e,xo);const f=Co.test(l),h=Dn([on.text,f&&on.header,r]),p=c.className?[c.className,h.className].join(" "):h.className;return o.createElement(l,d({},c,{style:h.style,className:p,"data-testid":i,ref:t}),n)});const vo=["className","style"];function Ue(s,e){return o.forwardRef((t,n)=>{const{className:r,style:l}=t,i=g(t,vo),c=typeof s=="string"?Io[s]:null,{className:f,style:h}=Dn([c,e,l]);return o.createElement(s,d({},i,{ref:n,className:[f,r].filter(Boolean).join(" "),style:h}))})}const Io=v.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),wo=["testId","tag"],Ke=v.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}}),$o=Ue("div",Ke.default),Eo=Ue("article",Ke.default),ko=Ue("aside",Ke.default),Ro=Ue("nav",Ke.default),_o=Ue("section",Ke.default),Fo=o.forwardRef(function(e,t){const{testId:n,tag:r="div"}=e,l=g(e,wo),i=d({},l,{"data-testid":n});switch(r){case"article":return o.createElement(Eo,d({},i,{ref:t}));case"aside":return o.createElement(ko,d({},i,{ref:t}));case"nav":return o.createElement(Ro,d({},i,{ref:t}));case"section":return o.createElement(_o,d({},i,{ref:t}));case"div":return o.createElement($o,d({},i,{ref:t}));default:throw Error(`${r} is not an allowed value for the 'tag' prop`)}});let Se=function(s){return s.Root="root",s.Initial="initial",s.Standard="standard",s}({});const ht=o.createContext(Se.Root);ht.displayName="RenderStateContext";let To=class extends o.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,fallback:n}=this.props;return this._isTheRootComponent=!0,e?o.createElement(ht.Provider,{value:Se.Standard},t()):n?o.createElement(ht.Provider,{value:Se.Initial},n()):null}_maybeRender(e){const{children:t,fallback:n}=this.props;switch(e){case Se.Root:return this._renderAsRootComponent();case Se.Initial:return n?n():null;case Se.Standard:return t()}{var r;return console.log(`We got a render state we don't understand: "${(r=JSON.stringify(e))!=null?r:""}"`),this._maybeRender(Se.Root)}}render(){return o.createElement(ht.Consumer,null,e=>this._maybeRender(e))}},Nn=class Hn{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const r=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${r}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${Hn._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}};Nn._factoryUniquenessCounter=0;let Wt=class{get(e){return e}};Wt.Default=new Wt;var zo=Wt.Default;let Po=class extends o.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(zo):null:(this._idFactory||(this._idFactory=new Nn(r)),t(this._idFactory))}render(){return o.createElement(To,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}},Oo=class Mn extends o.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(Mn.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():o.createElement(Po,{scope:t,mockOnFirstRender:!0},n=>this.renderChildren(n))}};Oo.defaultId="wb-id";const ln=m.large_24,Bo={small:{query:"(max-width: 767px)",totalColumns:4,gutterWidth:m.medium_16,marginWidth:m.medium_16},medium:{query:"(min-width: 768px) and (max-width: 1023px)",totalColumns:8,gutterWidth:m.xLarge_32,marginWidth:m.large_24},large:{query:"(min-width: 1024px)",totalColumns:12,gutterWidth:m.xLarge_32,marginWidth:ln,maxWidth:1120+ln*2}},Lo={ssrSize:"large",mediaSpec:Bo},Do=o.createContext(Lo);Do.displayName="MediaLayoutContext";v.StyleSheet.create({grow:{flexGrow:1}});class de extends o.Component{render(){const{size:e,style:t}=this.props;return o.createElement(Fo,{"aria-hidden":"true",style:[No(e),t]})}}const No=s=>({width:s,MsFlexBasis:s,MsFlexPreferredSize:s,WebkitFlexBasis:s,flexBasis:s,flexShrink:0}),Ho=""+new URL("magnifying-glass-IX5mxYeF.svg",import.meta.url).href;function Wn(s){const e=[];if(s)if(Array.isArray(s))for(const t of s)e.push(...Wn(t));else e.push(s);else return e;return e}function An(s){const e=[],t=[];if(!s)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;Wn(s).forEach(l=>{const i=l._definition;if(i!=null)if(n){const c={};for(const[f,h]of Object.entries(i))c[f.replace(/-[a-z]/g,p=>p[1].toUpperCase())]=h;t.push(c)}else e.push(l);else t.push(l)});const r=Object.assign({},...t);if(t.length>0&&!n){const l=v.StyleSheet.create({inlineStyles:r});e.push(l.inlineStyles)}return{style:n?r:{},className:v.css(...e)}}const Mo=["children","style","tag","testId"],Wo=/^h[1-6]$/,sn=v.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}}),D=o.forwardRef(function(e,t){let{children:n,style:r,tag:l="span",testId:i}=e,c=g(e,Mo);const f=Wo.test(l),h=An([sn.text,f&&sn.header,r]),p=c.className?[c.className,h.className].join(" "):h.className;return o.createElement(l,d({},c,{style:h.style,className:p,"data-testid":i,ref:t}),n)}),Ao=["className","style"];function Te(s,e){return o.forwardRef((t,n)=>{const{className:r,style:l}=t,i=g(t,Ao),c=typeof s=="string"?qo[s]:null,{className:f,style:h}=An([c,e,l]);return o.createElement(s,d({},i,{ref:n,className:[f,r].filter(Boolean).join(" "),style:h}))})}const qo=v.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),Vo=["testId","tag"],je=v.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}}),Uo=Te("div",je.default),Ko=Te("article",je.default),jo=Te("aside",je.default),Xo=Te("nav",je.default),Go=Te("section",je.default),Zo=o.forwardRef(function(e,t){const{testId:n,tag:r="div"}=e,l=g(e,Vo),i=d({},l,{"data-testid":n});switch(r){case"article":return o.createElement(Ko,d({},i,{ref:t}));case"aside":return o.createElement(jo,d({},i,{ref:t}));case"nav":return o.createElement(Xo,d({},i,{ref:t}));case"section":return o.createElement(Go,d({},i,{ref:t}));case"div":return o.createElement(Uo,d({},i,{ref:t}));default:throw Error(`${r} is not an allowed value for the 'tag' prop`)}});let xe=function(s){return s.Root="root",s.Initial="initial",s.Standard="standard",s}({});const ft=o.createContext(xe.Root);ft.displayName="RenderStateContext";let Yo=class extends o.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,fallback:n}=this.props;return this._isTheRootComponent=!0,e?o.createElement(ft.Provider,{value:xe.Standard},t()):n?o.createElement(ft.Provider,{value:xe.Initial},n()):null}_maybeRender(e){const{children:t,fallback:n}=this.props;switch(e){case xe.Root:return this._renderAsRootComponent();case xe.Initial:return n?n():null;case xe.Standard:return t()}{var r;return console.log(`We got a render state we don't understand: "${(r=JSON.stringify(e))!=null?r:""}"`),this._maybeRender(xe.Root)}}render(){return o.createElement(ft.Consumer,null,e=>this._maybeRender(e))}},qn=class Vn{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const r=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${r}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${Vn._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}};qn._factoryUniquenessCounter=0;let At=class{get(e){return e}};At.Default=new At;var Qo=At.Default;let Jo=class extends o.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(Qo):null:(this._idFactory||(this._idFactory=new qn(r)),t(this._idFactory))}render(){return o.createElement(Yo,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}},Un=class Kn extends o.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(Kn.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():o.createElement(Jo,{scope:t,mockOnFirstRender:!0},n=>this.renderChildren(n))}};Un.defaultId="wb-id";const Y=400,Le=700,el=900,Tt="@media (max-width: 1023px)",zt="@media (min-width: 1024px)",P={display:"block"},q='Lato, "Noto Sans", sans-serif',an='"Noto Serif", serif',tl="Inconsolata, monospace",T=v.StyleSheet.create({Title:d({},P,{fontFamily:q,fontWeight:el,[zt]:{fontSize:36,lineHeight:"40px"},[Tt]:{fontSize:28,lineHeight:"32px"}}),Tagline:d({},P,{fontFamily:q,fontWeight:Y,fontSize:20,lineHeight:"24px"}),HeadingLarge:d({},P,{fontFamily:q,fontWeight:Le,[zt]:{fontSize:28,lineHeight:"32px"},[Tt]:{fontSize:24,lineHeight:"28px"}}),HeadingMedium:d({},P,{fontFamily:q,fontWeight:Le,[zt]:{fontSize:24,lineHeight:"28px"},[Tt]:{fontSize:22,lineHeight:"26px"}}),HeadingSmall:d({},P,{fontFamily:q,fontWeight:Le,fontSize:20,lineHeight:"24px"}),HeadingXSmall:d({},P,{fontFamily:q,fontWeight:Le,fontSize:12,lineHeight:"16px",letterSpacing:.6,textTransform:"uppercase"}),BodySerifBlock:d({},P,{fontFamily:an,fontWeight:Y,fontSize:22,lineHeight:"28px"}),BodySerif:d({},P,{fontFamily:an,fontWeight:Y,fontSize:18,lineHeight:"22px"}),BodyMonospace:d({},P,{fontFamily:tl,fontWeight:Y,fontSize:17,lineHeight:"22px"}),Body:d({},P,{fontFamily:q,fontWeight:Y,fontSize:16,lineHeight:"22px"}),LabelLarge:d({},P,{fontFamily:q,fontWeight:Le,fontSize:16,lineHeight:"20px"}),LabelMedium:d({},P,{fontFamily:q,fontWeight:Y,fontSize:16,lineHeight:"20px"}),LabelSmall:d({},P,{fontFamily:q,fontWeight:Y,fontSize:14,lineHeight:"18px"}),LabelXSmall:d({},P,{fontFamily:q,fontWeight:Y,fontSize:12,lineHeight:"16px"}),Caption:d({},P,{fontFamily:q,fontWeight:Y,fontSize:14,lineHeight:"20px"}),Footnote:d({},P,{fontFamily:q,fontWeight:Y,fontSize:12,lineHeight:"18px"})}),nl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h1"}=e,i=g(e,nl);return o.createElement(D,d({},i,{tag:l,style:[T.Title,n],ref:t}),r)});const rl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h2"}=e,i=g(e,rl);return o.createElement(D,d({},i,{tag:l,style:[T.HeadingLarge,n],ref:t}),r)});const ol=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h3"}=e,i=g(e,ol);return o.createElement(D,d({},i,{tag:l,style:[T.HeadingMedium,n],ref:t}),r)});const ll=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h4"}=e,i=g(e,ll);return o.createElement(D,d({},i,{tag:l,style:[T.HeadingSmall,n],ref:t}),r)});const sl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h4"}=e,i=g(e,sl);return o.createElement(D,d({},i,{tag:l,style:[T.HeadingXSmall,n],ref:t}),r)});const il=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,il);return o.createElement(D,d({},i,{tag:l,style:[T.BodySerifBlock,n],ref:t}),r)});const al=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,al);return o.createElement(D,d({},i,{tag:l,style:[T.BodySerif,n],ref:t}),r)});const dl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,dl);return o.createElement(D,d({},i,{tag:l,style:[T.BodyMonospace,n],ref:t}),r)});const cl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,cl);return o.createElement(D,d({},i,{tag:l,style:[T.Body,n],ref:t}),r)});const ul=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,ul);return o.createElement(D,d({},i,{tag:l,style:[T.LabelLarge,n],ref:t}),r)});const hl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,hl);return o.createElement(D,d({},i,{tag:l,style:[T.LabelMedium,n],ref:t}),r)});const fl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,fl);return o.createElement(D,d({},i,{tag:l,style:[T.LabelSmall,n],ref:t}),r)});const pl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,pl);return o.createElement(D,d({},i,{tag:l,style:[T.LabelXSmall,n],ref:t}),r)});const ml=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,ml);return o.createElement(D,d({},i,{tag:l,style:[T.Tagline,n],ref:t}),r)});const gl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,gl);return o.createElement(D,d({},i,{tag:l,style:[T.Caption,n],ref:t}),r)});const yl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,yl);return o.createElement(D,d({},i,{tag:l,style:[T.Footnote,n],ref:t}),r)});function jn(s){const e=[];if(s)if(Array.isArray(s))for(const t of s)e.push(...jn(t));else e.push(s);else return e;return e}function Xn(s){const e=[],t=[];if(!s)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;jn(s).forEach(l=>{const i=l._definition;if(i!=null)if(n){const c={};for(const[f,h]of Object.entries(i))c[f.replace(/-[a-z]/g,p=>p[1].toUpperCase())]=h;t.push(c)}else e.push(l);else t.push(l)});const r=Object.assign({},...t);if(t.length>0&&!n){const l=v.StyleSheet.create({inlineStyles:r});e.push(l.inlineStyles)}return{style:n?r:{},className:v.css(...e)}}const bl=["children","style","tag","testId"],Sl=/^h[1-6]$/,dn=v.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}}),N=o.forwardRef(function(e,t){let{children:n,style:r,tag:l="span",testId:i}=e,c=g(e,bl);const f=Sl.test(l),h=Xn([dn.text,f&&dn.header,r]),p=c.className?[c.className,h.className].join(" "):h.className;return o.createElement(l,d({},c,{style:h.style,className:p,"data-testid":i,ref:t}),n)}),xl=["className","style"];function H(s,e){return o.forwardRef((t,n)=>{const{className:r,style:l}=t,i=g(t,xl),c=typeof s=="string"?Cl[s]:null,{className:f,style:h}=Xn([c,e,l]);return o.createElement(s,d({},i,{ref:n,className:[f,r].filter(Boolean).join(" "),style:h}))})}const Cl=v.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),vl=["testId","tag"],Xe=v.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}}),Il=H("div",Xe.default),wl=H("article",Xe.default),$l=H("aside",Xe.default),El=H("nav",Xe.default),kl=H("section",Xe.default),_e=o.forwardRef(function(e,t){const{testId:n,tag:r="div"}=e,l=g(e,vl),i=d({},l,{"data-testid":n});switch(r){case"article":return o.createElement(wl,d({},i,{ref:t}));case"aside":return o.createElement($l,d({},i,{ref:t}));case"nav":return o.createElement(El,d({},i,{ref:t}));case"section":return o.createElement(kl,d({},i,{ref:t}));case"div":return o.createElement(Il,d({},i,{ref:t}));default:throw Error(`${r} is not an allowed value for the 'tag' prop`)}});let ie=function(s){return s.Root="root",s.Initial="initial",s.Standard="standard",s}({});const We=o.createContext(ie.Root);We.displayName="RenderStateContext";class Rl extends o.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,fallback:n}=this.props;return this._isTheRootComponent=!0,e?o.createElement(We.Provider,{value:ie.Standard},t()):n?o.createElement(We.Provider,{value:ie.Initial},n()):null}_maybeRender(e){const{children:t,fallback:n}=this.props;switch(e){case ie.Root:return this._renderAsRootComponent();case ie.Initial:return n?n():null;case ie.Standard:return t()}{var r;return console.log(`We got a render state we don't understand: "${(r=JSON.stringify(e))!=null?r:""}"`),this._maybeRender(ie.Root)}}render(){return o.createElement(We.Consumer,null,e=>this._maybeRender(e))}}class Ge{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const r=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${r}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${Ge._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}}Ge._factoryUniquenessCounter=0;class qt{get(e){return e}}qt.Default=new qt;var Gn=qt.Default;class Zn extends o.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(Gn):null:(this._idFactory||(this._idFactory=new Ge(r)),t(this._idFactory))}render(){return o.createElement(Rl,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}}class Ze extends o.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(Ze.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():o.createElement(Zn,{scope:t,mockOnFirstRender:!0},n=>this.renderChildren(n))}}Ze.defaultId="wb-id";const _l=()=>o.useContext(We),Fl=s=>{const e=_l(),t=o.useRef(null);if(e===ie.Root)throw new Error("Components using useUniqueIdWithMock() should be descendants of ");return e===ie.Initial?Gn:(t.current||(t.current=new Ge(s)),t.current)},Tl=s=>{o.useEffect(s,[])},Q=400,De=700,zl=900,Pt="@media (max-width: 1023px)",Ot="@media (min-width: 1024px)",O={display:"block"},V='Lato, "Noto Sans", sans-serif',cn='"Noto Serif", serif',Pl="Inconsolata, monospace",F=v.StyleSheet.create({Title:d({},O,{fontFamily:V,fontWeight:zl,[Ot]:{fontSize:36,lineHeight:"40px"},[Pt]:{fontSize:28,lineHeight:"32px"}}),Tagline:d({},O,{fontFamily:V,fontWeight:Q,fontSize:20,lineHeight:"24px"}),HeadingLarge:d({},O,{fontFamily:V,fontWeight:De,[Ot]:{fontSize:28,lineHeight:"32px"},[Pt]:{fontSize:24,lineHeight:"28px"}}),HeadingMedium:d({},O,{fontFamily:V,fontWeight:De,[Ot]:{fontSize:24,lineHeight:"28px"},[Pt]:{fontSize:22,lineHeight:"26px"}}),HeadingSmall:d({},O,{fontFamily:V,fontWeight:De,fontSize:20,lineHeight:"24px"}),HeadingXSmall:d({},O,{fontFamily:V,fontWeight:De,fontSize:12,lineHeight:"16px",letterSpacing:.6,textTransform:"uppercase"}),BodySerifBlock:d({},O,{fontFamily:cn,fontWeight:Q,fontSize:22,lineHeight:"28px"}),BodySerif:d({},O,{fontFamily:cn,fontWeight:Q,fontSize:18,lineHeight:"22px"}),BodyMonospace:d({},O,{fontFamily:Pl,fontWeight:Q,fontSize:17,lineHeight:"22px"}),Body:d({},O,{fontFamily:V,fontWeight:Q,fontSize:16,lineHeight:"22px"}),LabelLarge:d({},O,{fontFamily:V,fontWeight:De,fontSize:16,lineHeight:"20px"}),LabelMedium:d({},O,{fontFamily:V,fontWeight:Q,fontSize:16,lineHeight:"20px"}),LabelSmall:d({},O,{fontFamily:V,fontWeight:Q,fontSize:14,lineHeight:"18px"}),LabelXSmall:d({},O,{fontFamily:V,fontWeight:Q,fontSize:12,lineHeight:"16px"}),Caption:d({},O,{fontFamily:V,fontWeight:Q,fontSize:14,lineHeight:"20px"}),Footnote:d({},O,{fontFamily:V,fontWeight:Q,fontSize:12,lineHeight:"18px"})}),Ol=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h1"}=e,i=g(e,Ol);return o.createElement(N,d({},i,{tag:l,style:[F.Title,n],ref:t}),r)});const Bl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h2"}=e,i=g(e,Bl);return o.createElement(N,d({},i,{tag:l,style:[F.HeadingLarge,n],ref:t}),r)});const Ll=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h3"}=e,i=g(e,Ll);return o.createElement(N,d({},i,{tag:l,style:[F.HeadingMedium,n],ref:t}),r)});const Dl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h4"}=e,i=g(e,Dl);return o.createElement(N,d({},i,{tag:l,style:[F.HeadingSmall,n],ref:t}),r)});const Nl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="h4"}=e,i=g(e,Nl);return o.createElement(N,d({},i,{tag:l,style:[F.HeadingXSmall,n],ref:t}),r)});const Hl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Hl);return o.createElement(N,d({},i,{tag:l,style:[F.BodySerifBlock,n],ref:t}),r)});const Ml=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Ml);return o.createElement(N,d({},i,{tag:l,style:[F.BodySerif,n],ref:t}),r)});const Wl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Wl);return o.createElement(N,d({},i,{tag:l,style:[F.BodyMonospace,n],ref:t}),r)});const Al=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Al);return o.createElement(N,d({},i,{tag:l,style:[F.Body,n],ref:t}),r)});const ql=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,ql);return o.createElement(N,d({},i,{tag:l,style:[F.LabelLarge,n],ref:t}),r)});const Vl=["style","children","tag"],xt=o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Vl);return o.createElement(N,d({},i,{tag:l,style:[F.LabelMedium,n],ref:t}),r)}),Ul=["style","children","tag"],we=o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Ul);return o.createElement(N,d({},i,{tag:l,style:[F.LabelSmall,n],ref:t}),r)}),Kl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Kl);return o.createElement(N,d({},i,{tag:l,style:[F.LabelXSmall,n],ref:t}),r)});const jl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,jl);return o.createElement(N,d({},i,{tag:l,style:[F.Tagline,n],ref:t}),r)});const Xl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Xl);return o.createElement(N,d({},i,{tag:l,style:[F.Caption,n],ref:t}),r)});const Gl=["style","children","tag"];o.forwardRef(function(e,t){let{style:n,children:r,tag:l="span"}=e,i=g(e,Gl);return o.createElement(N,d({},i,{tag:l,style:[F.Footnote,n],ref:t}),r)});const Zl=s=>({small:16,medium:24,large:48,xlarge:96})[s],Yl=["color","icon","size","style","testId","className"],Ql=H("span"),Yn=o.forwardRef(function(e,t){const{color:n="currentColor",icon:r,size:l="small",style:i,testId:c,className:f}=e,h=g(e,Yl),p=Zl(l),b=`${f??""}`,x=Jl(n,p);return o.createElement(Ql,d({},h,{className:b,style:[Vt.svg,x.icon,{maskImage:`url(${r})`},i],"data-testid":c,ref:t}))}),un={},Jl=(s,e)=>{const t=`${s}-${e}`;if(Vt[t])return Vt[t];const n={icon:{backgroundColor:s,width:e,height:e}};return un[t]=v.StyleSheet.create(n),un[t]},Vt=v.StyleSheet.create({svg:{display:"inline-block",verticalAlign:"text-bottom",flexShrink:0,flexGrow:0,maskSize:"100%",maskRepeat:"no-repeat",maskPosition:"center"}});Yn.displayName="PhosphorIcon";const es=["checked","disabled","error","groupName","id","testId"];function ts(s){switch(s){case!0:return"true";case!1:return"false";default:return"mixed"}}const{blue:Qn,red:Jn,white:ae,offWhite:ns,offBlack16:rs,offBlack32:os,offBlack50:ls}=a,Ne=m.medium_16,Ut=m.small_12,ss=H("input"),is=o.forwardRef(function(e,t){const{checked:n,disabled:r,error:l,groupName:i,id:c,testId:f}=e,h=g(e,es),p=o.useRef(null);o.useEffect(()=>{p.current!=null&&(p.current.indeterminate=n==null)},[n,p]);const b=()=>{},x=cs(n,l),C=[tt.inputReset,tt.default,!r&&x.default,r&&tt.disabled],I=o.createElement(Yn,{color:r?os:ae,icon:n?Gt:Cr,size:"small",style:[tt.checkboxIcon,{width:Ut,height:Ut}]}),u=ts(n);return o.createElement(o.Fragment,null,o.createElement(ss,d({},h,{ref:y=>{p.current=y,typeof t=="function"?t(y):t!=null&&(t.current=y)},type:"checkbox","aria-checked":u,"aria-invalid":l,checked:n??void 0,disabled:r,id:c,name:i,onChange:b,style:C,"data-testid":f})),n||n==null?I:o.createElement(o.Fragment,null))}),tt=v.StyleSheet.create({inputReset:{appearance:"none",WebkitAppearance:"none",MozAppearance:"none"},default:{height:Ne,width:Ne,minHeight:Ne,minWidth:Ne,margin:0,outline:"none",boxSizing:"border-box",borderStyle:"solid",borderWidth:1,borderRadius:3},disabled:{cursor:"auto",backgroundColor:ns,borderColor:rs,borderWidth:1},checkboxIcon:{position:"absolute",pointerEvents:"none",margin:(Ne-Ut)/2}}),as=ee(a.fadedBlue16,ae),ds=a.activeBlue,pt=ee(a.fadedRed8,ae),er=a.activeRed,hn={default:{faded:as,base:Qn,active:ds},error:{faded:pt,base:Jn,active:er}},nt={},cs=(s,e)=>{const t=`${String(s)}-${String(e)}`;if(nt[t])return nt[t];const n=e?hn.error:hn.default;let r={};return s||s==null?r={default:{backgroundColor:n.base,borderWidth:0,":focus-visible":{boxShadow:`0 0 0 1px ${ae}, 0 0 0 3px ${n.base}`},":hover":{boxShadow:`0 0 0 1px ${ae}, 0 0 0 3px ${n.base}`},":active":{boxShadow:`0 0 0 1px ${ae}, 0 0 0 3px ${n.active}`,background:n.active}}}:r={default:{backgroundColor:e?pt:ae,borderColor:e?Jn:ls,":focus-visible":{backgroundColor:e?pt:ae,borderColor:n.base,borderWidth:2},":hover":{backgroundColor:e?pt:ae,borderColor:n.base,borderWidth:2},":active":{backgroundColor:n.faded,borderColor:e?er:Qn,borderWidth:2}}},nt[t]=v.StyleSheet.create(r),nt[t]},us=["checked","disabled","error","groupName","id","testId"],{blue:tr,red:nr,white:se,offWhite:hs,offBlack16:fs,offBlack32:ps,offBlack50:ms}=a,gs=H("input"),ys=o.forwardRef(function(e,t){const n=()=>{},{checked:r,disabled:l,error:i,groupName:c,id:f,testId:h}=e,p=g(e,us),b=xs(r,i),x=[Bt.inputReset,Bt.default,!l&&b.default,l&&Bt.disabled];return o.createElement(o.Fragment,null,o.createElement(gs,d({},p,{type:"radio","aria-invalid":i,checked:r??void 0,disabled:l,id:f,name:c,onChange:n,style:x,"data-testid":h,ref:t})),l&&r&&o.createElement("span",{style:bs}))}),ce=16,bs={position:"absolute",top:ce/4,left:ce/4,height:ce/2,width:ce/2,borderRadius:"50%",backgroundColor:ps},Bt=v.StyleSheet.create({inputReset:{appearance:"none",WebkitAppearance:"none",MozAppearance:"none"},default:{height:ce,width:ce,minHeight:ce,minWidth:ce,margin:0,outline:"none",boxSizing:"border-box",borderStyle:"solid",borderWidth:1,borderRadius:"50%"},disabled:{cursor:"auto",backgroundColor:hs,borderColor:fs,borderWidth:1}}),Ss=ee(a.fadedBlue16,se),mt=ee(a.fadedRed8,se),fn={default:{faded:Ss,base:tr,active:a.activeBlue},error:{faded:mt,base:nr,active:a.activeRed}},rt={},xs=(s,e)=>{const t=`${String(s)}-${String(e)}`;if(rt[t])return rt[t];const n=e?fn.error:fn.default;let r={};return s?r={default:{backgroundColor:se,borderColor:n.base,borderWidth:ce/4,":focus-visible":{boxShadow:`0 0 0 1px ${se}, 0 0 0 3px ${n.base}`},":hover":{boxShadow:`0 0 0 1px ${se}, 0 0 0 3px ${n.base}`},":active":{boxShadow:`0 0 0 1px ${se}, 0 0 0 3px ${n.active}`,borderColor:n.active}}}:r={default:{backgroundColor:e?mt:se,borderColor:e?nr:ms,":focus-visible":{backgroundColor:e?mt:se,borderColor:n.base,borderWidth:2},":hover":{backgroundColor:e?mt:se,borderColor:n.base,borderWidth:2},":active":{backgroundColor:n.faded,borderColor:e?a.activeRed:tr,borderWidth:2}}},rt[t]=v.StyleSheet.create(r),rt[t]},Cs=["checked","description","disabled","error","id","label","onChange","style","className","variant"],rr=o.forwardRef(function(e,t){const{checked:n,description:r,disabled:l=!1,error:i=!1,id:c,label:f,onChange:h,style:p,className:b,variant:x}=e,C=g(e,Cs),I=()=>{x==="radio"&&n||h(!n)},u=()=>x==="radio"?ys:is,y=w=>o.createElement(xt,{style:[ot.label,l&&ot.disabledLabel]},o.createElement("label",{htmlFor:w},f)),S=w=>o.createElement(we,{style:ot.description,id:w},r),$=u();return o.createElement(Zn,{mockOnFirstRender:!0,scope:"choice"},w=>{const k=c||w.get("main"),E=r?w.get("description"):void 0;return o.createElement(_e,{style:p,className:b},o.createElement(_e,{style:ot.wrapper,tabIndex:-1},o.createElement($,d({},C,{id:k,checked:n,"aria-describedby":E,onClick:I,disabled:l,error:i,ref:t})),o.createElement(de,{size:m.xSmall_8}),f&&y(k)),r&&S(E))})}),ot=v.StyleSheet.create({wrapper:{flexDirection:"row",alignItems:"flex-start",outline:"none"},label:{marginTop:-2},disabledLabel:{color:a.offBlack32},description:{marginLeft:m.medium_16+m.xSmall_8,marginTop:m.xxxSmall_4,color:a.offBlack64}}),vs=o.forwardRef(function(e,t){const{disabled:n=!1,error:r=!1}=e;return o.createElement(rr,d({},e,{variant:"checkbox",disabled:n,error:r,ref:t}))}),Is=["disabled","error"],ws=o.forwardRef(function(e,t){const{disabled:n=!1,error:r=!1}=e,l=g(e,Is);return o.createElement(rr,d({},l,{variant:"radio",disabled:n,error:r,ref:t}))}),$s=["checked","disabled","onChange","value","variant"];o.forwardRef(function(e,t){const{checked:n=!1,disabled:r=!1,onChange:l=()=>{},variant:i}=e,c=g(e,$s),h=(p=>p==="checkbox"?vs:ws)(i);return o.createElement(h,d({},c,{checked:n,disabled:r,onChange:l,ref:t}))});const J=v.StyleSheet.create({fieldset:{border:"none",padding:0,margin:0},legend:{padding:0},description:{marginTop:m.xxxSmall_4,color:a.offBlack64},error:{marginTop:m.xxxSmall_4,color:a.red},defaultLineGap:{marginTop:m.xSmall_8}}),Es=H("fieldset"),ks=H("legend");o.forwardRef(function(e,t){const{children:n,label:r,description:l,errorMessage:i,groupName:c,onChange:f,selectedValues:h,style:p,testId:b}=e,x=(I,u)=>{if(u){const y=h.indexOf(I),S=[...h.slice(0,y),...h.slice(y+1)];f(S)}else f([...h,I])},C=o.Children.toArray(n).filter(Boolean);return o.createElement(Es,{"data-testid":b,style:J.fieldset,ref:t},o.createElement(_e,{style:p},r&&o.createElement(ks,{style:J.legend},o.createElement(xt,null,r)),l&&o.createElement(we,{style:J.description},l),i&&o.createElement(we,{style:J.error},i),(r||l||i)&&o.createElement(de,{size:m.small_12}),C.map((I,u)=>{const{style:y,value:S}=I.props,$=h.includes(S);return o.cloneElement(I,{checked:$,error:!!i,groupName:c,id:`${c}-${S}`,key:S,onChange:()=>x(S,$),style:[u>0&&J.defaultLineGap,y],variant:"checkbox"})})))});const Rs=H("fieldset"),_s=H("legend");o.forwardRef(function(e,t){const{children:n,label:r,description:l,errorMessage:i,groupName:c,onChange:f,selectedValue:h,style:p,testId:b}=e,x=o.Children.toArray(n).filter(Boolean);return o.createElement(Rs,{"data-testid":b,style:J.fieldset,ref:t},o.createElement(_e,{style:p},r&&o.createElement(_s,{style:J.legend},o.createElement(xt,null,r)),l&&o.createElement(we,{style:J.description},l),i&&o.createElement(we,{style:J.error},i),(r||l||i)&&o.createElement(de,{size:m.small_12}),x.map((C,I)=>{const{style:u,value:y}=C.props,S=h===y;return o.cloneElement(C,{checked:S,error:!!i,groupName:c,id:`${c}-${y}`,key:y,onChange:()=>f(y),style:[I>0&&J.defaultLineGap,u],variant:"radio"})})))});const Fs=["id","type","value","name","disabled","onKeyDown","placeholder","style","testId","readOnly","autoFocus","autoComplete","forwardedRef","light","onFocus","onBlur","onValidate","validate","onChange","required"],Ts="This field is required.",zs=H("input");class or extends o.Component{constructor(e){super(e),this.state={error:null},this.maybeValidate=t=>{const{validate:n,onValidate:r,required:l}=this.props;if(n){const i=n(t)||null;this.setState({error:i},()=>{r&&r(i)})}else if(l){const c=t?null:typeof l=="string"?l:Ts;this.setState({error:c},()=>{r&&r(c)})}},this.handleChange=t=>{const{onChange:n}=this.props,r=t.target.value;this.maybeValidate(r),n(r)},this.handleFocus=t=>{const{onFocus:n}=this.props;n&&n(t)},this.handleBlur=t=>{const{onBlur:n}=this.props;n&&n(t)},this.getStyles=()=>{const{disabled:t,light:n}=this.props,{error:r}=this.state,l=[oe.input,F.LabelMedium],i=[oe.default,!t&&oe.defaultFocus,t&&oe.disabled,!!r&&oe.error],c=[oe.light,!t&&oe.lightFocus,t&&oe.lightDisabled,!!r&&oe.lightError];return[...l,...n?c:i]},e.validate&&e.value!==""&&(this.state.error=e.validate(e.value)||null)}componentDidMount(){this.props.value!==""&&this.maybeValidate(this.props.value)}render(){const e=this.props,{id:t,type:n,value:r,name:l,disabled:i,onKeyDown:c,placeholder:f,style:h,testId:p,readOnly:b,autoFocus:x,autoComplete:C,forwardedRef:I}=e,u=g(e,Fs);return o.createElement(Ze,{id:t,scope:"text-field"},y=>o.createElement(zs,d({style:[this.getStyles(),h],id:y,type:n,placeholder:f,value:r,name:l,disabled:i,onChange:this.handleChange,onKeyDown:c,onFocus:this.handleFocus,onBlur:this.handleBlur,"data-testid":p,readOnly:b,autoFocus:x,autoComplete:C,ref:I},u,{"aria-invalid":this.state.error?"true":"false"})))}}or.defaultProps={type:"text",disabled:!1,light:!1};const oe=v.StyleSheet.create({input:{width:"100%",height:40,borderRadius:X.radius.medium_4,boxSizing:"border-box",paddingLeft:m.medium_16,margin:0},default:{background:a.white,border:`1px solid ${a.offBlack50}`,color:a.offBlack,"::placeholder":{color:a.offBlack64}},defaultFocus:{":focus-visible":{borderColor:a.blue,outline:`1px solid ${a.blue}`,outlineOffset:0}},error:{background:a.fadedRed8,border:`1px solid ${a.red}`,color:a.offBlack,"::placeholder":{color:a.offBlack64},":focus-visible":{outlineColor:a.red,borderColor:a.red}},disabled:{background:a.offWhite,border:`1px solid ${a.offBlack16}`,color:a.offBlack64,"::placeholder":{color:a.offBlack64},cursor:"not-allowed",":focus-visible":{outline:"none",boxShadow:`0 0 0 1px ${a.white}, 0 0 0 3px ${a.offBlack32}`}},light:{background:a.white,border:`1px solid ${a.offBlack16}`,color:a.offBlack,"::placeholder":{color:a.offBlack64}},lightFocus:{":focus-visible":{outline:`1px solid ${a.blue}`,outlineOffset:0,borderColor:a.blue,boxShadow:`0px 0px 0px 2px ${a.blue}, 0px 0px 0px 3px ${a.white}`}},lightDisabled:{backgroundColor:"transparent",border:`1px solid ${a.white32}`,color:a.white64,"::placeholder":{color:a.white64},cursor:"not-allowed",":focus-visible":{borderColor:ee(a.white32,a.blue),outline:"none",boxShadow:`0 0 0 1px ${a.offBlack32}, 0 0 0 3px ${a.fadedBlue}`}},lightError:{background:a.fadedRed8,border:`1px solid ${a.red}`,boxShadow:`0px 0px 0px 1px ${a.red}, 0px 0px 0px 2px ${a.white}`,color:a.offBlack,"::placeholder":{color:a.offBlack64},":focus-visible":{outlineColor:a.red,borderColor:a.red,boxShadow:`0px 0px 0px 2px ${a.red}, 0px 0px 0px 3px ${a.white}`}}});var lr=o.forwardRef((s,e)=>o.createElement(or,d({},s,{forwardedRef:e})));const Ps=H("span");class Os extends o.Component{renderLabel(){const{label:e,id:t,required:n,testId:r,light:l}=this.props,i=o.createElement(Ps,{style:l?he.lightRequired:he.required,"aria-hidden":!0}," ","*");return o.createElement(o.Fragment,null,o.createElement(xt,{style:l?he.lightLabel:he.label,tag:"label",htmlFor:t&&`${t}-field`,testId:r&&`${r}-label`},e,n&&i),o.createElement(de,{size:m.xxxSmall_4}))}maybeRenderDescription(){const{description:e,testId:t,light:n}=this.props;return e?o.createElement(o.Fragment,null,o.createElement(we,{style:n?he.lightDescription:he.description,testId:t&&`${t}-description`},e),o.createElement(de,{size:m.xxxSmall_4})):null}maybeRenderError(){const{error:e,id:t,testId:n,light:r}=this.props;return e?o.createElement(o.Fragment,null,o.createElement(de,{size:m.small_12}),o.createElement(we,{style:r?he.lightError:he.error,role:"alert",id:t&&`${t}-error`,testId:n&&`${n}-error`},e)):null}render(){const{field:e,style:t}=this.props;return o.createElement(_e,{style:t},this.renderLabel(),this.maybeRenderDescription(),o.createElement(de,{size:m.xSmall_8}),e,this.maybeRenderError())}}const he=v.StyleSheet.create({label:{color:a.offBlack},lightLabel:{color:a.white},description:{color:a.offBlack64},lightDescription:{color:a.white64},error:{color:a.red},lightError:{color:a.fadedRed},required:{color:a.red},lightRequired:{color:a.fadedRed}}),Bs=["id","type","label","description","value","disabled","required","validate","onChange","onKeyDown","placeholder","light","style","testId","readOnly","autoComplete","forwardedRef","ariaDescribedby","onValidate","onFocus","onBlur"];class sr extends o.Component{constructor(e){super(e),this.handleValidate=t=>{const{onValidate:n}=this.props;this.setState({error:t},()=>{n&&n(t)})},this.handleFocus=t=>{const{onFocus:n}=this.props;this.setState({focused:!0},()=>{n&&n(t)})},this.handleBlur=t=>{const{onBlur:n}=this.props;this.setState({focused:!1},()=>{n&&n(t)})},this.state={error:null,focused:!1}}render(){const e=this.props,{id:t,type:n,label:r,description:l,value:i,disabled:c,required:f,validate:h,onChange:p,onKeyDown:b,placeholder:x,light:C,style:I,testId:u,readOnly:y,autoComplete:S,forwardedRef:$,ariaDescribedby:w}=e,k=g(e,Bs);return o.createElement(Ze,{id:t,scope:"labeled-text-field"},E=>o.createElement(Os,{id:E,testId:u,style:I,light:C,field:o.createElement(lr,d({id:`${E}-field`,"aria-describedby":w||`${E}-error`,"aria-required":f?"true":"false",required:f,testId:u&&`${u}-field`,type:n,value:i,placeholder:x,disabled:c,validate:h,onValidate:this.handleValidate,onChange:p,onKeyDown:b,onFocus:this.handleFocus,onBlur:this.handleBlur,light:C,readOnly:y,autoComplete:S,ref:$},k)),label:r,description:l,required:!!f,error:!this.state.focused&&this.state.error||""}))}}sr.defaultProps={type:"text",disabled:!1,light:!1};o.forwardRef((s,e)=>o.createElement(sr,d({},s,{forwardedRef:e})));const Ls=["onChange","value","placeholder","disabled","id","testId","style","readOnly","autoComplete","name","className","autoFocus","rows","spellCheck","wrap","minLength","maxLength","onClick","onKeyDown","onKeyUp","onFocus","onBlur","validate","onValidate","required","resizeType","light","rootStyle"],Ds="This field is required.",Ns=H("textarea");o.forwardRef(function(e,t){const{onChange:n,value:r,placeholder:l,disabled:i,id:c,testId:f,style:h,readOnly:p,autoComplete:b,name:x,className:C,autoFocus:I,rows:u,spellCheck:y,wrap:S,minLength:$,maxLength:w,onClick:k,onKeyDown:E,onKeyUp:R,onFocus:_,onBlur:j,validate:U,onValidate:te,required:ne,resizeType:Ye,light:It,rootStyle:wt}=e,$t=g(e,Ls),[ze,Pe]=o.useState(null),Oe=Fl("text-area"),Et=c??Oe.get("id"),Qe=re=>{const M=re.target.value;n(M),Je(M)},Je=re=>{if(U){const M=U(re)||null;Pe(M),te&&te(M)}else if(ne){const ge=re?null:typeof ne=="string"?ne:Ds;Pe(ge),te&&te(ge)}};Tl(()=>{r!==""&&Je(r)});const kt=()=>{const re=[le.textarea,F.LabelMedium,Ye&&Hs[Ye]],M=[le.default,!i&&le.defaultFocus,i&&le.disabled,!!ze&&le.error],ge=[le.light,!i&&le.lightFocus,i&&le.lightDisabled,!!ze&&le.lightError];return[...re,...It?ge:M]};return o.createElement(_e,{style:[{width:"100%"},wt]},o.createElement(Ns,d({id:Et,"data-testid":f,ref:t,className:C,style:[kt(),h],value:r,onChange:Qe,placeholder:l,"aria-disabled":i,readOnly:p||i,autoComplete:b,name:x,autoFocus:I,rows:u,spellCheck:y,wrap:S,minLength:$,maxLength:w,onClick:i?void 0:k,onKeyDown:i?void 0:E,onKeyUp:i?void 0:R,onFocus:_,onBlur:j,required:!!ne},$t,{"aria-invalid":!!ze})))});const pn=10,le=v.StyleSheet.create({textarea:{borderRadius:X.radius.medium_4,boxSizing:"border-box",padding:`${pn}px ${m.medium_16}px`,minHeight:`${pn*2+br.lineHeight.medium+2*X.width.hairline}px`},default:{background:a.white,border:`1px solid ${a.offBlack50}`,color:a.offBlack,"::placeholder":{color:a.offBlack64}},defaultFocus:{":focus-visible":{borderColor:a.blue,outline:`1px solid ${a.blue}`,outlineOffset:0}},disabled:{background:a.offWhite,border:`1px solid ${a.offBlack16}`,color:a.offBlack64,"::placeholder":{color:a.offBlack64},cursor:"not-allowed",":focus-visible":{outline:"none",boxShadow:`0 0 0 1px ${a.white}, 0 0 0 3px ${a.offBlack32}`}},error:{background:a.fadedRed8,border:`1px solid ${a.red}`,color:a.offBlack,"::placeholder":{color:a.offBlack64},":focus-visible":{outlineColor:a.red,borderColor:a.red}},light:{background:a.white,border:`1px solid ${a.offBlack16}`,color:a.offBlack,"::placeholder":{color:a.offBlack64}},lightFocus:{":focus-visible":{outline:`1px solid ${a.blue}`,outlineOffset:0,borderColor:a.blue,boxShadow:`0px 0px 0px 2px ${a.blue}, 0px 0px 0px 3px ${a.white}`}},lightDisabled:{backgroundColor:"transparent",border:`1px solid ${a.white32}`,color:a.white64,"::placeholder":{color:a.white64},cursor:"not-allowed",":focus-visible":{borderColor:ee(a.white32,a.blue),outline:"none",boxShadow:`0 0 0 1px ${a.offBlack32}, 0 0 0 3px ${a.fadedBlue}`}},lightError:{background:a.fadedRed8,border:`1px solid ${a.red}`,boxShadow:`0px 0px 0px 1px ${a.red}, 0px 0px 0px 2px ${a.white}`,color:a.offBlack,"::placeholder":{color:a.offBlack64},":focus-visible":{outlineColor:a.red,borderColor:a.red,boxShadow:`0px 0px 0px 2px ${a.red}, 0px 0px 0px 3px ${a.white}`}}}),Hs=v.StyleSheet.create({both:{resize:"both"},none:{resize:"none"},horizontal:{resize:"horizontal"},vertical:{resize:"vertical"}}),Ms=s=>({small:16,medium:24,large:48,xlarge:96})[s],Ws=["color","icon","size","style","testId","className"],As=Te("span"),ir=o.forwardRef(function(e,t){const{color:n="currentColor",icon:r,size:l="small",style:i,testId:c,className:f}=e,h=g(e,Ws),p=Ms(l),b=`${f??""}`,x=qs(n,p);return o.createElement(As,d({},h,{className:b,style:[Kt.svg,x.icon,{maskImage:`url(${r})`},i],"data-testid":c,ref:t}))}),mn={},qs=(s,e)=>{const t=`${s}-${e}`;if(Kt[t])return Kt[t];const n={icon:{backgroundColor:s,width:e,height:e}};return mn[t]=v.StyleSheet.create(n),mn[t]},Kt=v.StyleSheet.create({svg:{display:"inline-block",verticalAlign:"text-bottom",flexShrink:0,flexGrow:0,maskSize:"100%",maskRepeat:"no-repeat",maskPosition:"center"}});ir.displayName="PhosphorIcon";const Vs={clearSearch:"Clear search"},Us=["clearAriaLabel","autoFocus","disabled","light","id","value","placeholder","style","testId","onClick","onChange","onFocus","onBlur"],Ks=o.forwardRef(function(e,t){const{clearAriaLabel:n=Vs.clearSearch,autoFocus:r,disabled:l=!1,light:i=!1,id:c,value:f,placeholder:h,style:p,testId:b,onClick:x,onChange:C,onFocus:I,onBlur:u}=e,y=g(e,Us),S=o.useRef(null),$=()=>{var k;C(""),S==null||(k=S.current)==null||k.focus()},w=()=>f.length?o.createElement(vr,{icon:Ir,kind:"tertiary",onClick:$,style:lt.dismissIcon,"aria-label":n}):null;return o.createElement(Un,{id:c,scope:"search-field"},k=>o.createElement(Zo,{onClick:x,style:[lt.inputContainer,p]},o.createElement(ir,{icon:Ho,size:"medium",color:a.offBlack64,style:lt.searchIcon,"aria-hidden":"true"}),o.createElement(lr,d({id:`${k}-field`,type:"text",autoFocus:r,disabled:l,light:i,onChange:C,onFocus:I,onBlur:u,placeholder:h,ref:E=>{t&&(t.current=E),S.current=E},value:f,style:[lt.inputStyleReset,T.LabelMedium],testId:b},y)),w()))}),lt=v.StyleSheet.create({inputContainer:{boxSizing:"border-box",flexDirection:"row",borderRadius:m.xxxSmall_4,alignItems:"center",height:40},searchIcon:{marginLeft:m.xSmall_8,marginRight:m.xSmall_8,position:"absolute"},dismissIcon:{margin:0,position:"absolute",right:0,":hover":{border:"none"}},inputStyleReset:{display:"flex",flex:1,"::placeholder":{color:a.offBlack64},width:"100%",color:"inherit",paddingLeft:m.large_24+m.medium_16,paddingRight:m.large_24+m.medium_16}});function jt(){return jt=Object.assign||function(s){for(var e=1;e=e?s.call(null):r.id=requestAnimationFrame(n)}var r={id:requestAnimationFrame(n)};return r}var $e=null;function xn(s){if(s===void 0&&(s=!1),$e===null||s){var e=document.createElement("div"),t=e.style;t.width="50px",t.height="50px",t.overflow="scroll",t.direction="rtl";var n=document.createElement("div"),r=n.style;return r.width="100px",r.height="100px",e.appendChild(n),document.body.appendChild(e),e.scrollLeft>0?$e="positive-descending":(e.scrollLeft=1,e.scrollLeft===0?$e="negative":$e="positive-ascending"),document.body.removeChild(e),$e}return $e}var Qs=150,Js=function(e,t){return e};function ei(s){var e,t=s.getItemOffset,n=s.getEstimatedTotalSize,r=s.getItemSize,l=s.getOffsetForIndexAndAlignment,i=s.getStartIndexForOffset,c=s.getStopIndexForStartIndex,f=s.initInstanceProps,h=s.shouldResetStyleCacheOnItemSizeChange,p=s.validateProps;return e=function(b){js(x,b);function x(I){var u;return u=b.call(this,I)||this,u._instanceProps=f(u.props,gn(u)),u._outerRef=void 0,u._resetIsScrollingTimeoutId=null,u.state={instance:gn(u),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof u.props.initialScrollOffset=="number"?u.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},u._callOnItemsRendered=void 0,u._callOnItemsRendered=Lt(function(y,S,$,w){return u.props.onItemsRendered({overscanStartIndex:y,overscanStopIndex:S,visibleStartIndex:$,visibleStopIndex:w})}),u._callOnScroll=void 0,u._callOnScroll=Lt(function(y,S,$){return u.props.onScroll({scrollDirection:y,scrollOffset:S,scrollUpdateWasRequested:$})}),u._getItemStyle=void 0,u._getItemStyle=function(y){var S=u.props,$=S.direction,w=S.itemSize,k=S.layout,E=u._getItemStyleCache(h&&w,h&&k,h&&$),R;if(E.hasOwnProperty(y))R=E[y];else{var _=t(u.props,y,u._instanceProps),j=r(u.props,y,u._instanceProps),U=$==="horizontal"||k==="horizontal",te=$==="rtl",ne=U?_:0;E[y]=R={position:"absolute",left:te?void 0:ne,right:te?ne:void 0,top:U?0:_,height:U?"100%":j,width:U?j:"100%"}}return R},u._getItemStyleCache=void 0,u._getItemStyleCache=Lt(function(y,S,$){return{}}),u._onScrollHorizontal=function(y){var S=y.currentTarget,$=S.clientWidth,w=S.scrollLeft,k=S.scrollWidth;u.setState(function(E){if(E.scrollOffset===w)return null;var R=u.props.direction,_=w;if(R==="rtl")switch(xn()){case"negative":_=-w;break;case"positive-descending":_=k-$-w;break}return _=Math.max(0,Math.min(_,k-$)),{isScrolling:!0,scrollDirection:E.scrollOffset0)for(var M=Je;M<=kt;M++)re.push(o.createElement(y,{data:j,key:te(M,j),index:M,isScrolling:$t?Pe:void 0,style:this._getItemStyle(M)}));var ge=n(this.props,this._instanceProps);return o.createElement(Ye||It||"div",{className:S,onScroll:Et,ref:this._outerRefSetter,style:jt({position:"relative",height:w,width:ze,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:$},wt)},o.createElement(E||R||"div",{children:re,ref:k,style:{height:Oe?"100%":ge,pointerEvents:Pe?"none":void 0,width:Oe?ge:"100%"}}))},C._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var u=this.props.itemCount;if(u>0){var y=this._getRangeToRender(),S=y[0],$=y[1],w=y[2],k=y[3];this._callOnItemsRendered(S,$,w,k)}}if(typeof this.props.onScroll=="function"){var E=this.state,R=E.scrollDirection,_=E.scrollOffset,j=E.scrollUpdateWasRequested;this._callOnScroll(R,_,j)}},C._getRangeToRender=function(){var u=this.props,y=u.itemCount,S=u.overscanCount,$=this.state,w=$.isScrolling,k=$.scrollDirection,E=$.scrollOffset;if(y===0)return[0,0,0,0];var R=i(this.props,E,this._instanceProps),_=c(this.props,R,E,this._instanceProps),j=!w||k==="backward"?Math.max(1,S):1,U=!w||k==="forward"?Math.max(1,S):1;return[Math.max(0,R-j),Math.max(0,Math.min(y-1,_+U)),R,_]},x}(o.PureComponent),e.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},e}var ti=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},ni=50,Ee=function(e,t,n){var r=e,l=r.itemSize,i=n.itemMetadataMap,c=n.lastMeasuredIndex;if(t>c){var f=0;if(c>=0){var h=i[c];f=h.offset+h.size}for(var p=c+1;p<=t;p++){var b=l(p);i[p]={offset:f,size:b},f+=b}n.lastMeasuredIndex=t}return i[t]},ri=function(e,t,n){var r=t.itemMetadataMap,l=t.lastMeasuredIndex,i=l>0?r[l].offset:0;return i>=n?ar(e,t,l,0,n):oi(e,t,Math.max(0,l),n)},ar=function(e,t,n,r,l){for(;r<=n;){var i=r+Math.floor((n-r)/2),c=Ee(e,i,t).offset;if(c===l)return i;cl&&(n=i-1)}return r>0?r-1:0},oi=function(e,t,n,r){for(var l=e.itemCount,i=1;n=n&&(i=n-1),i>=0){var f=r[i];c=f.offset+f.size}var h=n-i-1,p=h*l;return c+p},li=ei({getItemOffset:function(e,t,n){return Ee(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:Cn,getOffsetForIndexAndAlignment:function(e,t,n,r,l){var i=e.direction,c=e.height,f=e.layout,h=e.width,p=i==="horizontal"||f==="horizontal",b=p?h:c,x=Ee(e,t,l),C=Cn(e,l),I=Math.max(0,Math.min(C-b,x.offset)),u=Math.max(0,x.offset-b+x.size);switch(n==="smart"&&(r>=u-b&&r<=I+b?n="auto":n="center"),n){case"start":return I;case"end":return u;case"center":return Math.round(u+(I-u)/2);case"auto":default:return r>=u&&r<=I?r:r`Select all (${s})`,noneSelected:"0 items",someSelected:s=>s===1?"1 item":`${s} items`,allSelected:"All items"},{blue:si,white:vn,offBlack:ii}=a;class Fe extends o.Component{static isClassOf(e){return e&&e.type&&e.type.__IS_ACTION_ITEM__}render(){const{disabled:e,horizontalRule:t,href:n,target:r,indent:l,label:i,lang:c,leftAccessory:f,rightAccessory:h,onClick:p,role:b,style:x,testId:C}=this.props,I=[He.wrapper,x],u=typeof i=="string"?o.createElement(bt,{lang:c,style:He.label},i):o.cloneElement(i,d({lang:c,style:He.label},i.props));return o.createElement(yo,{disabled:e,horizontalRule:t,rootStyle:I,leftAccessory:f,rightAccessory:h,style:[He.shared,l&&He.indent],role:b,testId:C,title:u,href:n,target:r,onClick:p})}}Fe.defaultProps={disabled:!1,horizontalRule:"none",indent:!1,role:"menuitem"};Fe.__IS_ACTION_ITEM__=!0;const He=v.StyleSheet.create({wrapper:{minHeight:me,touchAction:"manipulation",":focus":{borderRadius:m.xxxSmall_4,outline:`${m.xxxxSmall_2}px solid ${a.blue}`,outlineOffset:-m.xxxxSmall_2},":hover[aria-disabled=false]":{color:vn,background:si},"@media not (hover: hover)":{":hover[aria-disabled=false]":{color:vn,background:ii}},":active[aria-disabled=false]":{color:a.fadedBlue,background:a.activeBlue}},shared:{minHeight:me,height:me},label:{whiteSpace:"nowrap",userSelect:"none"},indent:{paddingLeft:m.medium_16*2}}),ai=function(e){const{selected:t}=e;return o.createElement(St,{icon:Gt,size:"small",style:[In.bounds,!t&&In.hide]})},In=v.StyleSheet.create({bounds:{alignSelf:"center",height:m.medium_16,minHeight:m.medium_16,minWidth:m.medium_16},hide:{visibility:"hidden"}}),{offBlack16:di,offBlack50:ci,offWhite:ui}=a,hi=function(e){const{disabled:t,selected:n}=e;return o.createElement(Ce,{className:"checkbox",style:[st.checkbox,n&&!t&&st.noBorder,t&&st.disabledCheckbox]},n&&o.createElement(St,{icon:Gt,size:"small",className:"check",style:[{width:m.small_12,height:m.small_12,margin:m.xxxxSmall_2},t&&n&&st.disabledCheckFormatting]}))},st=v.StyleSheet.create({checkbox:{alignSelf:"center",minHeight:m.medium_16,minWidth:m.medium_16,height:m.medium_16,borderRadius:3,borderWidth:1,borderStyle:"solid",borderColor:ci},noBorder:{borderWidth:0},disabledCheckbox:{borderColor:di,backgroundColor:ui},disabledCheckFormatting:{position:"absolute",top:-1,left:-1}}),fi=["disabled","label","selected","testId","leftAccessory","horizontalRule","parentComponent","rightAccessory","style","subtitle1","subtitle2","value","onClick","onToggle","variant","role"],pi=yt("li");class ve extends o.Component{constructor(...e){super(...e),this.handleClick=()=>{const{onClick:t,onToggle:n,value:r}=this.props;n(r),t&&t()}}static isClassOf(e){return e&&e.type&&e.type.__IS_OPTION_ITEM__}getCheckComponent(){return this.props.variant==="check"?ai:hi}renderCell(){const e=this.props,{disabled:t,label:n,selected:r,testId:l,leftAccessory:i,horizontalRule:c,parentComponent:f,rightAccessory:h,style:p,subtitle1:b,subtitle2:x,role:C}=e,I=g(e,fi),u=this.getCheckComponent(),y=[fe.item,p];return o.createElement(So,d({disabled:t,horizontalRule:c,rootStyle:f==="listbox"?fe.listboxItem:y,style:fe.itemContainer,"aria-selected":f!=="listbox"&&r?"true":"false",role:f!=="listbox"?C:void 0,testId:l,leftAccessory:o.createElement(o.Fragment,null,i?o.createElement(Ce,{style:{flexDirection:"row"}},o.createElement(u,{disabled:t,selected:r}),o.createElement(de,{size:m.xSmall_8}),i):o.createElement(u,{disabled:t,selected:r})),rightAccessory:h,subtitle1:b?o.createElement(Qt,{className:"subtitle"},b):void 0,title:o.createElement(bt,{style:fe.label},n),subtitle2:x?o.createElement(Qt,{className:"subtitle"},x):void 0,onClick:f!=="listbox"?this.handleClick:void 0},I))}render(){const{disabled:e,focused:t,parentComponent:n,role:r,selected:l}=this.props;return n==="listbox"?o.createElement(pi,{onMouseDown:i=>{i.preventDefault()},onClick:this.handleClick,style:[fe.reset,fe.item,t&&fe.itemFocused,e&&fe.itemDisabled],role:r,"aria-selected":l?"true":"false","aria-disabled":e?"true":"false",id:this.props.id,tabIndex:-1},this.renderCell()):this.renderCell()}}ve.defaultProps={disabled:!1,focused:!1,horizontalRule:"none",onToggle:()=>{},role:"option",selected:!1};ve.__IS_OPTION_ITEM__=!0;const{blue:Dt,white:Me,offBlack:mi}=a,wn={borderRadius:m.xxxSmall_4,outline:`${m.xxxxSmall_2}px solid ${a.blue}`,outlineOffset:-m.xxxxSmall_2},fe=v.StyleSheet.create({reset:{margin:0,padding:0,border:0,background:"none",outline:"none",fontSize:"100%",verticalAlign:"baseline",textAlign:"left",textDecoration:"none",listStyle:"none",cursor:"pointer"},listboxItem:{backgroundColor:"transparent",color:"inherit"},item:{backgroundColor:a.white,minHeight:"unset",":focus":wn,":focus-visible":{overflow:"visible"},":hover[aria-disabled=false]":{color:Me,background:Dt},":active[aria-selected=false]":{},":hover[aria-disabled=true]":{cursor:"not-allowed"},":is([aria-disabled=true])":{color:a.offBlack32,":focus-visible":{outline:"none"}},"@media not (hover: hover)":{":hover[aria-disabled=false]":{color:Me,background:mi}},":active[aria-disabled=false]":{color:a.fadedBlue,background:a.activeBlue},":hover[aria-disabled=false] .checkbox":{background:Me},":hover[aria-disabled=false] .check":{color:Dt},":active[aria-disabled=false] .check":{color:a.activeBlue},":is([aria-selected=true]) .checkbox":{background:Dt},":is([aria-selected=true]) .check":{color:Me},":is([aria-disabled=false]) .subtitle":{color:a.offBlack64},":hover[aria-disabled=false] .subtitle":{color:a.offWhite},":active[aria-disabled=false] .subtitle":{color:ee(a.fadedBlue16,Me)}},itemFocused:wn,itemDisabled:{outlineColor:a.offBlack32},itemContainer:{minHeight:"unset",padding:`${m.xSmall_8+m.xxxxSmall_2}px ${m.xSmall_8}px`,paddingRight:m.medium_16,whiteSpace:"nowrap"},label:{whiteSpace:"nowrap",userSelect:"none",overflow:"hidden",textOverflow:"ellipsis"},hide:{visibility:"hidden"}});class ue extends o.Component{static isClassOf(e){return e&&e.type&&e.type.__IS_SEPARATOR_ITEM__}render(){return o.createElement(Ce,{style:[gi.separator,this.props.style],"aria-hidden":"true"})}}ue.__IS_SEPARATOR_ITEM__=!0;const gi=v.StyleSheet.create({separator:{boxShadow:`0 -1px ${a.offBlack16}`,height:1,minHeight:1,marginTop:m.xxxSmall_4,marginBottom:m.xxxSmall_4}});class Ct extends o.Component{constructor(...e){super(...e),this.getTestIdFromProps=t=>t.testId||t["data-testid"]}renderAnchorChildren(e,t){const{disabled:n,testId:r,text:l,opened:i,"aria-controls":c,"aria-haspopup":f,id:h}=this.props,p=this.props.children(d({},e,{text:l,opened:i})),b=p.props,x=this.getTestIdFromProps(b);return o.cloneElement(p,d({},t,{disabled:n,"aria-controls":c,id:h,"aria-expanded":i?"true":"false","aria-haspopup":f,onClick:b.onClick?C=>{b.onClick(C),t.onClick(C)}:t.onClick,"data-testid":x||r}))}render(){return o.createElement(yr,{onClick:this.props.onClick,disabled:this.props.disabled,tabIndex:0},(e,t)=>this.renderAnchorChildren(e,t))}}Ct.defaultProps={disabled:!1};class yi extends o.Component{render(){const{data:e,index:t,style:n}=this.props,r=e[t];if(ue.isClassOf(r.component))return o.cloneElement(r.component,{style:n});{const{component:l,populatedProps:i,onClick:c,role:f,ref:h}=r;return o.cloneElement(l,d({style:n},i,{key:t,onClick:c,ref:r.focusable&&h,role:f}))}}}function $n(s,e=0){return s.slice(0,hr).reduce((t,n)=>ue.isClassOf(n.component)?t+fr:t+me,e)}class bi extends o.Component{constructor(e){super(e),this.getItemSize=t=>{const n=this.props.data[t];return ue.isClassOf(n.component)?fr:me},this.state={height:$n(e.data),width:e.width}}componentDidMount(){const{schedule:e}=this.props;e.animationFrame(()=>{this.setWidth()})}componentDidUpdate(e){const{data:t,listRef:n}=this.props;e.data.length!==t.length&&(this.setHeight(),n&&n.current&&n.current.resetAfterIndex(1))}setWidth(){const e=Ie.findDOMNode(this),t=e==null?void 0:e.parentElement;if(t){const n=t.getBoundingClientRect().width;this.setState({width:n})}}setHeight(){const e=$n(this.props.data);this.setState({height:e})}renderInitialItems(){const{data:e}=this.props,t=e.map(r=>r.component);return o.Children.toArray(t).filter(Boolean).sort((r,l)=>l.props.label&&r.props.label?l.props.label.length-r.props.label.length:-1).slice(0,hr).map(r=>o.cloneElement(r,{style:{visibility:"hidden"}}))}renderVirtualizedList(e,t){const{data:n,listRef:r}=this.props;return o.createElement(li,{height:t,itemCount:n.length,itemSize:this.getItemSize,itemData:n,style:{overflowX:"hidden"},width:e,overscanCount:5,ref:r},yi)}render(){const{width:e,height:t}=this.state;return e==null?this.renderInitialItems():this.renderVirtualizedList(e,t)}}var Si=kn(bi);function xi({state:s,options:e}){const t=$r(s,e),{y:n}=s.modifiersData.preventOverflow||{x:0,y:0},{height:r}=s.rects.popper,[l]=s.placement.split("-"),c=r-t[l==="top"?"top":"bottom"]-n;s.styles.popper=d({},s.styles.popper,{maxHeight:`${c}px`,"--popper-max-height":`${c}px`})}const Ci={name:"maxHeight",enabled:!0,phase:"main",options:{padding:me},requiresIfExists:["offset","preventOverflow","flip"],fn:xi},vi=[{name:"preventOverflow",options:{rootBoundary:"viewport",altAxis:!0,tether:!1}},Ci],Ii=function({children:e,alignment:t="left",onPopperElement:n,referenceElement:r}){const l=Er(r)||document.querySelector("body");return l?Ie.createPortal(o.createElement(wr,{innerRef:i=>{i&&n&&n(i)},referenceElement:r,strategy:"fixed",placement:t==="left"?"bottom-start":"bottom-end",modifiers:vi},({placement:i,ref:c,style:f,hasPopperEscaped:h,isReferenceHidden:p})=>{const b=!!(h||p);return o.createElement("div",{ref:c,style:f,"data-testid":"dropdown-popper","data-placement":i},e(b))}),l):null};function wi(s){return s.length===1||!/^[A-Z]/i.test(s)?s:""}function $i(s,e){let t;return function(...r){const l=()=>{clearTimeout(t),s(...r)};clearTimeout(t),t=setTimeout(l,e)}}function En(s){return typeof s=="string"}function Ae(s){return En(s.label)?s.label:En(s.labelAsText)?s.labelAsText:""}const Ei=125,ki=yt("span");class vt extends o.Component{static sameItemsFocusable(e,t){if(e.length!==t.length)return!1;for(let n=0;n{const{open:n,onOpenChanged:r}=this.props,l=t.target,i=Ie.findDOMNode(this);n&&i&&!i.contains(l)&&this.popperElement&&!this.popperElement.contains(l)&&r(!1)},this.handleKeyDown=t=>{const{enableTypeAhead:n,onOpenChanged:r,open:l,searchText:i}=this.props,c=t.which||t.keyCode;if(n&&wi(t.key)&&(t.stopPropagation(),this.textSuggestion+=t.key,this.handleKeyDownDebounced(this.textSuggestion)),!l){if(c===ye.down){t.preventDefault(),r(!0);return}return}switch(c){case ye.tab:if(this.isSearchFieldFocused()&&i)return;this.restoreTabOrder(),r(!1);return;case ye.space:if(this.isSearchFieldFocused())return;t.preventDefault();return;case ye.up:t.preventDefault(),this.focusPreviousItem();return;case ye.down:t.preventDefault(),this.focusNextItem();return}},this.handleKeyUp=t=>{const{onOpenChanged:n,open:r}=this.props;switch(t.which||t.keyCode){case ye.space:if(this.isSearchFieldFocused())return;t.preventDefault();return;case ye.escape:r&&(t.stopPropagation(),this.restoreTabOrder(),n(!1));return}},this.handleKeyDownDebounceResult=t=>{const n=this.props.items.filter(r=>r.focusable).findIndex(({component:r})=>{if(ue.isClassOf(r))return!1;if(ve.isClassOf(r)){const l=r.props;return Ae(l).toLowerCase().startsWith(t.toLowerCase())}return!1});if(n>=0){const r=!this.props.open;r&&this.props.onOpenChanged(!0),this.focusedIndex=n,this.scheduleToFocusCurrentItem(l=>{this.props.selectionType==="single"&&r&&l&&(l.click(),this.props.onOpenChanged(!1))})}this.textSuggestion=""},this.handleClickFocus=t=>{this.itemsClicked=!0,this.focusedIndex=t,this.focusedOriginalIndex=this.state.itemRefs[this.focusedIndex].originalIndex},this.handleDropdownMouseUp=t=>{t.nativeEvent.stopImmediatePropagation?t.nativeEvent.stopImmediatePropagation():t.stopPropagation()},this.handleItemClick=(t,n)=>{this.handleClickFocus(t),n.component.props.onClick&&n.component.props.onClick(),n.populatedProps.onClick&&n.populatedProps.onClick()},this.handleSearchTextChanged=t=>{const{onSearchTextChanged:n}=this.props;n&&n(t)},this.resetFocusedIndex(),this.state={prevItems:this.props.items,itemRefs:[],sameItemsFocusable:!1,labels:d({noResults:K.noResults,someResults:K.someSelected},e.labels)},this.virtualizedListRef=o.createRef(),this.handleKeyDownDebounced=$i(this.handleKeyDownDebounceResult,500),this.textSuggestion=""}componentDidMount(){this.updateEventListeners(),this.maybeFocusInitialItem()}componentDidUpdate(e){const{open:t,searchText:n}=this.props;if(e.open!==t)this.updateEventListeners(),this.maybeFocusInitialItem();else if(t){const{itemRefs:r,sameItemsFocusable:l}=this.state;if(l||e.searchText!==n)return;{const i=r.findIndex(c=>c.originalIndex===this.focusedOriginalIndex);i===-1?(this.focusedIndex=0,this.itemsClicked=!1,this.scheduleToFocusCurrentItem()):this.focusedIndex=i}this.props.labels!==e.labels&&this.setState({labels:d({},this.state.labels,this.props.labels)})}}componentWillUnmount(){this.removeEventListeners()}resetFocusedIndex(){const{initialFocusedIndex:e}=this.props;if(typeof e<"u")this.focusedIndex=e;else{if(this.hasSearchField()&&!this.isSearchFieldFocused())return this.focusSearchField();this.focusedIndex=0}}maybeFocusInitialItem(){const{autoFocus:e,open:t}=this.props;e&&(t?(this.resetFocusedIndex(),this.scheduleToFocusCurrentItem()):t||(this.itemsClicked=!1))}updateEventListeners(){this.props.open?this.addEventListeners():this.removeEventListeners()}addEventListeners(){document.addEventListener("mouseup",this.handleInteract),document.addEventListener("touchend",this.handleInteract)}removeEventListeners(){document.removeEventListener("mouseup",this.handleInteract),document.removeEventListener("touchend",this.handleInteract)}scheduleToFocusCurrentItem(e){this.shouldVirtualizeList()?this.props.schedule.animationFrame(()=>{this.focusCurrentItem(e)}):this.focusCurrentItem(e)}focusCurrentItem(e){const t=this.state.itemRefs[this.focusedIndex];if(t){this.virtualizedListRef.current&&this.virtualizedListRef.current.scrollToItem(t.originalIndex);const n=Ie.findDOMNode(t.ref.current);n&&(n.focus(),this.focusedOriginalIndex=t.originalIndex,e&&e(n))}}focusSearchField(){this.searchFieldRef.current&&this.searchFieldRef.current.focus()}hasSearchField(){return!!this.props.isFilterable}isSearchFieldFocused(){return this.hasSearchField()&&document.activeElement===this.searchFieldRef.current}focusPreviousItem(){if(this.focusedIndex===0||this.isSearchFieldFocused()&&!this.props.enableTypeAhead){if(this.hasSearchField()&&!this.isSearchFieldFocused())return this.focusSearchField();this.focusedIndex=this.state.itemRefs.length-1}else this.focusedIndex-=1;this.scheduleToFocusCurrentItem()}focusNextItem(){if(this.focusedIndex===this.state.itemRefs.length-1||this.isSearchFieldFocused()&&!this.props.enableTypeAhead){if(this.hasSearchField()&&!this.isSearchFieldFocused())return this.focusSearchField();this.focusedIndex=0}else this.focusedIndex+=1;this.scheduleToFocusCurrentItem()}restoreTabOrder(){this.props.openerElement&&this.props.openerElement.focus()}getItemRole(){const{role:e}=this.props;switch(e){case"listbox":return"option";case"menu":return"menuitem";default:throw new Error(`Expected "listbox" or "menu" for role, but receieved "${e}" instead.`)}}maybeRenderNoResults(){const{items:e,labels:{noResults:t}}=this.props;return e.length===0?o.createElement(bt,{style:pe.noResult,testId:"dropdown-core-no-results"},t):null}shouldVirtualizeList(){return this.props.items.length>Ei}renderList(){let e=0;const t=this.getItemRole();return this.props.items.map((n,r)=>{if(ue.isClassOf(n.component))return n.component;const{component:l,focusable:i,populatedProps:c}=n;i&&(e+=1);const f=e-1,h=this.state.itemRefs[f]?this.state.itemRefs[f].ref:null;return o.cloneElement(l,d({},c,{key:r,onClick:()=>{this.handleItemClick(f,n)},ref:i?h:null,role:c.role||t}))})}parseVirtualizedItems(){let e=0;const t=this.getItemRole();return this.props.items.map((n,r)=>{const{populatedProps:l}=n;!ue.isClassOf(n.component)&&n.focusable&&(e+=1);const i=e-1;return d({},n,{role:l.role||t,ref:n.focusable&&this.state.itemRefs[i]?this.state.itemRefs[i].ref:null,onClick:()=>{this.handleItemClick(i,n)}})})}renderVirtualizedList(){const e=this.parseVirtualizedItems();return o.createElement(Si,{data:e,listRef:this.virtualizedListRef})}renderSearchField(){const{searchText:e}=this.props,{labels:t}=this.state;return o.createElement(Ks,{clearAriaLabel:t.clearSearch,onChange:this.handleSearchTextChanged,placeholder:t.filter,ref:this.searchFieldRef,style:pe.searchInputStyle,value:e||""})}renderDropdownMenu(e,t){const{"aria-invalid":n,"aria-required":r,dropdownStyle:l,isFilterable:i,light:c,openerElement:f,role:h,id:p}=this.props,b=f&&window.getComputedStyle(f),x=b?b.getPropertyValue("width"):0;return o.createElement(Ce,{onMouseUp:this.handleDropdownMouseUp,style:[pe.dropdown,c&&pe.light,t&&pe.hidden,l],testId:"dropdown-core-container"},i&&this.renderSearchField(),o.createElement(Ce,{id:p,role:h,style:[pe.listboxOrMenu,{minWidth:x}],"aria-invalid":h==="listbox"?n:void 0,"aria-required":h==="listbox"?r:void 0},e),this.maybeRenderNoResults())}renderDropdown(){const{alignment:e,openerElement:t}=this.props,n=this.shouldVirtualizeList()?this.renderVirtualizedList():this.renderList();return o.createElement(Ii,{alignment:e,onPopperElement:r=>{this.popperElement=r},referenceElement:t},r=>this.renderDropdownMenu(n,r))}renderLiveRegion(){const{items:e,open:t}=this.props,{labels:n}=this.state,r=e.length;return o.createElement(ki,{"aria-live":"polite","aria-atomic":"true","aria-relevant":"additions text",style:pe.srOnly,"data-testid":"dropdown-live-region"},t&&n.someResults(r))}render(){const{open:e,opener:t,style:n,className:r,disabled:l}=this.props;return o.createElement(Ce,{onKeyDown:l?void 0:this.handleKeyDown,onKeyUp:l?void 0:this.handleKeyUp,style:[pe.menuWrapper,n],className:r},this.renderLiveRegion(),t,e&&this.renderDropdown())}}vt.defaultProps={alignment:"left",autoFocus:!0,enableTypeAhead:!0,labels:{clearSearch:K.clearSearch,filter:K.filter,noResults:K.noResults,someResults:K.someSelected},light:!1,selectionType:"single"};const pe=v.StyleSheet.create({menuWrapper:{width:"fit-content"},dropdown:{backgroundColor:a.white,borderRadius:4,paddingTop:m.xxxSmall_4,paddingBottom:m.xxxSmall_4,border:`solid 1px ${a.offBlack16}`,boxShadow:`0px 8px 8px 0px ${Sr(a.offBlack,.1)}`,maxHeight:"var(--popper-max-height)"},light:{border:"none"},listboxOrMenu:{overflowY:"auto"},hidden:{pointerEvents:"none",visibility:"hidden"},noResult:{color:a.offBlack64,alignSelf:"center",marginTop:m.xxSmall_6},searchInputStyle:{margin:m.xSmall_8,marginTop:m.xxxSmall_4,minHeight:"auto",position:"sticky"},srOnly:{border:0,clip:"rect(0,0,0,0)",height:1,margin:-1,overflow:"hidden",padding:0,position:"absolute",width:1}});var Zt=kn(vt);const Ri=["children","disabled","focused","hovered","pressed","waiting","testId","opened","aria-label"],_i=yt("button");class Fi extends o.Component{render(){const e=this.props,{children:t,disabled:n,focused:r,hovered:l,pressed:i,testId:c,opened:f,"aria-label":h}=e,p=g(e,Ri),b=a.blue,x=Ti(b),C=n,I=[Nt.shared,C&&Nt.disabled,x.default,C&&x.disabled,!C&&i&&x.active],u=o.createElement(xr,{style:Nt.text},t);return o.createElement(_i,d({"aria-expanded":f?"true":"false","aria-haspopup":"menu","aria-label":h,disabled:C,style:I,type:"button"},p,{"data-testid":c}),o.createElement(Ce,{style:!C&&(l||r)&&x.focus},u),o.createElement(de,{size:m.xxxSmall_4}),o.createElement(St,{size:"small",color:"currentColor",icon:dr,"aria-hidden":"true"}))}}const Nt=v.StyleSheet.create({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",height:me,border:"none",borderRadius:m.xxxSmall_4,cursor:"pointer",outline:"none",textDecoration:"none",boxSizing:"border-box",touchAction:"manipulation",":focus":{WebkitTapHighlightColor:"rgba(0,0,0,0)"}},disabled:{cursor:"auto"},small:{height:m.xLarge_32},text:{textAlign:"left",display:"inline-block",alignItems:"center",fontWeight:"bold",userSelect:"none",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",pointerEvents:"none"},hiddenText:{visibility:"hidden"},spinner:{position:"absolute"}}),it={},Ti=s=>{const e=s;if(it[e])return it[e];const{offBlack32:t}=a,n=a.activeBlue;let r={};return r={default:{background:"none",color:s},focus:{":after":{content:"''",position:"absolute",height:2,left:0,right:0,bottom:-1,background:"currentColor",borderRadius:2}},active:{color:n},disabled:{color:t,cursor:"default"}},it[e]=v.StyleSheet.create(r),it[e]},zi=["text","opened"];class Pi extends o.Component{constructor(...e){super(...e),this.openerElement=void 0,this.state={opened:!1},this.handleItemSelected=()=>{this.handleOpenChanged(!1),this.openerElement&&this.openerElement.focus()},this.handleOpenChanged=t=>{this.setState({opened:t}),this.props.onToggle&&this.props.onToggle(t)},this.handleOptionSelected=t=>{const{onChange:n,selectedValues:r}=this.props;if(!(!n||!r)){if(r.includes(t)){const l=r.indexOf(t),i=[...r.slice(0,l),...r.slice(l+1)];n(i)}else n([...r,t]);this.handleItemSelected()}},this.handleOpenerRef=t=>{this.openerElement=Ie.findDOMNode(t)},this.handleClick=t=>{this.handleOpenChanged(!this.state.opened)}}static getDerivedStateFromProps(e,t){return{opened:typeof e.opened=="boolean"?e.opened:t.opened}}getMenuItems(){const{children:e,selectedValues:t}=this.props,n=o.Children.toArray(e).filter(Boolean),r=n.some(l=>ve.isClassOf(l));return n.map(l=>{const{value:i,disabled:c}=l.props,f={component:l,focusable:Fe.isClassOf(l)||ve.isClassOf(l)?!c:!1,populatedProps:{}};if(Fe.isClassOf(l))return d({},f,{populatedProps:{indent:r,onClick:this.handleItemSelected}});if(ve.isClassOf(l)){const h=t?t.includes(i):!1;return d({},f,{populatedProps:{onToggle:this.handleOptionSelected,selected:h,variant:"check",role:"menuitemcheckbox","aria-checked":h,"aria-selected":void 0}})}else return f})}renderOpener(e,t){const{disabled:n,menuText:r,opener:l,testId:i,id:c}=this.props;return o.createElement(ke,{id:c,scope:"action-menu-opener"},f=>o.createElement(Ct,{id:f,"aria-controls":t,"aria-haspopup":"menu",onClick:this.handleClick,disabled:e===0||n,text:r,ref:this.handleOpenerRef,testId:l?void 0:i,opened:this.state.opened},l||(h=>{const{opened:p}=h,b=g(h,zi);return o.createElement(Fi,d({},b,{disabled:n,opened:!!p,testId:i}),r)})))}render(){const{alignment:e,dropdownStyle:t,style:n,className:r,dropdownId:l}=this.props,i=this.getMenuItems();return o.createElement(ke,{id:l,scope:"action-menu-dropdown"},c=>o.createElement(Zt,{id:c,role:"menu",style:n,className:r,opener:this.renderOpener(i.length,c),alignment:e,open:this.state.opened,items:i,openerElement:this.openerElement,onOpenChanged:this.handleOpenChanged,dropdownStyle:[Oi.menuTopSpace,t]}))}}Pi.defaultProps={alignment:"left",disabled:!1};const Oi=v.StyleSheet.create({caret:{marginLeft:4},opener:{whiteSpace:"nowrap",userSelect:"none",overflow:"hidden",textOverflow:"ellipsis"},menuTopSpace:{top:-4}}),Bi=["children","disabled","error","id","isPlaceholder","light","open","testId","onOpenChanged"],Li=yt("button");class Yt extends o.Component{constructor(e){super(e),this.handleClick=t=>{const{open:n}=this.props;this.props.onOpenChanged(!n)},this.handleKeyDown=t=>{const n=t.key;(n==="Enter"||n===" ")&&(this.setState({pressed:!0}),t.preventDefault())},this.handleKeyUp=t=>{const n=t.key;(n==="Enter"||n===" ")&&(this.setState({pressed:!1}),this.handleClick(t))},this.state={pressed:!1}}render(){const e=this.props,{children:t,disabled:n,error:r,id:l,isPlaceholder:i,light:c,open:f,testId:h}=e,p=g(e,Bi),b=Di(c,i,r),x=c?n||r?"currentColor":a.white:n?a.offBlack32:a.offBlack64,C=[Ht.shared,b.default,n&&b.disabled,!n&&this.state.pressed&&b.pressed];return o.createElement(Li,d({},p,{"aria-disabled":n,"aria-expanded":f?"true":"false","aria-haspopup":"listbox","data-testid":h,id:l,style:C,type:"button",onClick:n?void 0:this.handleClick,onKeyDown:n?void 0:this.handleKeyDown,onKeyUp:n?void 0:this.handleKeyUp}),o.createElement(bt,{style:Ht.text},t||" "),o.createElement(St,{icon:dr,color:x,size:"small",style:Ht.caret,"aria-hidden":"true"}))}}Yt.defaultProps={disabled:!1,error:!1,light:!1,isPlaceholder:!1};const Ht=v.StyleSheet.create({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"space-between",color:a.offBlack,height:me,paddingLeft:m.medium_16,paddingRight:m.small_12,borderWidth:0,borderRadius:X.radius.medium_4,borderStyle:"solid",outline:"none",textDecoration:"none",boxSizing:"border-box",whiteSpace:"nowrap",touchAction:"manipulation"},text:{marginRight:m.xSmall_8,whiteSpace:"nowrap",userSelect:"none",overflow:"hidden",textOverflow:"ellipsis"},caret:{minWidth:16}}),at=m.medium_16-1,dt=m.small_12-1,ct={},Di=(s,e,t)=>{const n=`${s}-${e}-${t}`;if(ct[n])return ct[n];let r={};if(s){const l={borderColor:t?a.red:a.white,borderWidth:m.xxxxSmall_2,paddingLeft:at,paddingRight:dt},i={paddingLeft:at,paddingRight:dt,borderColor:t?a.red:a.fadedBlue,borderWidth:X.width.thin,color:t?a.offBlack64:e?ee(a.white32,a.blue):a.fadedBlue,backgroundColor:t?a.fadedRed:a.activeBlue};r={default:{background:t?a.fadedRed8:"transparent",color:t?a.offBlack64:e?a.white50:a.white,borderColor:t?a.red:a.white50,borderWidth:X.width.hairline,":hover:not([aria-disabled=true])":l,"@media not (hover: hover)":{":hover:not([aria-disabled=true])":{borderColor:t?a.red:a.white50,borderWidth:X.width.hairline,paddingLeft:m.medium_16,paddingRight:m.small_12}},":focus-visible:not([aria-disabled=true])":l,":active:not([aria-disabled=true])":i},disabled:{background:"transparent",borderColor:ee(a.white32,a.blue),color:ee(a.white32,a.blue),cursor:"not-allowed",":focus-visible":{boxShadow:`0 0 0 1px ${a.offBlack32}, 0 0 0 3px ${a.fadedBlue}`}},pressed:i}}else{const l={borderColor:t?a.red:a.blue,borderWidth:X.width.thin,paddingLeft:at,paddingRight:dt},i={background:t?a.fadedRed:a.fadedBlue,borderColor:t?a.red:a.activeBlue,borderWidth:X.width.thin,paddingLeft:at,paddingRight:dt};r={default:{background:t?a.fadedRed8:a.white,borderColor:t?a.red:a.offBlack50,borderWidth:X.width.hairline,color:e?a.offBlack64:a.offBlack,":hover:not([aria-disabled=true])":l,"@media not (hover: hover)":{":hover:not([aria-disabled=true])":{borderColor:t?a.red:a.offBlack50,borderWidth:X.width.hairline,paddingLeft:m.medium_16,paddingRight:m.small_12}},":focus-visible:not([aria-disabled=true])":l,":active:not([aria-disabled=true])":i},disabled:{background:a.offWhite,borderColor:a.offBlack16,color:a.offBlack64,cursor:"not-allowed",":focus-visible":{boxShadow:`0 0 0 1px ${a.white}, 0 0 0 3px ${a.offBlack32}`}},pressed:i}}return ct[n]=v.StyleSheet.create(r),ct[n]},Ni=["children","error","id","light","opener","placeholder","selectedValue","testId","alignment","autoFocus","dropdownStyle","enableTypeAhead","isFilterable","labels","onChange","onToggle","opened","style","className","aria-invalid","aria-required"];class pr extends o.Component{constructor(e){super(e),this.selectedIndex=void 0,this.handleOpenChanged=t=>{this.setState({open:t,searchText:""}),this.props.onToggle&&this.props.onToggle(t)},this.handleToggle=t=>{t!==this.props.selectedValue&&this.props.onChange(t),this.state.open&&this.state.openerElement&&this.state.openerElement.focus(),this.setState({open:!1}),this.props.onToggle&&this.props.onToggle(!1)},this.mapOptionItemsToDropdownItems=t=>{let n=0;return this.selectedIndex=0,t.map(r=>{const{selectedValue:l}=this.props,{disabled:i,value:c}=r.props,f=l===c;return f&&(this.selectedIndex=n),i||(n+=1),{component:r,focusable:!i,populatedProps:{onToggle:this.handleToggle,selected:f,variant:"check"}}})},this.handleSearchTextChanged=t=>{this.setState({searchText:t})},this.handleOpenerRef=t=>{const n=Ie.findDOMNode(t);this.setState({openerElement:n})},this.handleClick=t=>{this.handleOpenChanged(!this.state.open)},this.selectedIndex=0,this.state={open:!1,searchText:""}}static getDerivedStateFromProps(e,t){return{open:e.disabled?!1:typeof e.opened=="boolean"?e.opened:t.open}}filterChildren(e){const{searchText:t}=this.state,n=t.toLowerCase();return e.filter(({props:r})=>!t||Ae(r).toLowerCase().indexOf(n)>-1)}getMenuItems(e){const{isFilterable:t}=this.props;return this.mapOptionItemsToDropdownItems(t?this.filterChildren(e):e)}renderOpener(e,t){const n=this.props,{children:r,error:l,id:i,light:c,opener:f,placeholder:h,selectedValue:p,testId:b}=n,x=g(n,Ni),I=o.Children.toArray(r).find(S=>S.props.value===p),u=I?Ae(I.props):h;return o.createElement(ke,{id:i,scope:"single-select-opener"},S=>f?o.createElement(Ct,{id:S,"aria-controls":t,"aria-haspopup":"listbox",onClick:this.handleClick,disabled:e,ref:this.handleOpenerRef,text:u,opened:this.state.open},f):o.createElement(Yt,d({},x,{"aria-controls":t,disabled:e,id:S,error:l,isPlaceholder:!I,light:c,onOpenChanged:this.handleOpenChanged,open:this.state.open,ref:this.handleOpenerRef,testId:b}),u))}render(){const{alignment:e,autoFocus:t,children:n,className:r,dropdownStyle:l,enableTypeAhead:i,isFilterable:c,labels:f,light:h,style:p,"aria-invalid":b,"aria-required":x,disabled:C,dropdownId:I}=this.props,{searchText:u}=this.state,y=o.Children.toArray(n).filter(Boolean),S=y.filter(k=>!k.props.disabled).length,$=this.getMenuItems(y),w=S===0||C;return o.createElement(ke,{id:I,scope:"single-select-dropdown"},k=>o.createElement(Zt,{id:k,role:"listbox",selectionType:"single",alignment:e,autoFocus:t,enableTypeAhead:i,dropdownStyle:[c&&ur,cr,l],initialFocusedIndex:this.selectedIndex,items:$,light:h,onOpenChanged:this.handleOpenChanged,open:this.state.open,opener:this.renderOpener(w,k),openerElement:this.state.openerElement,style:p,className:r,isFilterable:c,onSearchTextChanged:c?this.handleSearchTextChanged:void 0,searchText:c?u:"",labels:f,"aria-invalid":b,"aria-required":x,disabled:w}))}}pr.defaultProps={alignment:"left",autoFocus:!0,disabled:!1,enableTypeAhead:!0,error:!1,light:!1,labels:{clearSearch:K.clearSearch,filter:K.filter,noResults:K.noResults,someResults:K.someSelected}};const Hi=["id","light","opener","testId","alignment","dropdownStyle","implicitAllEnabled","isFilterable","labels","onChange","onToggle","opened","selectedValues","shortcuts","style","className","aria-invalid","aria-required"];class mr extends o.Component{constructor(e){super(e),this.labels=void 0,this.handleOpenChanged=t=>{this.setState({open:t,searchText:"",lastSelectedValues:this.props.selectedValues}),this.props.onToggle&&this.props.onToggle(t)},this.handleToggle=t=>{const{onChange:n,selectedValues:r}=this.props;if(r.includes(t)){const l=r.indexOf(t),i=[...r.slice(0,l),...r.slice(l+1)];n(i)}else n([...r,t])},this.handleSelectAll=()=>{const{children:t,onChange:n}=this.props,l=o.Children.toArray(t).filter(i=>!!i&&!i.props.disabled).map(i=>i.props.value);n(l)},this.handleSelectNone=()=>{const{onChange:t}=this.props;t([])},this.mapOptionItemToDropdownItem=t=>{const{selectedValues:n}=this.props,{disabled:r,value:l}=t.props;return{component:t,focusable:!r,populatedProps:{onToggle:this.handleToggle,selected:n.includes(l),variant:"checkbox"}}},this.handleOpenerRef=t=>{const n=Ie.findDOMNode(t);this.setState({openerElement:n})},this.handleSearchTextChanged=t=>{this.setState({searchText:t})},this.handleClick=t=>{this.handleOpenChanged(!this.state.open)},this.state={open:!1,searchText:"",lastSelectedValues:[],labels:d({},K,e.labels)},this.labels=d({},K,e.labels)}static getDerivedStateFromProps(e,t){return{open:e.disabled?!1:typeof e.opened=="boolean"?e.opened:t.open}}componentDidUpdate(e){this.props.labels!==e.labels&&this.setState({labels:d({},this.state.labels,this.props.labels)})}getMenuText(e){const{implicitAllEnabled:t,selectedValues:n}=this.props,{noneSelected:r,someSelected:l,allSelected:i}=this.state.labels,c=e.filter(h=>!h.props.disabled).length,f=t?i:r;switch(n.length){case 0:return f;case 1:const h=e.find(p=>p.props.value===n[0]);if(h){const p=Ae(h==null?void 0:h.props);return p||l(1)}return f;case c:return i;default:return l(n.length)}}getShortcuts(e){const{selectedValues:t,shortcuts:n}=this.props,{selectAllLabel:r,selectNoneLabel:l}=this.state.labels;if(n&&!this.state.searchText){const i=e===t.length,c={component:o.createElement(Fe,{disabled:i,label:r(e),indent:!0,onClick:this.handleSelectAll}),focusable:!i,populatedProps:{}},f=t.length===0,h={component:o.createElement(Fe,{disabled:f,label:l,indent:!0,onClick:this.handleSelectNone}),focusable:!f,populatedProps:{}},p={component:o.createElement(ue,{key:"shortcuts-separator"}),focusable:!1,populatedProps:{}};return[c,h,p]}else return[]}getMenuItems(e){const{isFilterable:t}=this.props;if(!t)return e.map(this.mapOptionItemToDropdownItem);const{searchText:n,lastSelectedValues:r}=this.state,l=n.toLowerCase(),i=e.filter(({props:p})=>!n||Ae(p).toLowerCase().indexOf(l)>-1),c=[],f=[];for(const p of i)r.includes(p.props.value)?c.push(p):f.push(p);const h=c.map(this.mapOptionItemToDropdownItem);return c.length&&f.length&&h.push({component:o.createElement(ue,{key:"selected-separator"}),focusable:!1,populatedProps:{}}),[...h,...f.map(this.mapOptionItemToDropdownItem)]}renderOpener(e,t,n){const r=this.props,{id:l,light:i,opener:c,testId:f}=r,h=g(r,Hi),{noneSelected:p}=this.state.labels,b=this.getMenuText(e);return o.createElement(ke,{id:l,scope:"multi-select-opener"},C=>c?o.createElement(Ct,{id:C,"aria-controls":n,"aria-haspopup":"listbox",onClick:this.handleClick,disabled:t,ref:this.handleOpenerRef,text:b,opened:this.state.open},c):o.createElement(Yt,d({},h,{disabled:t,id:C,"aria-controls":n,isPlaceholder:b===p,light:i,onOpenChanged:this.handleOpenChanged,open:this.state.open,ref:this.handleOpenerRef,testId:f}),b))}render(){const{alignment:e,light:t,style:n,className:r,dropdownStyle:l,children:i,isFilterable:c,"aria-invalid":f,"aria-required":h,disabled:p,dropdownId:b}=this.props,{open:x,searchText:C}=this.state,{clearSearch:I,filter:u,noResults:y,someSelected:S}=this.state.labels,$=o.Children.toArray(i).filter(Boolean),w=$.filter(R=>!R.props.disabled).length,k=this.getMenuItems($),E=w===0||p;return o.createElement(ke,{id:b,scope:"multi-select-dropdown"},R=>o.createElement(Zt,{id:R,role:"listbox",alignment:e,dropdownStyle:[c&&ur,cr,l],isFilterable:c,items:[...this.getShortcuts(w),...k],light:t,onOpenChanged:this.handleOpenChanged,open:x,opener:this.renderOpener($,E,R),openerElement:this.state.openerElement,selectionType:"multi",style:n,className:r,onSearchTextChanged:c?this.handleSearchTextChanged:void 0,searchText:c?C:"",labels:{clearSearch:I,filter:u,noResults:y,someResults:S},"aria-invalid":f,"aria-required":h,disabled:E}))}}mr.defaultProps={alignment:"left",disabled:!1,error:!1,light:!1,shortcuts:!1,selectedValues:[]};v.StyleSheet.create({listbox:{outline:"none"},disabled:{color:a.offBlack64}});const Mi=s=>{const{strings:e}=kr(),t=h=>{const{choices:p,onChange:b}=s;b(p.map(x=>h.includes(x.content)))},n=h=>h.map(({content:p})=>et(ve,{value:p,label:et(Rr,{content:p,strings:e,inline:!0})},p)),r=s.choices.filter(h=>h.checked).map(h=>h.content),{opener:l,onToggle:i,disabled:c}=s,f={style:{zIndex:"unset"},children:n(s.choices),opener:l,onToggle:i,disabled:c};return s.multipleSelect?et(mr,{...f,selectedValues:r,onChange:h=>t(h)}):et(pr,{...f,selectedValue:r[0],onChange:h=>t([h]),placeholder:s.choices[0].content})};Mi.__docgenInfo={description:"",methods:[],displayName:"AnswerChoices",props:{choices:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ // The answer string, can be plain text or a TeX expression. content: string; // Whether the answer is selected. diff --git a/assets/answer-choices.stories-yHzR0jgj.js b/assets/answer-choices.stories-F8vp1E0x.js similarity index 89% rename from assets/answer-choices.stories-yHzR0jgj.js rename to assets/answer-choices.stories-F8vp1E0x.js index c77fa3618e..4216b043a8 100644 --- a/assets/answer-choices.stories-yHzR0jgj.js +++ b/assets/answer-choices.stories-F8vp1E0x.js @@ -1,4 +1,4 @@ -import{j as t,a as _,F as c}from"./jsx-runtime-FVsy8kgq.js";import{L as y}from"./index-h_CiYGGb.js";import{r as p}from"./index-TT1qJ6UJ.js";import{A as b}from"./answer-choices-uB4giKvU.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-o3wWn3Y5.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-deFLJwr4.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./index-7vsPyIck.js";import"./index-rfN0X25E.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-YCTzZMik.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./renderer-vBOYiNCS.js";import"./version-akiLXZts.js";import"./util-XcxTwqb0.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";const ge={title:"Perseus/Widgets/Label Image/Answer Choices"},A=[{content:"Lamborghini",checked:!1},{content:"BMW",checked:!1},{content:"Volkswagen",checked:!1},{content:"Fiat",checked:!1},{content:"$\\displaystyle f(x)=\\frac{1}{x}$",checked:!1},{content:"Porsche",checked:!1},{content:"Ferrari",checked:!1}],a=({multipleSelect:s})=>{const[i,g]=p.useState([...A]),[f,S]=p.useState(!1),k=e=>{g([...i.map((C,x)=>({...C,checked:e[x]}))])};return _(c,{children:[t(b,{choices:i,multipleSelect:s,onChange:e=>k(e),opener:()=>t("button",{children:f?"Close":"Open"}),onToggle:e=>S(e),disabled:!1}),t(c,{children:i.filter(({checked:e})=>e).map(({content:e})=>t(y,{children:e},e))})]})};a.defaultProps={multipleSelect:!1};const r=s=>t(a,{}),o=s=>t(a,{multipleSelect:!0});r.__docgenInfo={description:"",methods:[],displayName:"SingleSelect"};o.__docgenInfo={description:"",methods:[],displayName:"MultipleSelect"};var m,n,l;r.parameters={...r.parameters,docs:{...(m=r.parameters)==null?void 0:m.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as t,a as _,F as c}from"./jsx-runtime-FVsy8kgq.js";import{L as y}from"./index-h_CiYGGb.js";import{r as p}from"./index-TT1qJ6UJ.js";import{A as b}from"./answer-choices-xSqM961S.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-o3wWn3Y5.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-deFLJwr4.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./index-7vsPyIck.js";import"./index-rfN0X25E.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-YCTzZMik.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./renderer-hPmI_Chp.js";import"./version-akiLXZts.js";import"./util-YrNvlCNO.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";const ge={title:"Perseus/Widgets/Label Image/Answer Choices"},A=[{content:"Lamborghini",checked:!1},{content:"BMW",checked:!1},{content:"Volkswagen",checked:!1},{content:"Fiat",checked:!1},{content:"$\\displaystyle f(x)=\\frac{1}{x}$",checked:!1},{content:"Porsche",checked:!1},{content:"Ferrari",checked:!1}],a=({multipleSelect:s})=>{const[i,g]=p.useState([...A]),[f,S]=p.useState(!1),k=e=>{g([...i.map((C,x)=>({...C,checked:e[x]}))])};return _(c,{children:[t(b,{choices:i,multipleSelect:s,onChange:e=>k(e),opener:()=>t("button",{children:f?"Close":"Open"}),onToggle:e=>S(e),disabled:!1}),t(c,{children:i.filter(({checked:e})=>e).map(({content:e})=>t(y,{children:e},e))})]})};a.defaultProps={multipleSelect:!1};const r=s=>t(a,{}),o=s=>t(a,{multipleSelect:!0});r.__docgenInfo={description:"",methods:[],displayName:"SingleSelect"};o.__docgenInfo={description:"",methods:[],displayName:"MultipleSelect"};var m,n,l;r.parameters={...r.parameters,docs:{...(m=r.parameters)==null?void 0:m.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(l=(n=r.parameters)==null?void 0:n.docs)==null?void 0:l.source}}};var d,h,u;o.parameters={...o.parameters,docs:{...(d=o.parameters)==null?void 0:d.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/answer-choices.stories-1uyTphLo.js b/assets/answer-choices.stories-O3Q8nORE.js similarity index 74% rename from assets/answer-choices.stories-1uyTphLo.js rename to assets/answer-choices.stories-O3Q8nORE.js index d1e8a5cb3d..c552b753fc 100644 --- a/assets/answer-choices.stories-1uyTphLo.js +++ b/assets/answer-choices.stories-O3Q8nORE.js @@ -1,4 +1,4 @@ -import{j as o}from"./jsx-runtime-FVsy8kgq.js";import{a as y}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{l as C}from"./index-awljIyHI.js";import{r as S}from"./index-TT1qJ6UJ.js";import{A as v}from"./answer-choices-SJhxKMzc.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./form-wrapped-text-field-DtGz9PJ5.js";const ut={title:"PerseusEditor/Widgets/Label Image/Answer Choices"},E=C.StyleSheet.create({wrapper:{width:338}}),s=r=>o("div",{className:C.css(E.wrapper),children:o(v,{...r,onChange:(...t)=>{y("onChange")(...t),r.onChange(...t)}})});class N extends S.Component{constructor(){super(...arguments),this.state={choices:[]}}render(){const{choices:t}=this.state;return o(s,{choices:t,onChange:m=>this.setState({choices:m})})}}const i=r=>o(s,{...{choices:[],onChange:(...m)=>{}}}),e=r=>o(s,{...{choices:["Lamborghini","BMW","Volkswagen","Fiat","Porsche","Ferrari"],onChange:(...m)=>{}}}),p=r=>o(N,{});i.__docgenInfo={description:"",methods:[],displayName:"EmptyNonInteractive"};e.__docgenInfo={description:"",methods:[],displayName:"FilledNonInteractive"};p.__docgenInfo={description:"",methods:[],displayName:"Interactive"};var a,n,c;i.parameters={...i.parameters,docs:{...(a=i.parameters)==null?void 0:a.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as o}from"./jsx-runtime-FVsy8kgq.js";import{a as y}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{l as C}from"./index-awljIyHI.js";import{r as S}from"./index-TT1qJ6UJ.js";import{A as v}from"./answer-choices-2q3o0s95.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./form-wrapped-text-field-BopYavUW.js";const ut={title:"PerseusEditor/Widgets/Label Image/Answer Choices"},E=C.StyleSheet.create({wrapper:{width:338}}),s=r=>o("div",{className:C.css(E.wrapper),children:o(v,{...r,onChange:(...t)=>{y("onChange")(...t),r.onChange(...t)}})});class N extends S.Component{constructor(){super(...arguments),this.state={choices:[]}}render(){const{choices:t}=this.state;return o(s,{choices:t,onChange:m=>this.setState({choices:m})})}}const i=r=>o(s,{...{choices:[],onChange:(...m)=>{}}}),e=r=>o(s,{...{choices:["Lamborghini","BMW","Volkswagen","Fiat","Porsche","Ferrari"],onChange:(...m)=>{}}}),p=r=>o(N,{});i.__docgenInfo={description:"",methods:[],displayName:"EmptyNonInteractive"};e.__docgenInfo={description:"",methods:[],displayName:"FilledNonInteractive"};p.__docgenInfo={description:"",methods:[],displayName:"Interactive"};var a,n,c;i.parameters={...i.parameters,docs:{...(a=i.parameters)==null?void 0:a.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const props = ({ choices: [], onChange: (...args) => {} diff --git a/assets/answer-pill-YUUkj-ih.js b/assets/answer-pill-NjYGKpaV.js similarity index 98% rename from assets/answer-pill-YUUkj-ih.js rename to assets/answer-pill-NjYGKpaV.js index c592887b69..cc16f0ddfa 100644 --- a/assets/answer-pill-YUUkj-ih.js +++ b/assets/answer-pill-NjYGKpaV.js @@ -1 +1 @@ -import{j as k}from"./jsx-runtime-FVsy8kgq.js";import{V as B,u as I}from"./index-6h5t6F0w.js";import{r as d}from"./index-TT1qJ6UJ.js";import{l as C}from"./index-awljIyHI.js";import{C as R}from"./index-o3wWn3Y5.js";import{s as n,c as l,m as P}from"./index-deFLJwr4.js";import{c as T,B as E,b as O}from"./index-h_CiYGGb.js";import{P as L}from"./Popper-kGnKOid7.js";import{u as q}from"./i18n-context-hxuRe8oU.js";import{R as j}from"./renderer-vBOYiNCS.js";function w(){return w=Object.assign?Object.assign.bind():function(a){for(var e=1;e=0)&&(t[o]=a[o]);return t}const $=["id","children","kind","size","role","onClick","style","testId","tabIndex"],_=a=>{const{children:e,size:t}=a;return typeof e!="string"?e:t==="small"?d.createElement(T,null,a.children):t==="large"?d.createElement(E,null,e):d.createElement(O,null,e)},A=d.forwardRef(function(e,t){const{id:r,children:o,kind:i="neutral",size:s="medium",role:p,onClick:c,style:u,testId:f,tabIndex:S}=e,g=z(e,$);let m;switch(s){case"small":m=h.wrapperSmall;break;case"large":m=h.wrapperLarge;break;default:m=h.wrapperMedium}const x=M(!!c,i),b=[h.wrapper,x.pill,m];return c?d.createElement(R,w({id:r,role:p,onClick:c,style:[b,x.clickableWrapper,u],testId:f,ref:t,tabIndex:S},g),()=>d.createElement(_,{size:s},o)):d.createElement(B,w({id:r,role:p,style:[b,u],testId:f,ref:t},g),d.createElement(_,{size:s},o))}),h=C.StyleSheet.create({wrapper:{display:"inline-flex",width:"fit-content"},wrapperSmall:{paddingLeft:n.xSmall_8,paddingRight:n.xSmall_8,borderRadius:n.xxSmall_6,height:20},wrapperMedium:{paddingLeft:n.xSmall_8,paddingRight:n.xSmall_8,borderRadius:n.xxSmall_6,height:n.large_24},wrapperLarge:{paddingLeft:n.small_12,paddingRight:n.small_12,paddingTop:n.xxSmall_6,paddingBottom:n.xxSmall_6,borderRadius:n.large_24,height:n.xLarge_32}}),y={},M=(a,e)=>{const t=`${e}-${a.toString()}`;if(y[t])return y[t];let r;switch(e){case"accent":r=l.blue;break;case"info":r=l.fadedBlue16;break;case"success":r=l.fadedGreen16;break;case"warning":r=l.fadedGold16;break;case"critical":r=l.fadedRed16;break;case"transparent":r="transparent";break;case"neutral":default:r=l.offBlack8}const o=e==="neutral"||e==="transparent"?l.offBlack16:P(l.offBlack32,r),i=e==="accent"?l.white:l.offBlack,s=e==="critical"?l.red:l.blue,p=e==="critical"?l.activeRed:l.activeBlue,c=e==="transparent"?`1px solid ${l.offBlack16}`:"none",u={pill:{backgroundColor:r,outline:c,color:i,alignItems:"center",justifyContent:"center"},clickableWrapper:{outline:c,":hover":{outline:`2px solid ${s}`,outlineOffset:n.xxxxSmall_2},":active":{backgroundColor:o,outline:`2px solid ${p}`,outlineOffset:n.xxxxSmall_2},":focus-visible":{outline:`2px solid ${s}`,outlineOffset:n.xxxxSmall_2}}};return y[t]=C.StyleSheet.create(u),y[t]},W={boxShadow:`0 8px 8px ${l.offBlack64}`,zIndex:1e3},F=a=>{const{selectedAnswers:e,showCorrectness:t,markerRef:r,side:o,onClick:i,style:s,focused:p,hovered:c}=a,u=I(),{strings:f}=q(),S=e.length>1?f.answers({num:e.length}):e[0],g=t==="correct",m=t==="incorrect";return k(L,{placement:o,referenceElement:r,modifiers:[{name:"preventOverflow",options:{rootBoundary:"viewport"}}],children:({ref:x,style:b})=>k(A,{size:"large",kind:"accent",id:u.get("perseus-label-image-widget-answer-pill"),onClick:g?void 0:i,ref:x,style:[s,b,v.pill,g&&v.correct,m&&v.incorrect,(p||c)&&W],children:k(j,{content:S,strings:f,inline:!0})})})},v=C.StyleSheet.create({correct:{backgroundColor:"#00880b"},incorrect:{backgroundColor:l.offBlack64},pill:{height:"auto"}});F.__docgenInfo={description:"",methods:[],displayName:"AnswerPill",props:{selectedAnswers:{required:!0,tsType:{name:"unknown"},description:""},showCorrectness:{required:!1,tsType:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}]},description:""},markerRef:{required:!1,tsType:{name:"HTMLElement"},description:""},side:{required:!0,tsType:{name:"union",raw:'"top" | "bottom" | "left" | "right"',elements:[{name:"literal",value:'"top"'},{name:"literal",value:'"bottom"'},{name:"literal",value:'"left"'},{name:"literal",value:'"right"'}]},description:""},style:{required:!1,tsType:{name:"CSSProperties"},description:""},hovered:{required:!1,tsType:{name:"boolean"},description:""},focused:{required:!1,tsType:{name:"boolean"},description:""},onClick:{required:!1,tsType:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},description:""}}};export{F as A}; +import{j as k}from"./jsx-runtime-FVsy8kgq.js";import{V as B,u as I}from"./index-6h5t6F0w.js";import{r as d}from"./index-TT1qJ6UJ.js";import{l as C}from"./index-awljIyHI.js";import{C as R}from"./index-o3wWn3Y5.js";import{s as n,c as l,m as P}from"./index-deFLJwr4.js";import{c as T,B as E,b as O}from"./index-h_CiYGGb.js";import{P as L}from"./Popper-kGnKOid7.js";import{u as q}from"./i18n-context-hxuRe8oU.js";import{R as j}from"./renderer-hPmI_Chp.js";function w(){return w=Object.assign?Object.assign.bind():function(a){for(var e=1;e=0)&&(t[o]=a[o]);return t}const $=["id","children","kind","size","role","onClick","style","testId","tabIndex"],_=a=>{const{children:e,size:t}=a;return typeof e!="string"?e:t==="small"?d.createElement(T,null,a.children):t==="large"?d.createElement(E,null,e):d.createElement(O,null,e)},A=d.forwardRef(function(e,t){const{id:r,children:o,kind:i="neutral",size:s="medium",role:p,onClick:c,style:u,testId:f,tabIndex:S}=e,g=z(e,$);let m;switch(s){case"small":m=h.wrapperSmall;break;case"large":m=h.wrapperLarge;break;default:m=h.wrapperMedium}const x=M(!!c,i),b=[h.wrapper,x.pill,m];return c?d.createElement(R,w({id:r,role:p,onClick:c,style:[b,x.clickableWrapper,u],testId:f,ref:t,tabIndex:S},g),()=>d.createElement(_,{size:s},o)):d.createElement(B,w({id:r,role:p,style:[b,u],testId:f,ref:t},g),d.createElement(_,{size:s},o))}),h=C.StyleSheet.create({wrapper:{display:"inline-flex",width:"fit-content"},wrapperSmall:{paddingLeft:n.xSmall_8,paddingRight:n.xSmall_8,borderRadius:n.xxSmall_6,height:20},wrapperMedium:{paddingLeft:n.xSmall_8,paddingRight:n.xSmall_8,borderRadius:n.xxSmall_6,height:n.large_24},wrapperLarge:{paddingLeft:n.small_12,paddingRight:n.small_12,paddingTop:n.xxSmall_6,paddingBottom:n.xxSmall_6,borderRadius:n.large_24,height:n.xLarge_32}}),y={},M=(a,e)=>{const t=`${e}-${a.toString()}`;if(y[t])return y[t];let r;switch(e){case"accent":r=l.blue;break;case"info":r=l.fadedBlue16;break;case"success":r=l.fadedGreen16;break;case"warning":r=l.fadedGold16;break;case"critical":r=l.fadedRed16;break;case"transparent":r="transparent";break;case"neutral":default:r=l.offBlack8}const o=e==="neutral"||e==="transparent"?l.offBlack16:P(l.offBlack32,r),i=e==="accent"?l.white:l.offBlack,s=e==="critical"?l.red:l.blue,p=e==="critical"?l.activeRed:l.activeBlue,c=e==="transparent"?`1px solid ${l.offBlack16}`:"none",u={pill:{backgroundColor:r,outline:c,color:i,alignItems:"center",justifyContent:"center"},clickableWrapper:{outline:c,":hover":{outline:`2px solid ${s}`,outlineOffset:n.xxxxSmall_2},":active":{backgroundColor:o,outline:`2px solid ${p}`,outlineOffset:n.xxxxSmall_2},":focus-visible":{outline:`2px solid ${s}`,outlineOffset:n.xxxxSmall_2}}};return y[t]=C.StyleSheet.create(u),y[t]},W={boxShadow:`0 8px 8px ${l.offBlack64}`,zIndex:1e3},F=a=>{const{selectedAnswers:e,showCorrectness:t,markerRef:r,side:o,onClick:i,style:s,focused:p,hovered:c}=a,u=I(),{strings:f}=q(),S=e.length>1?f.answers({num:e.length}):e[0],g=t==="correct",m=t==="incorrect";return k(L,{placement:o,referenceElement:r,modifiers:[{name:"preventOverflow",options:{rootBoundary:"viewport"}}],children:({ref:x,style:b})=>k(A,{size:"large",kind:"accent",id:u.get("perseus-label-image-widget-answer-pill"),onClick:g?void 0:i,ref:x,style:[s,b,v.pill,g&&v.correct,m&&v.incorrect,(p||c)&&W],children:k(j,{content:S,strings:f,inline:!0})})})},v=C.StyleSheet.create({correct:{backgroundColor:"#00880b"},incorrect:{backgroundColor:l.offBlack64},pill:{height:"auto"}});F.__docgenInfo={description:"",methods:[],displayName:"AnswerPill",props:{selectedAnswers:{required:!0,tsType:{name:"unknown"},description:""},showCorrectness:{required:!1,tsType:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}]},description:""},markerRef:{required:!1,tsType:{name:"HTMLElement"},description:""},side:{required:!0,tsType:{name:"union",raw:'"top" | "bottom" | "left" | "right"',elements:[{name:"literal",value:'"top"'},{name:"literal",value:'"bottom"'},{name:"literal",value:'"left"'},{name:"literal",value:'"right"'}]},description:""},style:{required:!1,tsType:{name:"CSSProperties"},description:""},hovered:{required:!1,tsType:{name:"boolean"},description:""},focused:{required:!1,tsType:{name:"boolean"},description:""},onClick:{required:!1,tsType:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},description:""}}};export{F as A}; diff --git a/assets/answer-pill.stories-VkLpBIz9.js b/assets/answer-pill.stories-vFl2dhw0.js similarity index 90% rename from assets/answer-pill.stories-VkLpBIz9.js rename to assets/answer-pill.stories-vFl2dhw0.js index 204962e420..4afd702dac 100644 --- a/assets/answer-pill.stories-VkLpBIz9.js +++ b/assets/answer-pill.stories-vFl2dhw0.js @@ -1,4 +1,4 @@ -import{j as C}from"./jsx-runtime-FVsy8kgq.js";import{A as t}from"./answer-pill-YUUkj-ih.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./index-o3wWn3Y5.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./index-7vsPyIck.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./renderer-vBOYiNCS.js";import"./version-akiLXZts.js";import"./util-XcxTwqb0.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";const tr={title:"Perseus/Widgets/Label Image/Answer Pill",component:t,render:k=>C(t,{...k}),argTypes:{showCorrectness:{options:["not answered","correct","incorrect"],control:{type:"radio"}}}},r={args:{id:"1",selectedAnswers:["Answer Pill"],markerRef:null,side:"top",onClick:()=>{}}},e={args:{id:"1",selectedAnswers:["Answer 1","Answer 2"],markerRef:null,side:"top",onClick:()=>{}}},s={args:{id:"1",selectedAnswers:["Right Answer"],showCorrectness:"correct",markerRef:null,side:"top",onClick:()=>{}}},o={args:{id:"1",selectedAnswers:["Wrong Answer"],showCorrectness:"incorrect",markerRef:null,side:"top",onClick:()=>{}}};var n,i,c;r.parameters={...r.parameters,docs:{...(n=r.parameters)==null?void 0:n.docs,source:{originalSource:`{ +import{j as C}from"./jsx-runtime-FVsy8kgq.js";import{A as t}from"./answer-pill-NjYGKpaV.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./index-o3wWn3Y5.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./index-7vsPyIck.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./renderer-hPmI_Chp.js";import"./version-akiLXZts.js";import"./util-YrNvlCNO.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";const tr={title:"Perseus/Widgets/Label Image/Answer Pill",component:t,render:k=>C(t,{...k}),argTypes:{showCorrectness:{options:["not answered","correct","incorrect"],control:{type:"radio"}}}},r={args:{id:"1",selectedAnswers:["Answer Pill"],markerRef:null,side:"top",onClick:()=>{}}},e={args:{id:"1",selectedAnswers:["Answer 1","Answer 2"],markerRef:null,side:"top",onClick:()=>{}}},s={args:{id:"1",selectedAnswers:["Right Answer"],showCorrectness:"correct",markerRef:null,side:"top",onClick:()=>{}}},o={args:{id:"1",selectedAnswers:["Wrong Answer"],showCorrectness:"incorrect",markerRef:null,side:"top",onClick:()=>{}}};var n,i,c;r.parameters={...r.parameters,docs:{...(n=r.parameters)==null?void 0:n.docs,source:{originalSource:`{ args: { id: "1", selectedAnswers: ["Answer Pill"], diff --git a/assets/article-editor-bhN33pAO.js b/assets/article-editor-_CIVbpzD.js similarity index 94% rename from assets/article-editor-bhN33pAO.js rename to assets/article-editor-_CIVbpzD.js index 55f7a2ba4b..757cdbef5d 100644 --- a/assets/article-editor-bhN33pAO.js +++ b/assets/article-editor-_CIVbpzD.js @@ -1,4 +1,4 @@ -import{j as t,a as s}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import{_ as i}from"./jquery-yG1GhClm.js";import{P as d,E as c}from"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as u}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as g}from"./components-GHvuFaIn.js";import{I as v}from"./icon-paths-AuJwhOz7.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{r as w}from"./index-TT1qJ6UJ.js";import{D as R}from"./device-framer-YjfQ5GqB.js";import{I as _,J as k}from"./register-all-widgets-and-editors-for-testing-EmJZ0mCF.js";import{S as o}from"./section-control-button-c-G3Veu9.js";import{E as b}from"./editor-HVcPyY4Q.js";const{HUD:P,InlineIcon:C}=g,{iconCircleArrowDown:A,iconCircleArrowUp:S,iconPlus:h,iconTrash:E}=v,m=class m extends w.Component{constructor(){super(...arguments),this.state={highlightLint:!0},this._handleJsonChange=n=>{this.props.onChange({json:n})},this._handleEditorChange=(n,e)=>{const a=i.clone(this._sections());a[n]=i.extend({},a[n],e),this.props.onChange({json:a})}}componentDidMount(){this._updatePreviewFrames()}componentDidUpdate(){this._updatePreviewFrames()}_updatePreviewFrames(){this.props.mode==="preview"?this.refs["frame-all"].sendNewData({type:"article-all",data:this._sections().map((n,e)=>this._apiOptionsForSection(n,e))}):this.props.mode==="edit"&&this._sections().forEach((n,e)=>{this.refs["frame-"+e].sendNewData({type:"article",data:this._apiOptionsForSection(n,e)})})}_apiOptionsForSection(n,e){const a=this.refs[`editor${e}`];return{apiOptions:{...u.defaults,...this.props.apiOptions,showAlignmentOptions:!0,isArticle:!0},json:n,useNewStyles:this.props.useNewStyles,linterContext:{contentType:"article",highlightLint:this.state.highlightLint,paths:this.props.contentPaths},legacyPerseusLint:a?a.getSaveWarnings():[]}}_sections(){return Array.isArray(this.props.json)?this.props.json:[this.props.json]}_renderEditor(){const{imageUploader:n,sectionImageUploadGenerator:e}=this.props,a={...u.defaults,...this.props.apiOptions,showAlignmentOptions:!0,isArticle:!0},p=this._sections();return s("div",{className:"perseus-editor-table",children:[p.map((y,r)=>[s("div",{className:"perseus-editor-row",children:[s("div",{className:"perseus-editor-left-cell",children:[s("div",{className:"pod-title",children:["Section ",r+1,s("div",{style:{display:"inline-block",float:"right"},children:[e(r),t(o,{icon:h,onClick:()=>{this._handleAddSectionAfter(r)},title:"Add a new section after this one"}),r+1{this._handleMoveSectionLater(r)},title:"Move this section down"}),r>0&&t(o,{icon:S,onClick:()=>{this._handleMoveSectionEarlier(r)},title:"Move this section up"}),t(o,{icon:E,onClick:()=>{const f="Are you sure you want to delete section "+(r+1)+"?";confirm(f)&&this._handleRemoveSection(r)},title:"Delete this section"})]})]}),t(b,{...y,apiOptions:a,imageUploader:n,onChange:i.partial(this._handleEditorChange,r),placeholder:"Type your section text here...",ref:"editor"+r})]}),t("div",{className:"editor-preview",children:this._renderIframePreview(r,!0)})]},r)]),this._renderAddSection(),this._renderLinterHUD()]})}_renderAddSection(){return t("div",{className:"perseus-editor-row",children:t("div",{className:"perseus-editor-left-cell",children:s("a",{href:"#",className:"simple-button orange",onClick:()=>{this._handleAddSectionAfter(this._sections().length-1)},children:[t(C,{...h})," Add a section"]})})})}_renderLinterHUD(){return t(P,{message:"Style warnings",enabled:this.state.highlightLint,onClick:()=>{this.setState({highlightLint:!this.state.highlightLint})}})}_renderIframePreview(n,e){const a=this.props.screen==="phone"||this.props.screen==="tablet";return t(R,{deviceType:this.props.screen,nochrome:e,children:t(_,{ref:"frame-"+n,datasetKey:"mobile",datasetValue:a,seamless:e,url:this.props.previewURL},this.props.screen)})}_renderPreviewMode(){return t("div",{className:"standalone-preview",children:this._renderIframePreview("all",!1)})}_handleMoveSectionEarlier(n){if(n===0)return;const e=i.clone(this._sections()),a=e[n];e.splice(n,1),e.splice(n-1,0,a),this.props.onChange({json:e})}_handleMoveSectionLater(n){const e=i.clone(this._sections());if(n+1===e.length)return;const a=e[n];e.splice(n,1),e.splice(n+1,0,a),this.props.onChange({json:e})}_handleAddSectionAfter(n){const e=i.clone(this.serialize()),a=n>=0?{widgets:e[n].widgets}:{};e.splice(n+1,0,a),this.props.onChange({json:e})}_handleRemoveSection(n){const e=i.clone(this._sections());e.splice(n,1),this.props.onChange({json:e})}serialize(){if(this.props.mode==="edit")return this._sections().map((n,e)=>this.refs["editor"+e].serialize());if(this.props.mode==="preview"||this.props.mode==="json")return this.props.json;throw new d("Could not serialize; mode "+this.props.mode+" not found",c.Internal)}getSaveWarnings(){if(this.props.mode!=="edit")throw new d("Can only get save warnings in edit mode.",c.NotAllowed);return this._sections().map((n,e)=>this.refs["editor"+e].getSaveWarnings())}render(){return s("div",{className:"framework-perseus perseus-article-editor",children:[this.props.mode==="edit"&&this._renderEditor(),this.props.mode==="preview"&&this._renderPreviewMode(),this.props.mode==="json"&&s("div",{className:"json-editor",children:[t("div",{className:"json-editor-warning",children:t("span",{children:"Warning: Editing in this mode can lead to broken articles!"})}),t(k,{multiLine:!0,onChange:this._handleJsonChange,value:this.props.json})]})]})}};m.defaultProps={contentPaths:[],json:[{}],mode:"edit",screen:"desktop",sectionImageUploadGenerator:()=>t("span",{}),useNewStyles:!1};let l=m;l.__docgenInfo={description:"",methods:[{name:"_updatePreviewFrames",docblock:null,modifiers:[],params:[],returns:null},{name:"_apiOptionsForSection",docblock:null,modifiers:[],params:[{name:"section",optional:!1,type:{name:"signature",type:"object",raw:`{ +import{j as t,a as s}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import{_ as i}from"./jquery-yG1GhClm.js";import{P as d,E as c}from"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as u}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as g}from"./components-h6HHhmoA.js";import{I as v}from"./icon-paths-AuJwhOz7.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{r as w}from"./index-TT1qJ6UJ.js";import{D as R}from"./device-framer-kfyrsN2-.js";import{I as _,J as k}from"./register-all-widgets-and-editors-for-testing-Duh1ZXvu.js";import{S as o}from"./section-control-button-J8oVp9bZ.js";import{E as b}from"./editor-I-vnrXtz.js";const{HUD:P,InlineIcon:C}=g,{iconCircleArrowDown:A,iconCircleArrowUp:S,iconPlus:h,iconTrash:E}=v,m=class m extends w.Component{constructor(){super(...arguments),this.state={highlightLint:!0},this._handleJsonChange=n=>{this.props.onChange({json:n})},this._handleEditorChange=(n,e)=>{const a=i.clone(this._sections());a[n]=i.extend({},a[n],e),this.props.onChange({json:a})}}componentDidMount(){this._updatePreviewFrames()}componentDidUpdate(){this._updatePreviewFrames()}_updatePreviewFrames(){this.props.mode==="preview"?this.refs["frame-all"].sendNewData({type:"article-all",data:this._sections().map((n,e)=>this._apiOptionsForSection(n,e))}):this.props.mode==="edit"&&this._sections().forEach((n,e)=>{this.refs["frame-"+e].sendNewData({type:"article",data:this._apiOptionsForSection(n,e)})})}_apiOptionsForSection(n,e){const a=this.refs[`editor${e}`];return{apiOptions:{...u.defaults,...this.props.apiOptions,showAlignmentOptions:!0,isArticle:!0},json:n,useNewStyles:this.props.useNewStyles,linterContext:{contentType:"article",highlightLint:this.state.highlightLint,paths:this.props.contentPaths},legacyPerseusLint:a?a.getSaveWarnings():[]}}_sections(){return Array.isArray(this.props.json)?this.props.json:[this.props.json]}_renderEditor(){const{imageUploader:n,sectionImageUploadGenerator:e}=this.props,a={...u.defaults,...this.props.apiOptions,showAlignmentOptions:!0,isArticle:!0},p=this._sections();return s("div",{className:"perseus-editor-table",children:[p.map((y,r)=>[s("div",{className:"perseus-editor-row",children:[s("div",{className:"perseus-editor-left-cell",children:[s("div",{className:"pod-title",children:["Section ",r+1,s("div",{style:{display:"inline-block",float:"right"},children:[e(r),t(o,{icon:h,onClick:()=>{this._handleAddSectionAfter(r)},title:"Add a new section after this one"}),r+1{this._handleMoveSectionLater(r)},title:"Move this section down"}),r>0&&t(o,{icon:S,onClick:()=>{this._handleMoveSectionEarlier(r)},title:"Move this section up"}),t(o,{icon:E,onClick:()=>{const f="Are you sure you want to delete section "+(r+1)+"?";confirm(f)&&this._handleRemoveSection(r)},title:"Delete this section"})]})]}),t(b,{...y,apiOptions:a,imageUploader:n,onChange:i.partial(this._handleEditorChange,r),placeholder:"Type your section text here...",ref:"editor"+r})]}),t("div",{className:"editor-preview",children:this._renderIframePreview(r,!0)})]},r)]),this._renderAddSection(),this._renderLinterHUD()]})}_renderAddSection(){return t("div",{className:"perseus-editor-row",children:t("div",{className:"perseus-editor-left-cell",children:s("a",{href:"#",className:"simple-button orange",onClick:()=>{this._handleAddSectionAfter(this._sections().length-1)},children:[t(C,{...h})," Add a section"]})})})}_renderLinterHUD(){return t(P,{message:"Style warnings",enabled:this.state.highlightLint,onClick:()=>{this.setState({highlightLint:!this.state.highlightLint})}})}_renderIframePreview(n,e){const a=this.props.screen==="phone"||this.props.screen==="tablet";return t(R,{deviceType:this.props.screen,nochrome:e,children:t(_,{ref:"frame-"+n,datasetKey:"mobile",datasetValue:a,seamless:e,url:this.props.previewURL},this.props.screen)})}_renderPreviewMode(){return t("div",{className:"standalone-preview",children:this._renderIframePreview("all",!1)})}_handleMoveSectionEarlier(n){if(n===0)return;const e=i.clone(this._sections()),a=e[n];e.splice(n,1),e.splice(n-1,0,a),this.props.onChange({json:e})}_handleMoveSectionLater(n){const e=i.clone(this._sections());if(n+1===e.length)return;const a=e[n];e.splice(n,1),e.splice(n+1,0,a),this.props.onChange({json:e})}_handleAddSectionAfter(n){const e=i.clone(this.serialize()),a=n>=0?{widgets:e[n].widgets}:{};e.splice(n+1,0,a),this.props.onChange({json:e})}_handleRemoveSection(n){const e=i.clone(this._sections());e.splice(n,1),this.props.onChange({json:e})}serialize(){if(this.props.mode==="edit")return this._sections().map((n,e)=>this.refs["editor"+e].serialize());if(this.props.mode==="preview"||this.props.mode==="json")return this.props.json;throw new d("Could not serialize; mode "+this.props.mode+" not found",c.Internal)}getSaveWarnings(){if(this.props.mode!=="edit")throw new d("Can only get save warnings in edit mode.",c.NotAllowed);return this._sections().map((n,e)=>this.refs["editor"+e].getSaveWarnings())}render(){return s("div",{className:"framework-perseus perseus-article-editor",children:[this.props.mode==="edit"&&this._renderEditor(),this.props.mode==="preview"&&this._renderPreviewMode(),this.props.mode==="json"&&s("div",{className:"json-editor",children:[t("div",{className:"json-editor-warning",children:t("span",{children:"Warning: Editing in this mode can lead to broken articles!"})}),t(k,{multiLine:!0,onChange:this._handleJsonChange,value:this.props.json})]})]})}};m.defaultProps={contentPaths:[],json:[{}],mode:"edit",screen:"desktop",sectionImageUploadGenerator:()=>t("span",{}),useNewStyles:!1};let l=m;l.__docgenInfo={description:"",methods:[{name:"_updatePreviewFrames",docblock:null,modifiers:[],params:[],returns:null},{name:"_apiOptionsForSection",docblock:null,modifiers:[],params:[{name:"section",optional:!1,type:{name:"signature",type:"object",raw:`{ content?: string; widgets?: any; images?: any; diff --git a/assets/article-editor.stories-7MCUP7Fj.js b/assets/article-editor.stories-7MCUP7Fj.js new file mode 100644 index 0000000000..b38c4469f2 --- /dev/null +++ b/assets/article-editor.stories-7MCUP7Fj.js @@ -0,0 +1,16 @@ +import{a as d,F as u,j as r}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as f}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{r as i}from"./index-TT1qJ6UJ.js";import{A as g}from"./article-editor-_CIVbpzD.js";import{r as h}from"./register-all-widgets-and-editors-for-testing-Duh1ZXvu.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-h_CiYGGb.js";import"./index-dnMhQZ-1.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./icon-paths-AuJwhOz7.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./shared-3pf9YZIg.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./answer-choices-xSqM961S.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-HXEAXx7K.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./strings-OAjNfY6D.js";import"./bundle.esm-7jAAHVxW.js";import"./components-h6HHhmoA.js";import"./device-framer-kfyrsN2-.js";import"./constants-hQyjCzwz.js";import"./section-control-button-J8oVp9bZ.js";import"./index-tFzzSRL2.js";import"./editor-I-vnrXtz.js";import"./index-fuycm_QE.js";import"./index-k-0mNqHS.js";import"./index-SM3muJE2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";import"./categorizer-editor-B70XrHDb.js";import"./editor-jsonify-SX5E4P_Y.js";import"./blur-input-hjJsfoK9.js";import"./definition-editor-dEifSd-2.js";import"./dropdown-editor-z4XV_Nz9.js";import"./explanation-editor-7TAFL4nE.js";import"./expression-editor-iqoCc9gS.js";import"./graph-settings-_umr9_il.js";import"./image-editor-AZ-dC4_D.js";import"./input-number-editor-TkxXdBqK.js";import"./index-Jny9tT-6.js";import"./interactive-graph-editor-1ZmjvlNv.js";import"./heading-8aCiuWUg.js";import"./interactive-graph-settings-bMgmMCqq.js";import"./locked-figures-section-Tfk_-k0r.js";import"./locked-ellipse-settings-TfTFulml.js";import"./locked-figure-aria-7tCktpI9.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-mrPkDK9u.js";import"./color-select-GgikiV2v.js";import"./util-yTFMWwoT.js";import"./line-stroke-select-8a9MPfaw.js";import"./locked-function-settings-hpVCfdZN.js";import"./line-swatch-0Zcc1GCG.js";import"./locked-line-settings-s3VKqEiy.js";import"./locked-point-settings-ajnmafNS.js";import"./labeled-switch-Qne5XsM1.js";import"./locked-polygon-settings-LXOy6nHR.js";import"./locked-vector-settings-214PJGeS.js";import"./label-image-editor-cReH8dJ4.js";import"./form-wrapped-text-field-BopYavUW.js";import"./answer-choices-2q3o0s95.js";import"./behavior-bUq-LmpJ.js";import"./question-markers-h3QT0QS4.js";import"./marker-o8uSzdrK.js";import"./select-image--koiUF2W.js";import"./matcher-editor-roy8eQL9.js";import"./number-line-editor-5mXaeixJ.js";import"./numeric-input-editor-HZCTKW32.js";import"./phet-simulation-editor-8cXa9agX.js";import"./python-program-editor-KSnFH92m.js";import"./editor-0vKo6Oc_.js";import"./sorter-editor-rLrUJXLc.js";h();const eo={title:"PerseusEditor/ArticleEditor"},t=()=>{const[s,n]=i.useState(),o=i.useRef();function a(c){n(c.json)}function l(){console.log(o.current.serialize())}return d(u,{children:[r("button",{onClick:l,children:"Serialize"}),r("hr",{}),r(g,{apiOptions:f.defaults,imageUploader:()=>{},json:s,onChange:a,previewURL:"/perseus/frame",ref:o})]})};t.__docgenInfo={description:"",methods:[],displayName:"Base"};var p,m,e;t.parameters={...t.parameters,docs:{...(p=t.parameters)==null?void 0:p.docs,source:{originalSource:`(): React.ReactElement => { + const [state, setState] = useState(); + const articleEditorRef = useRef(); + function handleChange(value) { + setState(value.json); + } + function serialize() { + // eslint-disable-next-line no-console + console.log((articleEditorRef.current as any).serialize()); + } + return <> + +
+ {}} json={state} onChange={handleChange} previewURL="/perseus/frame" ref={(articleEditorRef as any)} /> + ; +}`,...(e=(m=t.parameters)==null?void 0:m.docs)==null?void 0:e.source}}};const so=["Base"];export{t as Base,so as __namedExportsOrder,eo as default}; diff --git a/assets/article-editor.stories-QkGhUW5J.js b/assets/article-editor.stories-QkGhUW5J.js deleted file mode 100644 index f922c14eed..0000000000 --- a/assets/article-editor.stories-QkGhUW5J.js +++ /dev/null @@ -1,16 +0,0 @@ -import{a as d,F as u,j as r}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as f}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{r as i}from"./index-TT1qJ6UJ.js";import{A as g}from"./article-editor-bhN33pAO.js";import{r as h}from"./register-all-widgets-and-editors-for-testing-EmJZ0mCF.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-h_CiYGGb.js";import"./index-dnMhQZ-1.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./icon-paths-AuJwhOz7.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./shared-3pf9YZIg.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./answer-choices-uB4giKvU.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-tmJoP6pY.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./strings-OAjNfY6D.js";import"./bundle.esm-7jAAHVxW.js";import"./components-GHvuFaIn.js";import"./device-framer-YjfQ5GqB.js";import"./constants-hQyjCzwz.js";import"./section-control-button-c-G3Veu9.js";import"./index-tFzzSRL2.js";import"./editor-HVcPyY4Q.js";import"./index-0C4KXdeC.js";import"./index-SM3muJE2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";import"./categorizer-editor-am_KbYeJ.js";import"./editor-jsonify-iuVqcZSO.js";import"./blur-input-hjJsfoK9.js";import"./definition-editor-U6nI8Sor.js";import"./dropdown-editor-YwuHUUGx.js";import"./explanation-editor-mOtE1dCr.js";import"./expression-editor-QP0tq_O5.js";import"./graph-settings-F_5lrkPp.js";import"./image-editor-vUFdKz9N.js";import"./input-number-editor-kZK8JIcV.js";import"./index-qwL3MFQI.js";import"./interactive-graph-editor-mWYDsmAp.js";import"./heading-8aCiuWUg.js";import"./interactive-graph-settings-aG03uuTu.js";import"./locked-figures-section-K5V7atp-.js";import"./locked-ellipse-settings-kWVnJxri.js";import"./locked-figure-aria-RWwSDIb0.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-X4RKk04F.js";import"./color-select-G-xDxP7-.js";import"./util-3pmDu6r6.js";import"./line-stroke-select-CC0fFBuz.js";import"./locked-function-settings-ARS0ni8Z.js";import"./line-swatch-xLt6fclZ.js";import"./locked-line-settings-APCIPT7n.js";import"./locked-point-settings-KDnxNHJ0.js";import"./labeled-switch--NF5de2V.js";import"./locked-polygon-settings-oPik-nhx.js";import"./locked-vector-settings-JVpVhbIu.js";import"./label-image-editor-mryVz6qt.js";import"./form-wrapped-text-field-DtGz9PJ5.js";import"./answer-choices-SJhxKMzc.js";import"./behavior-X6OD0iDh.js";import"./question-markers-WvVDMwno.js";import"./marker-ika3cQ1R.js";import"./select-image-cimnxdnG.js";import"./matcher-editor-Aey-GH6J.js";import"./number-line-editor-qZz0HHTk.js";import"./numeric-input-editor-qJT3lp_E.js";import"./phet-simulation-editor-h1woLwi3.js";import"./python-program-editor-2Q8IzVky.js";import"./editor-bnXHS4_2.js";import"./sorter-editor-5DYvFg1M.js";h();const mo={title:"PerseusEditor/ArticleEditor"},t=()=>{const[s,n]=i.useState(),o=i.useRef();function a(c){n(c.json)}function l(){console.log(o.current.serialize())}return d(u,{children:[r("button",{onClick:l,children:"Serialize"}),r("hr",{}),r(g,{apiOptions:f.defaults,imageUploader:()=>{},json:s,onChange:a,previewURL:"/perseus/frame",ref:o})]})};t.__docgenInfo={description:"",methods:[],displayName:"Base"};var p,m,e;t.parameters={...t.parameters,docs:{...(p=t.parameters)==null?void 0:p.docs,source:{originalSource:`(): React.ReactElement => { - const [state, setState] = useState(); - const articleEditorRef = useRef(); - function handleChange(value) { - setState(value.json); - } - function serialize() { - // eslint-disable-next-line no-console - console.log((articleEditorRef.current as any).serialize()); - } - return <> - -
- {}} json={state} onChange={handleChange} previewURL="/perseus/frame" ref={(articleEditorRef as any)} /> - ; -}`,...(e=(m=t.parameters)==null?void 0:m.docs)==null?void 0:e.source}}};const eo=["Base"];export{t as Base,eo as __namedExportsOrder,mo as default}; diff --git a/assets/article-renderer-6f7Dak4j.js b/assets/article-renderer-TMdCDA85.js similarity index 71% rename from assets/article-renderer-6f7Dak4j.js rename to assets/article-renderer-TMdCDA85.js index 4adbdbdc68..bcff9db5b3 100644 --- a/assets/article-renderer-6f7Dak4j.js +++ b/assets/article-renderer-TMdCDA85.js @@ -1,8 +1,8 @@ -import{a as q,j as d,F as U}from"./jsx-runtime-FVsy8kgq.js";import{P as Ye,E as xe,p as br,g as Lr,K as Ve,U as z,e as Qn,D as Ol,h as Pa,t as xl,c as jl}from"./util-XcxTwqb0.js";import{M as Wl}from"./prop-types-3bOVFRDQ.js";import"./key-translator-IA-2V2LV.js";import"./mobile-keypad-hKjeQGNp.js";import"./button-assets-txIojR3b.js";import{K as Cl}from"./enums-x5qaTru7.js";import{l as B,P as za,R as H,D as Il,m as Jn,n as D,J as Nl,p as El}from"./renderer-vBOYiNCS.js";import{V as K,U as Pl,d as zl,b as as,u as is,_ as rn}from"./index-6h5t6F0w.js";import{T as Zn}from"./index-K9BSJPWl.js";import{b as La,a as ss}from"./index-h_CiYGGb.js";import{l as j}from"./index-awljIyHI.js";import{c as We}from"./index-dnMhQZ-1.js";import{r as k,R as os}from"./index-TT1qJ6UJ.js";import{R as V,r as Ar}from"./index-7vsPyIck.js";import{_ as g,$ as _}from"./jquery-yG1GhClm.js";import{P as M,u as ea}from"./i18n-context-hxuRe8oU.js";import{a as St,M as Ll}from"./math-input-b6JdL4xR.js";import{u as ls,g as Te,D as _l}from"./dependencies-8XILypbq.js";import"./version-akiLXZts.js";import{P as re}from"./index-k-0mNqHS.js";import{A as ge,C as _e}from"./perseus-api-mOiZT07d.js";import{L as ra,a as Y,r as Fl,K as I,s as _a,b as Ir,I as E,S as _r,W as Nr,c as Sl,d as ta,f as ir,v as sr,p as Ml,g as $l,h as us,i as nt,j as at,k as ds,e as Dl,n as Z,q as Gt,G as He,t as Fa,u as Ie,w as Sa,x as Ul,y as Ma,z as Vl,A as $a,C as Hl,B as na}from"./svg-image-VUqtnnD6.js";import{s as me,c as P,a as Gl,b as Kl}from"./index-deFLJwr4.js";import{I as ys}from"./input-with-examples-x87iVHoc.js";import{S as Fr}from"./simple-keypad-input-zNNuoI83.js";import{B as Bl}from"./base-radio-ffaiqOwN.js";import{I as or}from"./inline-icon-tKY1iMkH.js";import{g as Yl,h as Xl,j as Ql,k as Jl,l as Zl,m as eu}from"./icon-paths-AuJwhOz7.js";import{m as Er}from"./media-queries-MaBBbpNq.js";import{s as Da}from"./shared-3pf9YZIg.js";import{u as ru,n as Ge,s as Le,g as it,v as ms,e as tu,i as gs}from"./constants-I_nlPaPx.js";import{C as aa}from"./index-2dmvOE3q.js";import{P as nu,a as au}from"./index-BPSWBbj5.js";import{B as iu,a as su,h as ou,k as lu,b as uu,c as du,d as yu,l as mu,e as gu,f as hu}from"./phet-simulation-fZpYIOCA.js";import{O as Ua,S as pu,A as cu}from"./answer-choices-uB4giKvU.js";import{B as Xe}from"./choice-E4eyMygy.js";import{B as bu}from"./button-group-nsoLlHtM.js";import{c as ia}from"./asset-context-I7yIqWki.js";import{c as Mr,g as hs}from"./_commonjsHelpers-4gQjN7DL.js";import{G as vu}from"./graph-Y0iFaKoK.js";import{w as vr}from"./index-J2t_5nK1.js";import{v as x,C as fu,E as wu,P as st,a as ot,L as Va,b as tn,u as ku,c as ps,T as qu,M as Ha}from"./index-IIMKO4_x.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./multi-button-group-a0iIfrwx.js";import{N as cs}from"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import{T as Tu}from"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{i as ie}from"./tiny-invariant-bHgPayXn.js";import{m as Au,c as Ru,u as Ou,a as xu,T as ju}from"./index-rfN0X25E.js";import{M as Wu}from"./marker-bfDDVuIS.js";import{S as nn}from"./sortable-MNMZ70x0.js";import{i as Cu}from"./invariant-bu5zBsRS.js";import{F as Iu}from"./fixed-to-responsive-1fSZ1n--.js";import{V as Nu}from"./video-transcript-link-WVgIZGhp.js";const Eu=["PLUS","MINUS","NEGATIVE","TIMES","DIVIDE","DECIMAL","PERIOD","PERCENT","CDOT","EQUAL","NEQ","GT","LT","GEQ","LEQ","FRAC_INCLUSIVE","FRAC_EXCLUSIVE","FRAC","EXP","EXP_2","EXP_3","SQRT","CUBE_ROOT","RADICAL","LEFT_PAREN","RIGHT_PAREN","LN","LOG","LOG_N","SIN","COS","TAN","PI","THETA","UP","RIGHT","DOWN","LEFT","BACKSPACE","DISMISS","JUMP_OUT_PARENTHESES","JUMP_OUT_EXPONENT","JUMP_OUT_BASE","JUMP_INTO_NUMERATOR","JUMP_OUT_NUMERATOR","JUMP_OUT_DENOMINATOR","NUM_0","NUM_1","NUM_2","NUM_3","NUM_4","NUM_5","NUM_6","NUM_7","NUM_8","NUM_9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],Pu=["key","ref","containerSizeClass","widgetId","onChange","problemNum","apiOptions","widgetIsOpen","questionCompleted","findWidgets","onRemove","id","onBlur","onFocus","trackInteraction","keypadElement"],zu=`Usage: +import{a as f,j as d,F as D}from"./jsx-runtime-FVsy8kgq.js";import{P as Be,E as Te,p as pr,g as Lr,K as De,U as z,e as Xn,D as kl,h as Na,t as ql,c as Tl}from"./util-YrNvlCNO.js";import{M as Al}from"./prop-types-3bOVFRDQ.js";import"./key-translator-IA-2V2LV.js";import"./mobile-keypad-hKjeQGNp.js";import"./button-assets-txIojR3b.js";import{K as Rl}from"./enums-x5qaTru7.js";import{l as B,m as U,R as $,P as Ea,D as Ol,n as Yn,J as xl,p as jl}from"./renderer-hPmI_Chp.js";import{V as G,U as Wl,d as Cl,b as es,u as rs,_ as Jt}from"./index-6h5t6F0w.js";import{T as Qn}from"./index-K9BSJPWl.js";import{b as za,a as ts}from"./index-h_CiYGGb.js";import{l as x}from"./index-awljIyHI.js";import{c as Re}from"./index-dnMhQZ-1.js";import{r as v,R as ns}from"./index-TT1qJ6UJ.js";import{R as V,r as qr}from"./index-7vsPyIck.js";import{_ as g,$ as _}from"./jquery-yG1GhClm.js";import{P as S,u as Jn}from"./i18n-context-hxuRe8oU.js";import{a as _t,M as Il}from"./math-input-b6JdL4xR.js";import{u as as,g as fe,D as Nl}from"./dependencies-8XILypbq.js";import"./version-akiLXZts.js";import{P as El}from"./index-0C4KXdeC.js";import{A as ye,C as ze}from"./perseus-api-mOiZT07d.js";import{L as Zn,a as K,r as zl,K as j,s as La,b as Wr,I,S as _r,W as Cr,c as Ll,d as ea,f as nr,v as ar,p as _l,g as Pl,h as is,i as rt,j as tt,k as ss,e as Fl,n as J,q as Vt,G as Ve,t as _a,u as je,w as Pa,x as Sl,y as Fa,z as Ml,A as Sa,C as Ul,B as ra}from"./svg-image-RL9NlJEY.js";import{s as oe,c as N,a as Dl,b as Vl}from"./index-deFLJwr4.js";import{I as os}from"./input-with-examples-YZffrKhM.js";import{S as Pr}from"./simple-keypad-input-zNNuoI83.js";import{B as $l}from"./base-radio-TdBv-OLd.js";import{I as ir}from"./inline-icon-tKY1iMkH.js";import{g as Hl,h as Gl,j as Bl,k as Kl,l as Xl,m as Yl}from"./icon-paths-AuJwhOz7.js";import{m as Ir}from"./media-queries-MaBBbpNq.js";import{s as Ma}from"./shared-3pf9YZIg.js";import{u as Ql,n as $e,s as Ee,g as nt,v as ls,e as Jl,i as us}from"./constants-I_nlPaPx.js";import{C as ta}from"./index-WNT3sUKf.js";import{P as Zl,a as eu}from"./index-BPSWBbj5.js";import{B as ru,a as tu,h as nu,k as au,b as iu,c as su,d as ou,l as lu,e as uu,f as du}from"./phet-simulation-4u5-UljK.js";import{O as Ua,S as yu,A as mu}from"./answer-choices-xSqM961S.js";import{B as Ke}from"./choice-E4eyMygy.js";import{B as gu}from"./button-group-nsoLlHtM.js";import{c as na}from"./asset-context-I7yIqWki.js";import{c as Sr,g as hu}from"./_commonjsHelpers-4gQjN7DL.js";import{G as pu}from"./graph-myhk4Jua.js";import{w as cr}from"./index-J2t_5nK1.js";import{v as A,C as cu,E as bu,P as at,a as it,L as Da,b as Zt,u as vu,c as ds,T as fu,M as Va}from"./index-IIMKO4_x.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./multi-button-group-a0iIfrwx.js";import{N as ys}from"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import{T as wu}from"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{i as te}from"./tiny-invariant-bHgPayXn.js";import{m as ku,c as qu,u as Tu,a as Au,T as Ru}from"./index-rfN0X25E.js";import{M as Ou}from"./marker-ockQWLHi.js";import{S as en}from"./sortable-1zDjBYMZ.js";import{F as xu}from"./fixed-to-responsive-1fSZ1n--.js";import{V as ju}from"./video-transcript-link-WVgIZGhp.js";const Wu=["PLUS","MINUS","NEGATIVE","TIMES","DIVIDE","DECIMAL","PERIOD","PERCENT","CDOT","EQUAL","NEQ","GT","LT","GEQ","LEQ","FRAC_INCLUSIVE","FRAC_EXCLUSIVE","FRAC","EXP","EXP_2","EXP_3","SQRT","CUBE_ROOT","RADICAL","LEFT_PAREN","RIGHT_PAREN","LN","LOG","LOG_N","SIN","COS","TAN","PI","THETA","UP","RIGHT","DOWN","LEFT","BACKSPACE","DISMISS","JUMP_OUT_PARENTHESES","JUMP_OUT_EXPONENT","JUMP_OUT_BASE","JUMP_INTO_NUMERATOR","JUMP_OUT_NUMERATOR","JUMP_OUT_DENOMINATOR","NUM_0","NUM_1","NUM_2","NUM_3","NUM_4","NUM_5","NUM_6","NUM_7","NUM_8","NUM_9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],Cu=["key","ref","containerSizeClass","widgetId","onChange","problemNum","apiOptions","widgetIsOpen","questionCompleted","findWidgets","onRemove","id","onBlur","onFocus","trackInteraction","keypadElement"],Iu=`Usage: this.change({propName: 5}, callback); this.change("propName", 5, callback); - this.change("propName")`,bs=function(t,e,r){const n=g.omit(t.props,Pu),a=g.extend(n,e);t.props.onChange(a,r)},vs=function(t,e,r,n){if(r===void 0)return g.partial(vs,t,e);const a={};a[e]=r,bs(t,a,n)},ne=function(t,e,r){if(g.isObject(t)&&r===void 0)return r=e,bs(this,t,r);if(typeof t=="string")return vs(this,t,e,r);throw new Ye("Invalid types sent to this.change(): "+g.toArray(arguments).join()+` -`+zu,xe.Internal)},Ic={onChange:re.func.isRequired},fs=t=>{switch(t){case"ka":return",";default:const r=new Intl.NumberFormat(t).format(1.1).match(/[^\d\u0661\u06F1]/);return(r==null?void 0:r[0])??"."}};function an(t,e,r,n){const a=g.clone(e);g.extend(a,{decimal_separator:fs(n)});const i=y=>{const m=br(y.value,e);return m.parsed?Lr.expression.createValidatorFunctional(m.expr,g({}).extend(a,{simplify:y.simplify,form:y.form}),r):(ra.error("Unable to parse solution answer for expression",xe.InvalidInput,{loggedMetadata:{rubric:JSON.stringify(e)}}),null)};let s,o,l=!0,u;for(const y of e.answerForms||[]){const m=i(y);if(!m)continue;const h=m(t);if(h.correct){s=y,o=h.message||"";break}l=l&&h.empty,y.considered==="correct"&&h.ungraded&&!u&&(u=h)}return s?s.considered==="ungraded"?{type:"invalid",message:o}:{type:"points",earned:s.considered==="correct"?1:0,total:1,message:o}:u?{type:"invalid",message:u.message,suppressAlmostThere:u.suppressAlmostThere}:l?{type:"invalid",message:null}:{type:"points",earned:0,total:1}}const Lu={arctg:"arctan",cosec:"csc",cossec:"csc",cotg:"cot",ctg:"cot",sen:"sin",tg:"tan"},_u=t=>t.replace(/\\operatorname{([a-z]+)}/g,(e,r)=>`\\${Lu[r]??r} `),Ga=t=>_u(t),Fu=t=>t.nativeKeypadProxy!=null?"REACT_NATIVE_KEYPAD":"MATH_INPUT_KEYPAD_V2",xr=class xr extends k.Component{constructor(){super(...arguments),this._textareaId=`expression_textarea_${Date.now()}`,this._isMounted=!1,this.displayName="Expression",this.state={invalid:!1,showErrorTooltip:!1,showErrorStyle:!1},this.componentDidMount=()=>{if(document.addEventListener("mousedown",this._handleMouseDown),this._isMounted=!0,this.refs.input){const e=this.props.apiOptions.customKeypad,r=V.findDOMNode(this.refs.input),n=e?".mq-textarea > span":"textarea",a=r.querySelector(n);a==null||a.setAttribute("id",this._textareaId)}},this.componentDidUpdate=e=>{(!g.isEqual(this.props.value,e.value)||!g.isEqual(this.props.functions,e.functions))&&(this.setState({invalid:!1,showErrorTooltip:!1,showErrorStyle:!1}),this.parse(this.props.value,this.props).parsed||this.setState({invalid:!0}))},this.componentWillUnmount=()=>{this._isMounted=!1},this._handleMouseDown=()=>{this._isMounted&&this.state.showErrorTooltip&&this.setState({showErrorTooltip:!1})},this.simpleValidate=({scoring:e,...r})=>{var a;const n=an(this.getUserInput(),r,this.context.strings,this.context.locale);return e&&n.type!=="invalid"&&((a=this.props.analytics)==null||a.onAnalyticsEvent({type:"perseus:expression-evaluated",payload:{result:n.earned===n.total?"correct":"incorrect",virtualKeypadVersion:Fu(this.props.apiOptions)}})),n},this.change=(...e)=>ne.apply(this,e),this.parse=(e,r)=>{const n=g.pick(r||this.props,"functions");return g.extend(n,{decimal_separator:fs(this.context.locale)}),br(Ga(e),n)},this.changeAndTrack=(e,r)=>{this.change("value",e,r),this.props.trackInteraction()},this._handleFocus=()=>{var e;(e=this.props.analytics)==null||e.onAnalyticsEvent({type:"perseus:expression-focused",payload:null}),this.props.onFocus([])},this._handleBlur=()=>{this.props.onBlur([])},this.focus=()=>(this.props.apiOptions.customKeypad&&this.refs.input.focus(),!0),this.focusInputPath=e=>{this.refs.input.focus()},this.blurInputPath=e=>{var r,n;typeof((r=this.refs.input)==null?void 0:r.blur)=="function"&&((n=this.refs.input)==null||n.blur())},this.getInputPaths=()=>[[]],this.getGrammarTypeForPath=e=>"expression",this.setInputValue=(e,r,n)=>{this.props.onChange({value:r},n)}}static validate(e,r,n,a){return an(e,r,n,a)}static getUserInputFromProps(e){return Ga(e.value)}static getOneCorrectAnswerFromRubric(e){const r=(e.answerForms||[]).filter(n=>n.considered==="correct");if(r.length!==0)return r[0].value}getUserInput(){return xr.getUserInputFromProps(this.props)}insert(e){this.refs.input.insert(e)}render(){var a;if(this.props.apiOptions.customKeypad)return q(K,{className:j.css(Ka.mobileLabelInputWrapper),children:[!!this.props.visibleLabel&&d(La,{htmlFor:this._textareaId,tag:"label",children:this.props.visibleLabel}),d(Wl,{ref:"input",ariaLabel:this.props.ariaLabel||this.context.strings.mathInputBox,value:this.props.value,keypadElement:this.props.keypadElement,onChange:this.changeAndTrack,onFocus:()=>{var i;(i=this.props.keypadElement)==null||i.configure(this.props.keypadConfiguration,()=>{this._isMounted&&this._handleFocus()})},onBlur:this._handleBlur})]});const e=We({"perseus-widget-expression":!0,"show-error-tooltip":this.state.showErrorTooltip}),{ERROR_MESSAGE:r,ERROR_TITLE:n}=this.context.strings;return q(K,{className:j.css(Ka.desktopLabelInputWrapper),children:[!!this.props.visibleLabel&&d(La,{htmlFor:this._textareaId,tag:"label",children:this.props.visibleLabel}),q("div",{className:e,onBlur:()=>this.state.invalid&&this.setState({showErrorTooltip:!0,showErrorStyle:!0}),onFocus:()=>this.setState({showErrorTooltip:!1}),children:[d(K,{style:St.srOnly,role:"alert",children:this.state.showErrorTooltip&&n+" "+r}),d(Zn,{forceAnchorFocusivity:!1,opened:this.state.showErrorTooltip,title:n,content:r,children:d(Ll,{ref:"input",className:_e.INTERACTIVE,value:this.props.value,onChange:this.changeAndTrack,convertDotToTimes:this.props.times,buttonSets:this.props.buttonSets,onFocus:this._handleFocus,onBlur:this._handleBlur,hasError:this.state.showErrorStyle,ariaLabel:this.props.ariaLabel||this.context.strings.mathInputBox,extraKeys:(a=this.props.keypadConfiguration)==null?void 0:a.extraKeys,analytics:this.props.analytics??{onAnalyticsEvent:async()=>{}}})})]})]})}};xr.contextType=M,xr.defaultProps={value:"",times:!1,functions:[],buttonSets:["basic","trig","prealgebra","logarithms"],onFocus:()=>{},onBlur:()=>{},apiOptions:ge.defaults,linterContext:B};let lr=xr;const Ka=j.StyleSheet.create({mobileLabelInputWrapper:{padding:"15px 4px 0"},desktopLabelInputWrapper:{margin:"5px 5px 0"}}),Su=t=>{const e=Cl.EXPRESSION,r={},n={};for(const o of t.answerForms){const l=br(o.value,t);if(l.parsed){const u=l.expr,y=p=>p==="pi"||p==="theta",m=p=>y(p)?p.toUpperCase():p,h=p=>Eu.includes(p);for(const p of u.getVars()){const c=m(p);h(c)&&(r[c]=!0)}for(const p of u.getConsts()){const c=m(p);h(c)&&(n[c]=!0)}}}const a=Object.keys(r).sort(),i=Object.keys(n).sort();let s=[...a,...i];return s.length||(s=["PI"]),{keypadType:e,extraKeys:s,times:t.times}},Mu={1:t=>({times:t.times,buttonSets:t.buttonSets,functions:t.functions,buttonsVisible:t.buttonsVisible,visibleLabel:t.visibleLabel,ariaLabel:t.ariaLabel,answerForms:[{considered:"correct",form:t.form,simplify:t.simplify,value:t.value}]})},Mt=k.forwardRef((t,e)=>{const r=ls();return d(lr,{ref:e,analytics:r.analytics,...t})});Mt.validate=an;Mt.getUserInputFromProps=lr.getUserInputFromProps;Mt.getOneCorrectAnswerFromRubric=lr.getOneCorrectAnswerFromRubric;const $u={name:"expression",displayName:"Expression / Equation",accessible:!0,defaultAlignment:"inline-block",widget:Mt,transform:t=>{const{times:e,functions:r,buttonSets:n,buttonsVisible:a,visibleLabel:i,ariaLabel:s}=t;return{keypadConfiguration:Su(t),times:e,functions:r,buttonSets:n,buttonsVisible:a,visibleLabel:i,ariaLabel:s}},version:{major:1,minor:0},propUpgrades:Mu,isLintable:!0};lr.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[{name:"userInput",optional:!1,type:{name:"string",alias:"PerseusExpressionUserInput"}},{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + this.change("propName")`,ms=function(t,e,r){const n=g.omit(t.props,Cu),a=g.extend(n,e);t.props.onChange(a,r)},gs=function(t,e,r,n){if(r===void 0)return g.partial(gs,t,e);const a={};a[e]=r,ms(t,a,n)},re=function(t,e,r){if(g.isObject(t)&&r===void 0)return r=e,ms(this,t,r);if(typeof t=="string")return gs(this,t,e,r);throw new Be("Invalid types sent to this.change(): "+g.toArray(arguments).join()+` +`+Iu,Te.Internal)},mc={onChange:El.func.isRequired},hs=t=>{switch(t){case"ka":return",";default:const r=new Intl.NumberFormat(t).format(1.1).match(/[^\d\u0661\u06F1]/);return(r==null?void 0:r[0])??"."}};function rn(t,e,r,n){const a=g.clone(e);g.extend(a,{decimal_separator:hs(n)});const i=y=>{const m=pr(y.value,e);return m.parsed?Lr.expression.createValidatorFunctional(m.expr,g({}).extend(a,{simplify:y.simplify,form:y.form}),r):(Zn.error("Unable to parse solution answer for expression",Te.InvalidInput,{loggedMetadata:{rubric:JSON.stringify(e)}}),null)};let s,o,l=!0,u;for(const y of e.answerForms||[]){const m=i(y);if(!m)continue;const h=m(t);if(h.correct){s=y,o=h.message||"";break}l=l&&h.empty,y.considered==="correct"&&h.ungraded&&!u&&(u=h)}return s?s.considered==="ungraded"?{type:"invalid",message:o}:{type:"points",earned:s.considered==="correct"?1:0,total:1,message:o}:u?{type:"invalid",message:u.message,suppressAlmostThere:u.suppressAlmostThere}:l?{type:"invalid",message:null}:{type:"points",earned:0,total:1}}const Nu={arctg:"arctan",cosec:"csc",cossec:"csc",cotg:"cot",ctg:"cot",sen:"sin",tg:"tan"},Eu=t=>t.replace(/\\operatorname{([a-z]+)}/g,(e,r)=>`\\${Nu[r]??r} `),$a=t=>Eu(t),zu=t=>t.nativeKeypadProxy!=null?"REACT_NATIVE_KEYPAD":"MATH_INPUT_KEYPAD_V2",Rr=class Rr extends v.Component{constructor(){super(...arguments),this._textareaId=`expression_textarea_${Date.now()}`,this._isMounted=!1,this.displayName="Expression",this.state={invalid:!1,showErrorTooltip:!1,showErrorStyle:!1},this.componentDidMount=()=>{if(document.addEventListener("mousedown",this._handleMouseDown),this._isMounted=!0,this.refs.input){const e=this.props.apiOptions.customKeypad,r=V.findDOMNode(this.refs.input),n=e?".mq-textarea > span":"textarea",a=r.querySelector(n);a==null||a.setAttribute("id",this._textareaId)}},this.componentDidUpdate=e=>{(!g.isEqual(this.props.value,e.value)||!g.isEqual(this.props.functions,e.functions))&&(this.setState({invalid:!1,showErrorTooltip:!1,showErrorStyle:!1}),this.parse(this.props.value,this.props).parsed||this.setState({invalid:!0}))},this.componentWillUnmount=()=>{this._isMounted=!1},this._handleMouseDown=()=>{this._isMounted&&this.state.showErrorTooltip&&this.setState({showErrorTooltip:!1})},this.simpleValidate=({scoring:e,...r})=>{var a;const n=rn(this.getUserInput(),r,this.context.strings,this.context.locale);return e&&n.type!=="invalid"&&((a=this.props.analytics)==null||a.onAnalyticsEvent({type:"perseus:expression-evaluated",payload:{result:n.earned===n.total?"correct":"incorrect",virtualKeypadVersion:zu(this.props.apiOptions)}})),n},this.change=(...e)=>re.apply(this,e),this.parse=(e,r)=>{const n=g.pick(r||this.props,"functions");return g.extend(n,{decimal_separator:hs(this.context.locale)}),pr($a(e),n)},this.changeAndTrack=(e,r)=>{this.change("value",e,r),this.props.trackInteraction()},this._handleFocus=()=>{var e;(e=this.props.analytics)==null||e.onAnalyticsEvent({type:"perseus:expression-focused",payload:null}),this.props.onFocus([])},this._handleBlur=()=>{this.props.onBlur([])},this.focus=()=>(this.props.apiOptions.customKeypad&&this.refs.input.focus(),!0),this.getInputPaths=()=>[[]]}static validate(e,r,n,a){return rn(e,r,n,a)}static getUserInputFromProps(e){return $a(e.value)}static getOneCorrectAnswerFromRubric(e){const r=(e.answerForms||[]).filter(n=>n.considered==="correct");if(r.length!==0)return r[0].value}getUserInput(){return Rr.getUserInputFromProps(this.props)}focusInputPath(e){this.refs.input.focus()}blurInputPath(e){var r,n;typeof((r=this.refs.input)==null?void 0:r.blur)=="function"&&((n=this.refs.input)==null||n.blur())}insert(e){this.refs.input.insert(e)}getGrammarTypeForPath(e){return"expression"}setInputValue(e,r,n){this.props.onChange({value:r},n)}render(){var a;if(this.props.apiOptions.customKeypad)return f(G,{className:x.css(Ha.mobileLabelInputWrapper),children:[!!this.props.visibleLabel&&d(za,{htmlFor:this._textareaId,tag:"label",children:this.props.visibleLabel}),d(Al,{ref:"input",ariaLabel:this.props.ariaLabel||this.context.strings.mathInputBox,value:this.props.value,keypadElement:this.props.keypadElement,onChange:this.changeAndTrack,onFocus:()=>{var i;(i=this.props.keypadElement)==null||i.configure(this.props.keypadConfiguration,()=>{this._isMounted&&this._handleFocus()})},onBlur:this._handleBlur})]});const e=Re({"perseus-widget-expression":!0,"show-error-tooltip":this.state.showErrorTooltip}),{ERROR_MESSAGE:r,ERROR_TITLE:n}=this.context.strings;return f(G,{className:x.css(Ha.desktopLabelInputWrapper),children:[!!this.props.visibleLabel&&d(za,{htmlFor:this._textareaId,tag:"label",children:this.props.visibleLabel}),f("div",{className:e,onBlur:()=>this.state.invalid&&this.setState({showErrorTooltip:!0,showErrorStyle:!0}),onFocus:()=>this.setState({showErrorTooltip:!1}),children:[d(G,{style:_t.srOnly,role:"alert",children:this.state.showErrorTooltip&&n+" "+r}),d(Qn,{forceAnchorFocusivity:!1,opened:this.state.showErrorTooltip,title:n,content:r,children:d(Il,{ref:"input",className:ze.INTERACTIVE,value:this.props.value,onChange:this.changeAndTrack,convertDotToTimes:this.props.times,buttonSets:this.props.buttonSets,onFocus:this._handleFocus,onBlur:this._handleBlur,hasError:this.state.showErrorStyle,ariaLabel:this.props.ariaLabel||this.context.strings.mathInputBox,extraKeys:(a=this.props.keypadConfiguration)==null?void 0:a.extraKeys,analytics:this.props.analytics??{onAnalyticsEvent:async()=>{}}})})]})]})}};Rr.contextType=S,Rr.defaultProps={value:"",times:!1,functions:[],buttonSets:["basic","trig","prealgebra","logarithms"],onFocus:()=>{},onBlur:()=>{},apiOptions:ye.defaults,linterContext:B};let sr=Rr;const Ha=x.StyleSheet.create({mobileLabelInputWrapper:{padding:"15px 4px 0"},desktopLabelInputWrapper:{margin:"5px 5px 0"}}),Lu=t=>{const e=Rl.EXPRESSION,r={},n={};for(const o of t.answerForms){const l=pr(o.value,t);if(l.parsed){const u=l.expr,y=p=>p==="pi"||p==="theta",m=p=>y(p)?p.toUpperCase():p,h=p=>Wu.includes(p);for(const p of u.getVars()){const c=m(p);h(c)&&(r[c]=!0)}for(const p of u.getConsts()){const c=m(p);h(c)&&(n[c]=!0)}}}const a=Object.keys(r).sort(),i=Object.keys(n).sort();let s=[...a,...i];return s.length||(s=["PI"]),{keypadType:e,extraKeys:s,times:t.times}},_u={1:t=>({times:t.times,buttonSets:t.buttonSets,functions:t.functions,buttonsVisible:t.buttonsVisible,visibleLabel:t.visibleLabel,ariaLabel:t.ariaLabel,answerForms:[{considered:"correct",form:t.form,simplify:t.simplify,value:t.value}]})},Pt=v.forwardRef((t,e)=>{const r=as();return d(sr,{ref:e,analytics:r.analytics,...t})});Pt.validate=rn;Pt.getUserInputFromProps=sr.getUserInputFromProps;Pt.getOneCorrectAnswerFromRubric=sr.getOneCorrectAnswerFromRubric;const Pu={name:"expression",displayName:"Expression / Equation",accessible:!0,defaultAlignment:"inline-block",widget:Pt,transform:t=>{const{times:e,functions:r,buttonSets:n,buttonsVisible:a,visibleLabel:i,ariaLabel:s}=t;return{keypadConfiguration:Lu(t),times:e,functions:r,buttonSets:n,buttonsVisible:a,visibleLabel:i,ariaLabel:s}},version:{major:1,minor:0},propUpgrades:_u,isLintable:!0};sr.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[{name:"userInput",optional:!1,type:{name:"string",alias:"PerseusExpressionUserInput"}},{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ answerForms: ReadonlyArray; functions: ReadonlyArray; }`,signature:{properties:[{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ @@ -200,7 +200,7 @@ Partial> & { questionCompleted?: boolean; onFocus: (blurPath: FocusPath) => void; onBlur: (blurPath: FocusPath) => void; - findWidgets: (arg1: FilterCriterion) => ReadonlyArray; + findWidgets: (criterion: FilterCriterion) => ReadonlyArray; reviewModeRubric: Rubric; onChange: ChangeHandler; // This is slightly different from the \`trackInteraction\` function in @@ -231,7 +231,7 @@ Partial> & { questionCompleted?: boolean; onFocus: (blurPath: FocusPath) => void; onBlur: (blurPath: FocusPath) => void; - findWidgets: (arg1: FilterCriterion) => ReadonlyArray; + findWidgets: (criterion: FilterCriterion) => ReadonlyArray; reviewModeRubric: Rubric; onChange: ChangeHandler; // This is slightly different from the \`trackInteraction\` function in @@ -540,7 +540,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -584,7 +584,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -628,7 +628,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -672,7 +672,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -716,7 +716,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -760,7 +760,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -804,7 +804,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -848,7 +848,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -892,7 +892,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -936,7 +936,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -980,7 +980,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1024,7 +1024,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1068,7 +1068,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1112,7 +1112,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1156,7 +1156,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1200,7 +1200,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1244,7 +1244,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1288,7 +1288,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1332,7 +1332,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1376,7 +1376,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1420,7 +1420,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1464,7 +1464,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1508,7 +1508,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1552,7 +1552,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1596,7 +1596,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1640,7 +1640,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1684,7 +1684,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1728,7 +1728,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1772,7 +1772,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1816,7 +1816,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1860,7 +1860,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1904,7 +1904,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1948,7 +1948,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props after they have been transformed by the widget's transform function. This is useful for when we need to know how a widget has shuffled its the available choices.`}]}}],raw:`Readonly<{ @@ -2122,56 +2122,12 @@ the available choices.`}]}}],raw:`Readonly<{ >; showAlignmentOptions: NonNullable; } ->`,required:!0}},{key:"keypadElement",value:{name:"any",required:!1}},{key:"questionCompleted",value:{name:"boolean",required:!1}},{key:"onFocus",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"onBlur",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"findWidgets",value:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string +>`,required:!0}},{key:"keypadElement",value:{name:"any",required:!1}},{key:"questionCompleted",value:{name:"boolean",required:!1}},{key:"onFocus",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"onBlur",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"findWidgets",value:{name:"signature",type:"function",raw:"(criterion: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string | (( id: string, widgetInfo: PerseusWidget, widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}],raw:"ReadonlyArray"}},required:!0}},{key:"reviewModeRubric",value:{name:"signature",type:"object",raw:`{ + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"Widget"}],raw:"ReadonlyArray"}},required:!0}},{key:"reviewModeRubric",value:{name:"signature",type:"object",raw:`{ answerForms: ReadonlyArray; functions: ReadonlyArray; }`,signature:{properties:[{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ @@ -2309,183 +2265,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2529,7 +2309,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2573,7 +2353,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2617,7 +2397,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2661,7 +2441,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2705,7 +2485,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2749,7 +2529,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2793,7 +2573,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2837,7 +2617,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2881,7 +2661,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2925,7 +2705,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2969,7 +2749,139 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3013,7 +2925,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3057,7 +2969,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3101,7 +3013,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3145,7 +3057,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3189,7 +3101,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3233,7 +3145,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3277,7 +3189,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3321,7 +3233,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3365,7 +3277,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3409,7 +3321,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3453,7 +3365,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3497,7 +3409,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3541,7 +3453,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3585,7 +3497,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3629,7 +3541,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3673,7 +3585,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3717,7 +3629,51 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ [key: string]: PerseusImageDetail; }`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ // The width of the image @@ -3732,8 +3688,41 @@ the available choices.`}]}}],raw:`Readonly<{ */ replace?: boolean; }`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3777,46 +3766,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3860,21 +3810,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3918,568 +3854,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - selected: boolean; - crossedOut: boolean; - highlighted: boolean; - rationaleShown: boolean; - correctnessShown: boolean; - previouslyAnswered: boolean; - readOnly: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"Empty"},name:"extraData"}],return:{name:"void"}},required:!0}},{key:"isLastUsedWidget",value:{name:"boolean",required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}},{key:"containerSizeClass",value:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]",required:!0}}]}}]},{name:"Partial",elements:[{name:"ReactContextType",raw:"React.ContextType",elements:[{name:"DependenciesContext"}]}],raw:"Partial>"},{name:"signature",type:"object",raw:`{ - apiOptions: NonNullable; - buttonSets: NonNullable; - functions: NonNullable; - linterContext: NonNullable; - onBlur: NonNullable; - onFocus: NonNullable; - times: NonNullable; - visibleLabel: PerseusExpressionWidgetOptions["visibleLabel"]; - ariaLabel: PerseusExpressionWidgetOptions["ariaLabel"]; - value: string; -}`,signature:{properties:[{key:"apiOptions",value:{name:"NonNullable",elements:[{name:'intersection["apiOptions"]',raw:'ExternalProps["apiOptions"]'}],raw:'NonNullable',required:!0}},{key:"buttonSets",value:{name:"NonNullable",elements:[{name:'intersection["buttonSets"]',raw:'ExternalProps["buttonSets"]'}],raw:'NonNullable',required:!0}},{key:"functions",value:{name:"NonNullable",elements:[{name:'intersection["functions"]',raw:'ExternalProps["functions"]'}],raw:'NonNullable',required:!0}},{key:"linterContext",value:{name:"NonNullable",elements:[{name:'intersection["linterContext"]',raw:'ExternalProps["linterContext"]'}],raw:'NonNullable',required:!0}},{key:"onBlur",value:{name:"NonNullable",elements:[{name:'intersection["onBlur"]',raw:'ExternalProps["onBlur"]'}],raw:'NonNullable',required:!0}},{key:"onFocus",value:{name:"NonNullable",elements:[{name:'intersection["onFocus"]',raw:'ExternalProps["onFocus"]'}],raw:'NonNullable',required:!0}},{key:"times",value:{name:"NonNullable",elements:[{name:'intersection["times"]',raw:'ExternalProps["times"]'}],raw:'NonNullable',required:!0}},{key:"visibleLabel",value:{name:"string",raw:'PerseusExpressionWidgetOptions["visibleLabel"]',required:!0}},{key:"ariaLabel",value:{name:"string",raw:'PerseusExpressionWidgetOptions["ariaLabel"]',required:!0}},{key:"value",value:{name:"string",required:!0}}]}}],alias:"Props"}}],returns:{type:{name:"string"}}},{name:"getOneCorrectAnswerFromRubric",docblock:null,modifiers:["static"],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ - answerForms: ReadonlyArray; - functions: ReadonlyArray; -}`,signature:{properties:[{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // The TeX form of the expression. e.g. "x\\\\cdot3=y" - value: string; - // The Answer expression must have the same form - form: boolean; - // The answer expression must be fully expanded and simplified - simplify: boolean; - // Whether the form is considered "correct", "wrong", or "ungraded" - considered: (typeof PerseusExpressionAnswerFormConsidered)[number]; - // A key to identify the answer form in a list - // NOTE: perseus-format.js says this is required even though it isn't necessary. - key?: string; -}`,signature:{properties:[{key:"value",value:{name:"string",required:!0}},{key:"form",value:{name:"boolean",required:!0}},{key:"simplify",value:{name:"boolean",required:!0}},{key:"considered",value:{name:"unknown[number]",raw:"(typeof PerseusExpressionAnswerFormConsidered)[number]",required:!0}},{key:"key",value:{name:"string",required:!1}}]}}],raw:"ReadonlyArray",required:!0}},{key:"functions",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},alias:"PerseusExpressionRubric"}}],returns:{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]}}},{name:"componentDidMount",docblock:null,modifiers:[],params:[],returns:null},{name:"componentDidUpdate",docblock:null,modifiers:[],params:[{name:"prevProps",optional:!1,type:null}],returns:null},{name:"componentWillUnmount",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleMouseDown",docblock:null,modifiers:[],params:[],returns:null},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"{scoring, ...rubric}",optional:!1,type:null}],returns:null},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"string"}}},{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:{name:"any"}}],returns:null},{name:"parse",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:{name:"string"}},{name:"props",optional:!1,type:{name:"intersection",raw:`ExternalProps & -Partial> & { - apiOptions: NonNullable; - buttonSets: NonNullable; - functions: NonNullable; - linterContext: NonNullable; - onBlur: NonNullable; - onFocus: NonNullable; - times: NonNullable; - visibleLabel: PerseusExpressionWidgetOptions["visibleLabel"]; - ariaLabel: PerseusExpressionWidgetOptions["ariaLabel"]; - value: string; -}`,elements:[{name:"intersection",raw:`RenderProps & { - // provided by renderer.jsx#getWidgetProps() - widgetId: string; - alignment: string | null | undefined; - static: boolean | null | undefined; - problemNum: number | null | undefined; - apiOptions: APIOptionsWithDefaults; - keypadElement?: any; - questionCompleted?: boolean; - onFocus: (blurPath: FocusPath) => void; - onBlur: (blurPath: FocusPath) => void; - findWidgets: (arg1: FilterCriterion) => ReadonlyArray; - reviewModeRubric: Rubric; - onChange: ChangeHandler; - // This is slightly different from the \`trackInteraction\` function in - // APIOptions. This provides the widget an easy way to notify the renderer - // of an interaction. The Renderer then enriches the data provided with the - // widget's id and type before calling APIOptions.trackInteraction. - trackInteraction: (extraData?: TrackingExtraArgs) => void; - isLastUsedWidget: boolean; - // provided by widget-container.jsx#render() - linterContext: LinterContextProps; - containerSizeClass: SizeClass; -}`,elements:[{name:"signature",type:"object",raw:`{ - buttonSets: PerseusExpressionWidgetOptions["buttonSets"]; - buttonsVisible?: PerseusExpressionWidgetOptions["buttonsVisible"]; - functions: PerseusExpressionWidgetOptions["functions"]; - times: PerseusExpressionWidgetOptions["times"]; - visibleLabel: PerseusExpressionWidgetOptions["visibleLabel"]; - ariaLabel: PerseusExpressionWidgetOptions["ariaLabel"]; - keypadConfiguration: ReturnType; -}`,signature:{properties:[{key:"buttonSets",value:{name:"ReadonlyArray",raw:'PerseusExpressionWidgetOptions["buttonSets"]',required:!0}},{key:"buttonsVisible",value:{name:"union",raw:'PerseusExpressionWidgetOptions["buttonsVisible"]',required:!1}},{key:"functions",value:{name:"ReadonlyArray",raw:'PerseusExpressionWidgetOptions["functions"]',required:!0}},{key:"times",value:{name:"boolean",raw:'PerseusExpressionWidgetOptions["times"]',required:!0}},{key:"visibleLabel",value:{name:"string",raw:'PerseusExpressionWidgetOptions["visibleLabel"]',required:!0}},{key:"ariaLabel",value:{name:"string",raw:'PerseusExpressionWidgetOptions["ariaLabel"]',required:!0}},{key:"keypadConfiguration",value:{name:"ReturnType",elements:[{name:"keypadConfigurationForProps"}],raw:"ReturnType",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // provided by renderer.jsx#getWidgetProps() - widgetId: string; - alignment: string | null | undefined; - static: boolean | null | undefined; - problemNum: number | null | undefined; - apiOptions: APIOptionsWithDefaults; - keypadElement?: any; - questionCompleted?: boolean; - onFocus: (blurPath: FocusPath) => void; - onBlur: (blurPath: FocusPath) => void; - findWidgets: (arg1: FilterCriterion) => ReadonlyArray; - reviewModeRubric: Rubric; - onChange: ChangeHandler; - // This is slightly different from the \`trackInteraction\` function in - // APIOptions. This provides the widget an easy way to notify the renderer - // of an interaction. The Renderer then enriches the data provided with the - // widget's id and type before calling APIOptions.trackInteraction. - trackInteraction: (extraData?: TrackingExtraArgs) => void; - isLastUsedWidget: boolean; - // provided by widget-container.jsx#render() - linterContext: LinterContextProps; - containerSizeClass: SizeClass; -}`,signature:{properties:[{key:"widgetId",value:{name:"string",required:!0}},{key:"alignment",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"static",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!0}},{key:"problemNum",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"apiOptions",value:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4523,7 +3898,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4567,7 +3942,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4611,7 +3986,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4655,7 +4030,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4699,7 +4074,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4743,7 +4118,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4787,7 +4162,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4831,7 +4206,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4875,7 +4250,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4919,7 +4294,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4963,7 +4338,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5007,7 +4382,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5051,7 +4426,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5095,7 +4470,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5139,7 +4514,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5183,7 +4558,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5227,7 +4602,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5271,7 +4646,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5315,7 +4690,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5359,7 +4734,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5403,7 +4778,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5447,7 +4822,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5491,7 +4866,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5535,7 +4910,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5579,7 +4954,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5623,7 +4998,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5667,7 +5042,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5711,7 +5086,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5755,7 +5130,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5799,7 +5174,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5843,7 +5218,79 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ + _multi: ItemTree; +}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5887,7 +5334,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5931,186 +5378,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},{name:"signature",type:"object",raw:`{ - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< - APIOptions["setDrawingAreaAvailable"] ->`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< - APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; - } ->`,required:!0}},{key:"keypadElement",value:{name:"any",required:!1}},{key:"questionCompleted",value:{name:"boolean",required:!1}},{key:"onFocus",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"onBlur",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"findWidgets",value:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6154,101 +5422,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}],raw:"ReadonlyArray"}},required:!0}},{key:"reviewModeRubric",value:{name:"signature",type:"object",raw:`{ - answerForms: ReadonlyArray; - functions: ReadonlyArray; -}`,signature:{properties:[{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // The TeX form of the expression. e.g. "x\\\\cdot3=y" - value: string; - // The Answer expression must have the same form - form: boolean; - // The answer expression must be fully expanded and simplified - simplify: boolean; - // Whether the form is considered "correct", "wrong", or "ungraded" - considered: (typeof PerseusExpressionAnswerFormConsidered)[number]; - // A key to identify the answer form in a list - // NOTE: perseus-format.js says this is required even though it isn't necessary. - key?: string; -}`,signature:{properties:[{key:"value",value:{name:"string",required:!0}},{key:"form",value:{name:"boolean",required:!0}},{key:"simplify",value:{name:"boolean",required:!0}},{key:"considered",value:{name:"unknown[number]",raw:"(typeof PerseusExpressionAnswerFormConsidered)[number]",required:!0}},{key:"key",value:{name:"string",required:!1}}]}}],raw:"ReadonlyArray",required:!0}},{key:"functions",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!0}},{key:"onChange",value:{name:"signature",type:"function",raw:`( - arg1: { - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; - }, - callback?: () => unknown | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; -}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; - }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6292,7 +5466,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6336,7 +5510,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6380,7 +5554,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6424,7 +5598,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6468,7 +5642,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6512,7 +5686,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6556,7 +5730,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6600,7 +5774,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6644,7 +5818,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6688,7 +5862,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6732,7 +5906,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6776,7 +5950,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6820,7 +5994,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6864,7 +6038,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6908,7 +6082,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6952,7 +6126,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6996,7 +6170,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7040,7 +6214,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7084,7 +6258,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7128,7 +6302,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7172,7 +6346,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7216,7 +6390,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7260,7 +6434,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7304,7 +6478,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7348,7 +6522,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7392,7 +6566,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7436,7 +6610,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7480,7 +6654,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7524,7 +6698,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7568,7 +6742,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7612,7 +6786,54 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7656,7 +6877,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7700,23 +6921,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7760,46 +6965,51 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ // The major part of the version major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7843,21 +7053,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7901,339 +7097,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - selected: boolean; - crossedOut: boolean; - highlighted: boolean; - rationaleShown: boolean; - correctnessShown: boolean; - previouslyAnswered: boolean; - readOnly: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"Empty"},name:"extraData"}],return:{name:"void"}},required:!0}},{key:"isLastUsedWidget",value:{name:"boolean",required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}},{key:"containerSizeClass",value:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]",required:!0}}]}}]},{name:"Partial",elements:[{name:"ReactContextType",raw:"React.ContextType",elements:[{name:"DependenciesContext"}]}],raw:"Partial>"},{name:"signature",type:"object",raw:`{ - apiOptions: NonNullable; - buttonSets: NonNullable; - functions: NonNullable; - linterContext: NonNullable; - onBlur: NonNullable; - onFocus: NonNullable; - times: NonNullable; - visibleLabel: PerseusExpressionWidgetOptions["visibleLabel"]; - ariaLabel: PerseusExpressionWidgetOptions["ariaLabel"]; - value: string; -}`,signature:{properties:[{key:"apiOptions",value:{name:"NonNullable",elements:[{name:'intersection["apiOptions"]',raw:'ExternalProps["apiOptions"]'}],raw:'NonNullable',required:!0}},{key:"buttonSets",value:{name:"NonNullable",elements:[{name:'intersection["buttonSets"]',raw:'ExternalProps["buttonSets"]'}],raw:'NonNullable',required:!0}},{key:"functions",value:{name:"NonNullable",elements:[{name:'intersection["functions"]',raw:'ExternalProps["functions"]'}],raw:'NonNullable',required:!0}},{key:"linterContext",value:{name:"NonNullable",elements:[{name:'intersection["linterContext"]',raw:'ExternalProps["linterContext"]'}],raw:'NonNullable',required:!0}},{key:"onBlur",value:{name:"NonNullable",elements:[{name:'intersection["onBlur"]',raw:'ExternalProps["onBlur"]'}],raw:'NonNullable',required:!0}},{key:"onFocus",value:{name:"NonNullable",elements:[{name:'intersection["onFocus"]',raw:'ExternalProps["onFocus"]'}],raw:'NonNullable',required:!0}},{key:"times",value:{name:"NonNullable",elements:[{name:'intersection["times"]',raw:'ExternalProps["times"]'}],raw:'NonNullable',required:!0}},{key:"visibleLabel",value:{name:"string",raw:'PerseusExpressionWidgetOptions["visibleLabel"]',required:!0}},{key:"ariaLabel",value:{name:"string",raw:'PerseusExpressionWidgetOptions["ariaLabel"]',required:!0}},{key:"value",value:{name:"string",required:!0}}]}}],alias:"Props"}}],returns:null},{name:"changeAndTrack",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"any"}},{name:"cb",optional:!1,type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}}}],returns:null},{name:"_handleFocus",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleBlur",docblock:null,modifiers:[],params:[],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"focusInputPath",docblock:null,modifiers:[],params:[{name:"inputPath",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",alias:"InputPath"}}],returns:null},{name:"blurInputPath",docblock:null,modifiers:[],params:[{name:"inputPath",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",alias:"InputPath"}}],returns:null},{name:"insert",docblock:null,modifiers:[],params:[{name:"keyPressed",optional:!1,type:{name:"Key",alias:"Key"}}],returns:null},{name:"getInputPaths",docblock:null,modifiers:[],params:[],returns:null},{name:"getGrammarTypeForPath",docblock:null,modifiers:[],params:[{name:"inputPath",optional:!1,type:{name:"string"}}],returns:null},{name:"setInputValue",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"string"}},{name:"newValue",optional:!1,type:{name:"string"}},{name:"cb",optional:!1,type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}}}],returns:null}],displayName:"Expression",props:{widgetId:{required:!0,tsType:{name:"string"},description:""},alignment:{required:!0,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},problemNum:{required:!0,tsType:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},description:""},apiOptions:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["apiOptions"]',raw:'ExternalProps["apiOptions"]'}],raw:'NonNullable'},description:"",defaultValue:{value:`{ - isArticle: false, - isMobile: false, - onFocusChange: function () {}, - GroupMetadataEditor: StubTagEditor, - showAlignmentOptions: false, - readOnly: false, - groupAnnotator: function (): null { - return null; - }, - baseElements: { - Link: ( - props: any, - ): React.ReactElement> => { - return ; - }, - }, - setDrawingAreaAvailable: function () {}, - canScrollPage: false, - crossOutEnabled: false, - editorChangeDelay: 0, -}`,computed:!1}},keypadElement:{required:!1,tsType:{name:"any"},description:""},questionCompleted:{required:!1,tsType:{name:"boolean"},description:""},onFocus:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["onFocus"]',raw:'ExternalProps["onFocus"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"() => {}",computed:!1}},onBlur:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["onBlur"]',raw:'ExternalProps["onBlur"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"() => {}",computed:!1}},findWidgets:{required:!0,tsType:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray"}}},description:""},reviewModeRubric:{required:!0,tsType:{name:"Rubric"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`( - arg1: { - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; - }, - callback?: () => unknown | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; -}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; - }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8277,7 +7141,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8321,7 +7185,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8365,7 +7229,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8409,7 +7273,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8453,7 +7317,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8497,7 +7361,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8541,7 +7405,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8585,7 +7449,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8629,7 +7493,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8673,7 +7537,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8717,7 +7581,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8761,7 +7625,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8805,7 +7669,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8849,7 +7713,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8893,7 +7757,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8937,359 +7801,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9333,7 +7845,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9377,7 +7889,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9421,7 +7933,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9465,7 +7977,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9509,7 +8021,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9553,7 +8065,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9597,7 +8109,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9641,7 +8153,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9685,23 +8197,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9745,46 +8241,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9828,21 +8285,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9886,7 +8329,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ // @ts-expect-error - TS2315 - Type 'Tree' is not generic. [k: string]: Tree; }`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ @@ -10102,15 +8545,44 @@ the available choices.`}]}}],raw:`Readonly<{ // NOTE(jeremy): This is referenced in the component. Verify if there's any // production data that still has this. coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},trackInteraction:{required:!0,tsType:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"TrackingExtraArgs"},name:"extraData"}],return:{name:"void"}}},description:""},isLastUsedWidget:{required:!0,tsType:{name:"boolean"},description:""},linterContext:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["linterContext"]',raw:'ExternalProps["linterContext"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"linterContextDefault",computed:!0}},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},buttonSets:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["buttonSets"]',raw:'ExternalProps["buttonSets"]'}],raw:'NonNullable'},description:"",defaultValue:{value:'["basic", "trig", "prealgebra", "logarithms"]',computed:!1}},functions:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["functions"]',raw:'ExternalProps["functions"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"[]",computed:!1}},times:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["times"]',raw:'ExternalProps["times"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"false",computed:!1}},visibleLabel:{required:!0,tsType:{name:"string",raw:'PerseusExpressionWidgetOptions["visibleLabel"]'},description:""},ariaLabel:{required:!0,tsType:{name:"string",raw:'PerseusExpressionWidgetOptions["ariaLabel"]'},description:""},value:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}}}};function Du(t,e){let r=0;for(let n=e,a=t.length;n-1&&i>-1?Math.min(a,i):a>-1?a:i>-1?i:-1}function sa(t,e){if(!t)return"";let r="",n=0,a=Ya(t,n);for(;a>-1;){r+=t.substring(n,a),n=a;const i=Ba(t,n,e);n=i.endpoint+1;const s=Ba(t,n,e);n=s.endpoint+1,r.length&&(r+=" "),r+=e(i.expression,s.expression),a=Ya(t,n)}return r+=t.slice(n),r}function Uu(t){function e(n){return n.indexOf("\\frac")>-1||n.indexOf("\\dfrac")>-1}return sa(t,function(n,a){let i;return e(n)||e(a)?i="\\dfrac":i="\\frac",i+" {"+n+"}{"+a+"}"})}function Vu(t){return sa(t,function(n,a){return n+"/"+a}).replace("\\%","%")}const ws={parseTex:Vu,modifyTex:Uu},Hu=ws.parseTex,ks={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"}};function Xa(t,e,r){e.answerType==null&&(e.answerType="number");const n=`${e.value}`,a=Lr.number.createValidatorFunctional(n,{simplify:e.simplify,inexact:e.inexact||void 0,maxError:e.maxError,forms:ks[e.answerType].forms},r),i=Hu(t.currentValue),s=a(i);return s.empty?{type:"invalid",message:s.message}:{type:"points",earned:s.correct?1:0,total:1,message:s.message}}const Gu={integer:function(t,e){return e.integerExample},proper:function(t,e){return t.simplify==="optional"?e.properExample:e.simplifiedProperExample},improper:function(t,e){return t.simplify==="optional"?e.improperExample:e.simplifiedImproperExample},mixed:function(t,e){return e.mixedExample},decimal:function(t,e){return e.decimalExample},percent:function(t,e){return e.percentExample},pi:function(t,e){return e.piExample}},jr=class jr extends k.Component{constructor(){super(...arguments),this.shouldShowExamples=()=>this.props.answerType!=="number",this.handleChange=(e,r)=>{this.props.onChange({currentValue:e},r)},this._handleFocus=()=>{this.props.onFocus([])},this._handleBlur=()=>{this.props.onBlur([])},this.focus=()=>(this.refs.input.focus(),!0),this.focusInputPath=e=>{this.refs.input.focus()},this.blurInputPath=e=>{var r,n;typeof((r=this.refs.input)==null?void 0:r.blur)=="function"&&((n=this.refs.input)==null||n.blur())},this.getInputPaths=()=>[[]],this.getGrammarTypeForPath=e=>"number",this.setInputValue=(e,r,n)=>{this.props.onChange({currentValue:r},n)},this.examples=()=>{const{strings:e}=this.context,r=this.props.answerType,n=ks[r].forms.split(/\s*,\s*/),a=g.map(n,i=>Gu[i](this.props,e));return[e.yourAnswer].concat(a)}}static validate(e,r,n){return Xa(e,r,n)}static getUserInputFromProps(e){return{currentValue:e.currentValue}}static getOneCorrectAnswerFromRubric(e){if(e.value==null)return;let r=String(e.value);return e.inexact&&e.maxError&&(r+=" ± "+e.maxError),r}getUserInput(){return jr.getUserInputFromProps(this.props)}simpleValidate(e){return Xa(this.getUserInput(),e,this.context.strings)}render(){if(this.props.apiOptions.customKeypad){const n=d(Fr,{ref:"input",value:this.props.currentValue,keypadElement:this.props.keypadElement,onChange:this.handleChange,onFocus:this._handleFocus,onBlur:this._handleBlur});return this.props.rightAlign?d("div",{className:"perseus-input-right-align",children:n}):n}const e=this.props.reviewModeRubric,r=[wr.default,this.props.size==="small"?wr.small:null,this.props.rightAlign?wr.rightAlign:wr.leftAlign];return e&&!this.props.currentValue&&r.push(wr.answerStateUnanswered),d(ys,{ref:"input",value:this.props.currentValue,onChange:this.handleChange,style:r,examples:this.examples(),shouldShowExamples:this.shouldShowExamples(),onFocus:this._handleFocus,onBlur:this._handleBlur,id:this.props.widgetId,disabled:this.props.apiOptions.readOnly,linterContext:this.props.linterContext})}};jr.contextType=M,jr.defaultProps={currentValue:"",size:"normal",answerType:"number",rightAlign:!1,apiOptions:ge.defaults,linterContext:B};let sn=jr;const wr=j.StyleSheet.create({default:{width:80,height:"auto"},small:{width:40},leftAlign:{paddingLeft:me.xxxSmall_4,paddingRight:0},rightAlign:{textAlign:"right",paddingLeft:0,paddingRight:me.xxxSmall_4},answerStateUnanswered:{backgroundColor:"#eee",border:"solid 1px #999"}}),Ku=t=>{const{simplify:e,size:r,answerType:n,rightAlign:a}=t;return{simplify:e,size:r,answerType:n,rightAlign:a}},Bu={name:"input-number",displayName:"Input number (deprecated - use numeric input instead)",defaultAlignment:"inline-block",hidden:!0,widget:sn,transform:Ku,isLintable:!0},Yu=ws.parseTex,Xu=[{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:"π"}];function Qa(t,e){if(!(typeof t=="string"&&t.endsWith("%")))return t;const r=parseFloat(t.slice(0,-1));return isNaN(r)?t:e?r/100:r}function Ja(t,e,r){const n=Xu.map(u=>u.value).filter(u=>u!=="pi"),a=u=>{const y=`${u.value}`,m=[...u.answerForms??[]];return(!u.strict||m.length===0)&&m.push(...n),Lr.number.createValidatorFunctional(y,{message:u.message,simplify:u.status==="correct"?u.simplify:"optional",inexact:!0,maxError:u.maxError,forms:m},r)},i=Yu(t.currentValue),s=e.answers.filter(u=>u.status==="correct"),o=s.every(u=>Math.abs(u.value)<=1);let l=s.map(u=>{let y=i;return e.coefficient&&(y?y==="-"&&(y=-1):y=1),a(u)(Qa(y,o))}).find(u=>u.correct||u.empty);if(!l){const y=[].concat(e.answers.filter(m=>m.status==="ungraded"),e.answers.filter(m=>m.status==="wrong")).find(m=>a(m)(Qa(i,o)).correct);l={empty:y?y.status==="ungraded":!1,correct:y?y.status==="correct":!1,message:y?y.message:null,guess:i}}return l.empty?{type:"invalid",message:l.message}:{type:"points",earned:l.correct?1:0,total:1,message:l.message}}const Zr={integer:(t,e)=>e.integerExample,proper:(t,e)=>t.simplify==="optional"?e.properExample:e.simplifiedProperExample,improper:(t,e)=>t.simplify==="optional"?e.improperExample:e.simplifiedImproperExample,mixed:(t,e)=>e.mixedExample,decimal:(t,e)=>e.decimalExample,pi:(t,e)=>e.piExample},Wr=class Wr extends k.Component{constructor(){super(...arguments),this.state={previousValues:[""]},this.examples=()=>{var n;const e=((n=this.props.answerForms)==null?void 0:n.length)!==0?this.props.answerForms:Object.keys(Zr).map(a=>({name:a,simplify:"required"}));let r=g.map(e,a=>Zr[a.name](a,this.context.strings));return r=g.uniq(r),[this.context.strings.yourAnswer].concat(r)},this.shouldShowExamples=()=>{var a,i;const e=((a=this.props.answerForms)==null?void 0:a.length)===0,n=g.uniq((i=this.props.answerForms)==null?void 0:i.map(s=>s.name)).length>=Object.keys(Zr).length;return!e&&!n},this.focus=()=>{var e;return(e=this.inputRef)==null||e.focus(),!0},this.focusInputPath=()=>{var e;(e=this.inputRef)==null||e.focus()},this.blurInputPath=()=>{var e;(e=this.inputRef)==null||e.blur()},this.getInputPaths=()=>[[]],this.getGrammarTypeForPath=e=>"number",this.setInputValue=(e,r,n)=>{this.props.onChange({currentValue:r},n)},this.handleChange=(e,r)=>{this.props.onChange({currentValue:e},r),this.props.trackInteraction()},this._handleFocus=()=>{this.props.onFocus([])},this._handleBlur=()=>{this.props.onBlur([])}}static getUserInputFromProps(e){return{currentValue:e.currentValue}}static getOneCorrectAnswerFromRubric(e){const n=e.answers.filter(a=>a.status==="correct").map(a=>{let i="decimal";a.answerForms&&a.answerForms[0]&&(i=a.answerForms[0]);let s=Ve.toNumericString(a.value,i);return a.maxError&&(s+=" ± "+Ve.toNumericString(a.maxError,i)),s});if(n.length!==0)return n[0]}static validate(e,r,n){return Ja(e,r,n)}simpleValidate(e){return Ja(this.getUserInput(),e,this.context.strings)}getUserInput(){return Wr.getUserInputFromProps(this.props)}render(){let e=this.props.labelText;(e==null||e==="")&&(e=this.context.strings.yourAnswerLabel);const r=a=>this.props.rightAlign?d("div",{className:"perseus-input-right-align",children:a}):a;if(this.props.apiOptions.customKeypad)return r(d(Fr,{ref:a=>this.inputRef=a,value:this.props.currentValue,keypadElement:this.props.keypadElement,onChange:this.handleChange,onFocus:this._handleFocus,onBlur:this._handleBlur}));const n=j.StyleSheet.create({input:{textAlign:this.props.rightAlign?"right":"left",width:this.props.size==="small"?40:80,padding:0,height:"auto"}});return d("div",{children:d(ys,{ref:a=>this.inputRef=a,value:this.props.currentValue,onChange:this.handleChange,labelText:e,examples:this.examples(),shouldShowExamples:this.shouldShowExamples(),onFocus:this._handleFocus,onBlur:this._handleBlur,id:this.props.widgetId,disabled:this.props.apiOptions.readOnly,style:n.input})})}};Wr.contextType=M,Wr.defaultProps={currentValue:"",size:"normal",rightAlign:!1,apiOptions:ge.defaults,coefficient:!1,answerForms:[],labelText:"",linterContext:B};let lt=Wr;const Qu=function(t){const e=function(i,s){return i.reduce((o,l)=>g.find(o,s.bind(null,l))?o:o.concat([l]),[])},r=t.flat(),n=e(r,g.isEqual),a=Object.keys(Zr);return g.sortBy(n,i=>a.indexOf(i.name))},Ju=function(t){return g.extend(g.omit(t,"answers"),{answerForms:Qu(t.answers.map(r=>g.map(r.answerForms,n=>({simplify:r.simplify,name:n}))))})},Zu={name:"numeric-input",displayName:"Numeric input",defaultAlignment:"inline-block",accessible:!0,widget:lt,transform:Ju,isLintable:!0};lt.__docgenInfo={description:"",methods:[{name:"getUserInputFromProps",docblock:null,modifiers:["static"],params:[{name:"props",optional:!1,type:{name:"intersection",raw:`ExternalProps & { - size: NonNullable; - rightAlign: NonNullable; +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"Empty"},name:"extraData"}],return:{name:"void"}},required:!0}},{key:"isLastUsedWidget",value:{name:"boolean",required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}},{key:"containerSizeClass",value:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]",required:!0}}]}}]},{name:"Partial",elements:[{name:"ReactContextType",raw:"React.ContextType",elements:[{name:"DependenciesContext"}]}],raw:"Partial>"},{name:"signature",type:"object",raw:`{ apiOptions: NonNullable; - coefficient: NonNullable; - answerForms: NonNullable; - labelText: NonNullable; + buttonSets: NonNullable; + functions: NonNullable; linterContext: NonNullable; - currentValue: string; + onBlur: NonNullable; + onFocus: NonNullable; + times: NonNullable; + visibleLabel: PerseusExpressionWidgetOptions["visibleLabel"]; + ariaLabel: PerseusExpressionWidgetOptions["ariaLabel"]; + value: string; +}`,signature:{properties:[{key:"apiOptions",value:{name:"NonNullable",elements:[{name:'intersection["apiOptions"]',raw:'ExternalProps["apiOptions"]'}],raw:'NonNullable',required:!0}},{key:"buttonSets",value:{name:"NonNullable",elements:[{name:'intersection["buttonSets"]',raw:'ExternalProps["buttonSets"]'}],raw:'NonNullable',required:!0}},{key:"functions",value:{name:"NonNullable",elements:[{name:'intersection["functions"]',raw:'ExternalProps["functions"]'}],raw:'NonNullable',required:!0}},{key:"linterContext",value:{name:"NonNullable",elements:[{name:'intersection["linterContext"]',raw:'ExternalProps["linterContext"]'}],raw:'NonNullable',required:!0}},{key:"onBlur",value:{name:"NonNullable",elements:[{name:'intersection["onBlur"]',raw:'ExternalProps["onBlur"]'}],raw:'NonNullable',required:!0}},{key:"onFocus",value:{name:"NonNullable",elements:[{name:'intersection["onFocus"]',raw:'ExternalProps["onFocus"]'}],raw:'NonNullable',required:!0}},{key:"times",value:{name:"NonNullable",elements:[{name:'intersection["times"]',raw:'ExternalProps["times"]'}],raw:'NonNullable',required:!0}},{key:"visibleLabel",value:{name:"string",raw:'PerseusExpressionWidgetOptions["visibleLabel"]',required:!0}},{key:"ariaLabel",value:{name:"string",raw:'PerseusExpressionWidgetOptions["ariaLabel"]',required:!0}},{key:"value",value:{name:"string",required:!0}}]}}],alias:"Props"}}],returns:{type:{name:"string"}}},{name:"getOneCorrectAnswerFromRubric",docblock:null,modifiers:["static"],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + answerForms: ReadonlyArray; + functions: ReadonlyArray; +}`,signature:{properties:[{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + // The TeX form of the expression. e.g. "x\\\\cdot3=y" + value: string; + // The Answer expression must have the same form + form: boolean; + // The answer expression must be fully expanded and simplified + simplify: boolean; + // Whether the form is considered "correct", "wrong", or "ungraded" + considered: (typeof PerseusExpressionAnswerFormConsidered)[number]; + // A key to identify the answer form in a list + // NOTE: perseus-format.js says this is required even though it isn't necessary. + key?: string; +}`,signature:{properties:[{key:"value",value:{name:"string",required:!0}},{key:"form",value:{name:"boolean",required:!0}},{key:"simplify",value:{name:"boolean",required:!0}},{key:"considered",value:{name:"unknown[number]",raw:"(typeof PerseusExpressionAnswerFormConsidered)[number]",required:!0}},{key:"key",value:{name:"string",required:!1}}]}}],raw:"ReadonlyArray",required:!0}},{key:"functions",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},alias:"PerseusExpressionRubric"}}],returns:{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]}}},{name:"componentDidMount",docblock:null,modifiers:[],params:[],returns:null},{name:"componentDidUpdate",docblock:null,modifiers:[],params:[{name:"prevProps",optional:!1,type:null}],returns:null},{name:"componentWillUnmount",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleMouseDown",docblock:null,modifiers:[],params:[],returns:null},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"{scoring, ...rubric}",optional:!1,type:null}],returns:null},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"string"}}},{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:{name:"any"}}],returns:null},{name:"parse",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:{name:"string"}},{name:"props",optional:!1,type:{name:"intersection",raw:`ExternalProps & +Partial> & { + apiOptions: NonNullable; + buttonSets: NonNullable; + functions: NonNullable; + linterContext: NonNullable; + onBlur: NonNullable; + onFocus: NonNullable; + times: NonNullable; + visibleLabel: PerseusExpressionWidgetOptions["visibleLabel"]; + ariaLabel: PerseusExpressionWidgetOptions["ariaLabel"]; + value: string; }`,elements:[{name:"intersection",raw:`RenderProps & { // provided by renderer.jsx#getWidgetProps() widgetId: string; @@ -10122,7 +8594,7 @@ the available choices.`}]}}],raw:`Readonly<{ questionCompleted?: boolean; onFocus: (blurPath: FocusPath) => void; onBlur: (blurPath: FocusPath) => void; - findWidgets: (arg1: FilterCriterion) => ReadonlyArray; + findWidgets: (criterion: FilterCriterion) => ReadonlyArray; reviewModeRubric: Rubric; onChange: ChangeHandler; // This is slightly different from the \`trackInteraction\` function in @@ -10135,67 +8607,14 @@ the available choices.`}]}}],raw:`Readonly<{ linterContext: LinterContextProps; containerSizeClass: SizeClass; }`,elements:[{name:"signature",type:"object",raw:`{ - // A list of all the possible correct and incorrect answers - answers: ReadonlyArray; - // Translatable Text; Text to describe this input. This will be shown to users using screenreaders. - labelText: string; - // Use size "Normal" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them. Options: "normal" or "small" - size: string; - // A coefficient style number allows the student to use - for -1 and an empty string to mean 1. - coefficient: boolean; - // Whether to right-align the text or not - // NOTE: perseus_data.go says this is required even though it isn't necessary. - rightAlign?: boolean; - // Always false. Not used for this widget - static: boolean; - // Used by examples, maybe not used and should be removed in the future - // see TODO in numeric-input - answerForms?: ReadonlyArray; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // Translatable Display; A description for why this answer is correct, wrong, or ungraded - message: string; - // The expected answer - value: number; - // Whether this answer is "correct", "wrong", or "ungraded" - status: string; - // The forms available for this answer. Options: "integer, ""decimal", "proper", "improper", "mixed", or "pi" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - answerForms?: ReadonlyArray; - // Whether we should check the answer strictly against the the configured answerForms (strict = true) - // or include the set of default answerForms (strict = false). - strict: boolean; - // A range of error +/- the value - // NOTE: perseus_data.go says this is non-nullable even though we handle null values. - maxError: number | null | undefined; - // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: "required", "correct", or "enforced" - simplify: string | null | undefined; -}`,signature:{properties:[{key:"message",value:{name:"string",required:!0}},{key:"value",value:{name:"number",required:!0}},{key:"status",value:{name:"string",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"union",raw:`| "integer" -| "mixed" -| "improper" -| "proper" -| "decimal" -| "percent" -| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}],raw:"ReadonlyArray",required:!1}},{key:"strict",value:{name:"boolean",required:!0}},{key:"maxError",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"simplify",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"labelText",value:{name:"string",required:!0}},{key:"size",value:{name:"string",required:!0}},{key:"coefficient",value:{name:"boolean",required:!0}},{key:"rightAlign",value:{name:"boolean",required:!1}},{key:"static",value:{name:"boolean",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - simplify: - | "required" - | "correct" - | "enforced" - | "optional" - | null - | undefined; - name: MathFormat; -}`,signature:{properties:[{key:"simplify",value:{name:"union",raw:`| "required" -| "correct" -| "enforced" -| "optional" -| null -| undefined`,elements:[{name:"literal",value:'"required"'},{name:"literal",value:'"correct"'},{name:"literal",value:'"enforced"'},{name:"literal",value:'"optional"'},{name:"null"},{name:"undefined"}],required:!0}},{key:"name",value:{name:"union",raw:`| "integer" -| "mixed" -| "improper" -| "proper" -| "decimal" -| "percent" -| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}}]}}],raw:"ReadonlyArray",required:!1}}]},required:!0},{name:"signature",type:"object",raw:`{ + buttonSets: PerseusExpressionWidgetOptions["buttonSets"]; + buttonsVisible?: PerseusExpressionWidgetOptions["buttonsVisible"]; + functions: PerseusExpressionWidgetOptions["functions"]; + times: PerseusExpressionWidgetOptions["times"]; + visibleLabel: PerseusExpressionWidgetOptions["visibleLabel"]; + ariaLabel: PerseusExpressionWidgetOptions["ariaLabel"]; + keypadConfiguration: ReturnType; +}`,signature:{properties:[{key:"buttonSets",value:{name:"ReadonlyArray",raw:'PerseusExpressionWidgetOptions["buttonSets"]',required:!0}},{key:"buttonsVisible",value:{name:"union",raw:'PerseusExpressionWidgetOptions["buttonsVisible"]',required:!1}},{key:"functions",value:{name:"ReadonlyArray",raw:'PerseusExpressionWidgetOptions["functions"]',required:!0}},{key:"times",value:{name:"boolean",raw:'PerseusExpressionWidgetOptions["times"]',required:!0}},{key:"visibleLabel",value:{name:"string",raw:'PerseusExpressionWidgetOptions["visibleLabel"]',required:!0}},{key:"ariaLabel",value:{name:"string",raw:'PerseusExpressionWidgetOptions["ariaLabel"]',required:!0}},{key:"keypadConfiguration",value:{name:"ReturnType",elements:[{name:"keypadConfigurationForProps"}],raw:"ReturnType",required:!0}}]}},{name:"signature",type:"object",raw:`{ // provided by renderer.jsx#getWidgetProps() widgetId: string; alignment: string | null | undefined; @@ -10206,7 +8625,7 @@ the available choices.`}]}}],raw:`Readonly<{ questionCompleted?: boolean; onFocus: (blurPath: FocusPath) => void; onBlur: (blurPath: FocusPath) => void; - findWidgets: (arg1: FilterCriterion) => ReadonlyArray; + findWidgets: (criterion: FilterCriterion) => ReadonlyArray; reviewModeRubric: Rubric; onChange: ChangeHandler; // This is slightly different from the \`trackInteraction\` function in @@ -10515,7 +8934,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10559,7 +8978,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10603,7 +9022,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10647,7 +9066,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10691,7 +9110,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10735,7 +9154,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10779,7 +9198,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10823,7 +9242,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10867,7 +9286,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10911,7 +9330,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10955,7 +9374,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10999,7 +9418,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11043,7 +9462,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11087,7 +9506,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11131,7 +9550,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11175,7 +9594,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11219,7 +9638,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11263,7 +9682,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11307,7 +9726,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11351,7 +9770,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11395,7 +9814,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11439,7 +9858,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11483,7 +9902,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11527,7 +9946,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11571,7 +9990,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11615,7 +10034,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11659,7 +10078,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11703,7 +10122,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11747,7 +10166,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11791,7 +10210,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11835,7 +10254,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11879,7 +10298,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11923,7 +10342,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props after they have been transformed by the widget's transform function. This is useful for when we need to know how a widget has shuffled its the available choices.`}]}}],raw:`Readonly<{ @@ -12097,117 +10516,27 @@ the available choices.`}]}}],raw:`Readonly<{ >; showAlignmentOptions: NonNullable; } ->`,required:!0}},{key:"keypadElement",value:{name:"any",required:!1}},{key:"questionCompleted",value:{name:"boolean",required:!1}},{key:"onFocus",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"onBlur",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"findWidgets",value:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string +>`,required:!0}},{key:"keypadElement",value:{name:"any",required:!1}},{key:"questionCompleted",value:{name:"boolean",required:!1}},{key:"onFocus",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"onBlur",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"findWidgets",value:{name:"signature",type:"function",raw:"(criterion: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string | (( id: string, widgetInfo: PerseusWidget, widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}],raw:"ReadonlyArray"}},required:!0}},{key:"reviewModeRubric",value:{name:"signature",type:"object",raw:`{ - // A list of all the possible correct and incorrect answers - answers: ReadonlyArray; - // Translatable Text; Text to describe this input. This will be shown to users using screenreaders. - labelText: string; - // Use size "Normal" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them. Options: "normal" or "small" - size: string; - // A coefficient style number allows the student to use - for -1 and an empty string to mean 1. - coefficient: boolean; - // Whether to right-align the text or not - // NOTE: perseus_data.go says this is required even though it isn't necessary. - rightAlign?: boolean; - // Always false. Not used for this widget - static: boolean; - // Used by examples, maybe not used and should be removed in the future - // see TODO in numeric-input - answerForms?: ReadonlyArray; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // Translatable Display; A description for why this answer is correct, wrong, or ungraded - message: string; - // The expected answer - value: number; - // Whether this answer is "correct", "wrong", or "ungraded" - status: string; - // The forms available for this answer. Options: "integer, ""decimal", "proper", "improper", "mixed", or "pi" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - answerForms?: ReadonlyArray; - // Whether we should check the answer strictly against the the configured answerForms (strict = true) - // or include the set of default answerForms (strict = false). - strict: boolean; - // A range of error +/- the value - // NOTE: perseus_data.go says this is non-nullable even though we handle null values. - maxError: number | null | undefined; - // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: "required", "correct", or "enforced" - simplify: string | null | undefined; -}`,signature:{properties:[{key:"message",value:{name:"string",required:!0}},{key:"value",value:{name:"number",required:!0}},{key:"status",value:{name:"string",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"union",raw:`| "integer" -| "mixed" -| "improper" -| "proper" -| "decimal" -| "percent" -| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}],raw:"ReadonlyArray",required:!1}},{key:"strict",value:{name:"boolean",required:!0}},{key:"maxError",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"simplify",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"labelText",value:{name:"string",required:!0}},{key:"size",value:{name:"string",required:!0}},{key:"coefficient",value:{name:"boolean",required:!0}},{key:"rightAlign",value:{name:"boolean",required:!1}},{key:"static",value:{name:"boolean",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - simplify: - | "required" - | "correct" - | "enforced" - | "optional" - | null - | undefined; - name: MathFormat; -}`,signature:{properties:[{key:"simplify",value:{name:"union",raw:`| "required" -| "correct" -| "enforced" -| "optional" -| null -| undefined`,elements:[{name:"literal",value:'"required"'},{name:"literal",value:'"correct"'},{name:"literal",value:'"enforced"'},{name:"literal",value:'"optional"'},{name:"null"},{name:"undefined"}],required:!0}},{key:"name",value:{name:"union",raw:`| "integer" -| "mixed" -| "improper" -| "proper" -| "decimal" -| "percent" -| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}}]}}],raw:"ReadonlyArray",required:!1}}]},required:!0}},{key:"onChange",value:{name:"signature",type:"function",raw:`( + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"Widget"}],raw:"ReadonlyArray"}},required:!0}},{key:"reviewModeRubric",value:{name:"signature",type:"object",raw:`{ + answerForms: ReadonlyArray; + functions: ReadonlyArray; +}`,signature:{properties:[{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + // The TeX form of the expression. e.g. "x\\\\cdot3=y" + value: string; + // The Answer expression must have the same form + form: boolean; + // The answer expression must be fully expanded and simplified + simplify: boolean; + // Whether the form is considered "correct", "wrong", or "ungraded" + considered: (typeof PerseusExpressionAnswerFormConsidered)[number]; + // A key to identify the answer form in a list + // NOTE: perseus-format.js says this is required even though it isn't necessary. + key?: string; +}`,signature:{properties:[{key:"value",value:{name:"string",required:!0}},{key:"form",value:{name:"boolean",required:!0}},{key:"simplify",value:{name:"boolean",required:!0}},{key:"considered",value:{name:"unknown[number]",raw:"(typeof PerseusExpressionAnswerFormConsidered)[number]",required:!0}},{key:"key",value:{name:"string",required:!1}}]}}],raw:"ReadonlyArray",required:!0}},{key:"functions",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!0}},{key:"onChange",value:{name:"signature",type:"function",raw:`( arg1: { hints?: ReadonlyArray; replace?: boolean; @@ -12330,7 +10659,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12374,7 +10703,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12418,7 +10747,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12462,7 +10791,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12506,7 +10835,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12550,7 +10879,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12594,7 +10923,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12638,7 +10967,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12682,7 +11011,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12726,7 +11055,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12770,7 +11099,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12814,7 +11143,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12858,7 +11187,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12902,7 +11231,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12946,7 +11275,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12990,7 +11319,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13034,7 +11363,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13078,7 +11407,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13122,7 +11451,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13166,7 +11495,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13210,7 +11539,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13254,7 +11583,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13298,7 +11627,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13342,7 +11671,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13386,7 +11715,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13430,7 +11759,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13474,7 +11803,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13518,7 +11847,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13562,7 +11891,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13606,7 +11935,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13650,7 +11979,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13694,7 +12023,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13738,7 +12067,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ [key: string]: PerseusImageDetail; }`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ // The width of the image @@ -13753,8 +12082,41 @@ the available choices.`}]}}],raw:`Readonly<{ */ replace?: boolean; }`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13798,46 +12160,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13881,21 +12204,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13939,708 +12248,98 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - selected: boolean; - crossedOut: boolean; - highlighted: boolean; - rationaleShown: boolean; - correctnessShown: boolean; - previouslyAnswered: boolean; - readOnly: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"Empty"},name:"extraData"}],return:{name:"void"}},required:!0}},{key:"isLastUsedWidget",value:{name:"boolean",required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}},{key:"containerSizeClass",value:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]",required:!0}}]}}]},{name:"signature",type:"object",raw:`{ - size: NonNullable; - rightAlign: NonNullable; - apiOptions: NonNullable; - coefficient: NonNullable; - answerForms: NonNullable; - labelText: NonNullable; - linterContext: NonNullable; - currentValue: string; -}`,signature:{properties:[{key:"size",value:{name:"NonNullable",elements:[{name:'intersection["size"]',raw:'ExternalProps["size"]'}],raw:'NonNullable',required:!0}},{key:"rightAlign",value:{name:"NonNullable",elements:[{name:'intersection["rightAlign"]',raw:'ExternalProps["rightAlign"]'}],raw:'NonNullable',required:!0}},{key:"apiOptions",value:{name:"NonNullable",elements:[{name:'intersection["apiOptions"]',raw:'ExternalProps["apiOptions"]'}],raw:'NonNullable',required:!0}},{key:"coefficient",value:{name:"NonNullable",elements:[{name:'intersection["coefficient"]',raw:'ExternalProps["coefficient"]'}],raw:'NonNullable',required:!0}},{key:"answerForms",value:{name:"NonNullable",elements:[{name:'intersection["answerForms"]',raw:'ExternalProps["answerForms"]'}],raw:'NonNullable',required:!0}},{key:"labelText",value:{name:"NonNullable",elements:[{name:'intersection["labelText"]',raw:'ExternalProps["labelText"]'}],raw:'NonNullable',required:!0}},{key:"linterContext",value:{name:"NonNullable",elements:[{name:'intersection["linterContext"]',raw:'ExternalProps["linterContext"]'}],raw:'NonNullable',required:!0}},{key:"currentValue",value:{name:"string",required:!0}}]}}],alias:"Props"}}],returns:{type:{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}}}},{name:"getOneCorrectAnswerFromRubric",docblock:null,modifiers:["static"],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ - // A list of all the possible correct and incorrect answers - answers: ReadonlyArray; - // Translatable Text; Text to describe this input. This will be shown to users using screenreaders. - labelText: string; - // Use size "Normal" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them. Options: "normal" or "small" - size: string; - // A coefficient style number allows the student to use - for -1 and an empty string to mean 1. - coefficient: boolean; - // Whether to right-align the text or not +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only // NOTE: perseus_data.go says this is required even though it isn't necessary. - rightAlign?: boolean; - // Always false. Not used for this widget + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable static: boolean; - // Used by examples, maybe not used and should be removed in the future - // see TODO in numeric-input - answerForms?: ReadonlyArray; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // Translatable Display; A description for why this answer is correct, wrong, or ungraded - message: string; - // The expected answer - value: number; - // Whether this answer is "correct", "wrong", or "ungraded" - status: string; - // The forms available for this answer. Options: "integer, ""decimal", "proper", "improper", "mixed", or "pi" + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only // NOTE: perseus_data.go says this is required even though it isn't necessary. - answerForms?: ReadonlyArray; - // Whether we should check the answer strictly against the the configured answerForms (strict = true) - // or include the set of default answerForms (strict = false). - strict: boolean; - // A range of error +/- the value - // NOTE: perseus_data.go says this is non-nullable even though we handle null values. - maxError: number | null | undefined; - // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: "required", "correct", or "enforced" - simplify: string | null | undefined; -}`,signature:{properties:[{key:"message",value:{name:"string",required:!0}},{key:"value",value:{name:"number",required:!0}},{key:"status",value:{name:"string",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"union",raw:`| "integer" -| "mixed" -| "improper" -| "proper" -| "decimal" -| "percent" -| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}],raw:"ReadonlyArray",required:!1}},{key:"strict",value:{name:"boolean",required:!0}},{key:"maxError",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"simplify",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"labelText",value:{name:"string",required:!0}},{key:"size",value:{name:"string",required:!0}},{key:"coefficient",value:{name:"boolean",required:!0}},{key:"rightAlign",value:{name:"boolean",required:!1}},{key:"static",value:{name:"boolean",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - simplify: - | "required" - | "correct" - | "enforced" - | "optional" - | null - | undefined; - name: MathFormat; -}`,signature:{properties:[{key:"simplify",value:{name:"union",raw:`| "required" -| "correct" -| "enforced" -| "optional" -| null -| undefined`,elements:[{name:"literal",value:'"required"'},{name:"literal",value:'"correct"'},{name:"literal",value:'"enforced"'},{name:"literal",value:'"optional"'},{name:"null"},{name:"undefined"}],required:!0}},{key:"name",value:{name:"union",raw:`| "integer" -| "mixed" -| "improper" -| "proper" -| "decimal" -| "percent" -| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}}]}}],raw:"ReadonlyArray",required:!1}}]},alias:"PerseusNumericInputRubric"}}],returns:{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]}}},{name:"validate",docblock:null,modifiers:["static"],params:[{name:"userInput",optional:!1,type:{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]},alias:"PerseusNumericInputUserInput"}},{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ - // A list of all the possible correct and incorrect answers - answers: ReadonlyArray; - // Translatable Text; Text to describe this input. This will be shown to users using screenreaders. - labelText: string; - // Use size "Normal" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them. Options: "normal" or "small" - size: string; - // A coefficient style number allows the student to use - for -1 and an empty string to mean 1. - coefficient: boolean; - // Whether to right-align the text or not + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" // NOTE: perseus_data.go says this is required even though it isn't necessary. - rightAlign?: boolean; - // Always false. Not used for this widget + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable static: boolean; - // Used by examples, maybe not used and should be removed in the future - // see TODO in numeric-input - answerForms?: ReadonlyArray; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // Translatable Display; A description for why this answer is correct, wrong, or ungraded - message: string; - // The expected answer - value: number; - // Whether this answer is "correct", "wrong", or "ungraded" - status: string; - // The forms available for this answer. Options: "integer, ""decimal", "proper", "improper", "mixed", or "pi" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - answerForms?: ReadonlyArray; - // Whether we should check the answer strictly against the the configured answerForms (strict = true) - // or include the set of default answerForms (strict = false). - strict: boolean; - // A range of error +/- the value - // NOTE: perseus_data.go says this is non-nullable even though we handle null values. - maxError: number | null | undefined; - // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: "required", "correct", or "enforced" - simplify: string | null | undefined; -}`,signature:{properties:[{key:"message",value:{name:"string",required:!0}},{key:"value",value:{name:"number",required:!0}},{key:"status",value:{name:"string",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"union",raw:`| "integer" -| "mixed" -| "improper" -| "proper" -| "decimal" -| "percent" -| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}],raw:"ReadonlyArray",required:!1}},{key:"strict",value:{name:"boolean",required:!0}},{key:"maxError",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"simplify",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"labelText",value:{name:"string",required:!0}},{key:"size",value:{name:"string",required:!0}},{key:"coefficient",value:{name:"boolean",required:!0}},{key:"rightAlign",value:{name:"boolean",required:!1}},{key:"static",value:{name:"boolean",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - simplify: - | "required" - | "correct" - | "enforced" - | "optional" - | null - | undefined; - name: MathFormat; -}`,signature:{properties:[{key:"simplify",value:{name:"union",raw:`| "required" -| "correct" -| "enforced" -| "optional" -| null -| undefined`,elements:[{name:"literal",value:'"required"'},{name:"literal",value:'"correct"'},{name:"literal",value:'"enforced"'},{name:"literal",value:'"optional"'},{name:"null"},{name:"undefined"}],required:!0}},{key:"name",value:{name:"union",raw:`| "integer" -| "mixed" -| "improper" -| "proper" -| "decimal" -| "percent" -| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}}]}}],raw:"ReadonlyArray",required:!1}}]},alias:"PerseusNumericInputRubric"}},{name:"strings",optional:!1,type:{name:"signature",type:"object",raw:`{ - closeKeypad: string; - openKeypad: string; - mathInputBox: string; - removeHighlight: string; - addHighlight: string; - hintPos: ({pos}: {pos: number}) => string; - errorRendering: ({error}: {error: string}) => string; - APPROXIMATED_PI_ERROR: string; - EXTRA_SYMBOLS_ERROR: string; - NEEDS_TO_BE_SIMPLFIED_ERROR: string; - MISSING_PERCENT_ERROR: string; - MULTIPLICATION_SIGN_ERROR: string; - WRONG_CASE_ERROR: string; - WRONG_LETTER_ERROR: string; - invalidSelection: string; - ERROR_TITLE: string; - ERROR_MESSAGE: string; - hints: string; - getAnotherHint: string; - deprecatedStandin: string; - keepTrying: string; - tryAgain: string; - check: string; - correctExcited: string; - nextQuestion: string; - skipToTitle: ({title}: {title: string}) => string; - current: string; - correct: string; - correctSelected: string; - correctCrossedOut: string; - incorrect: string; - incorrectSelected: string; - hideExplanation: string; - explain: string; - INVALID_MESSAGE_PREFIX: string; - DEFAULT_INVALID_MESSAGE_1: string; - DEFAULT_INVALID_MESSAGE_2: string; - integerExample: string; - properExample: string; - simplifiedProperExample: string; - improperExample: string; - simplifiedImproperExample: string; - mixedExample: string; - decimalExample: string; - percentExample: string; - piExample: string; - yourAnswer: string; - yourAnswerLabel: string; - addPoints: string; - addVertices: string; - tapMultiple: string; - tapSingle: string; - clickMultiple: string; - clickSingle: string; - choices: string; - answers: ({num}: {num: number}) => string; - hideAnswersToggleLabel: string; - moves: ({num}: {num: number}) => string; - clickTiles: string; - turnOffLights: string; - fillAllCells: string; - molecularDrawing: ({content}: {content: string}) => string; - switchDirection: string; - circleOpen: string; - circleFilled: string; - numDivisions: string; - divisions: ({divRangeString}: {divRangeString: string}) => string; - lineRange: ({lineRange}: {lineRange: string}) => string; - lineNumber: ({lineNumber}: {lineNumber: string}) => string; - symbolPassage: ({ - questionSymbol, - questionNumber, - }: { - questionSymbol: string; - questionNumber: string; - }) => string; - symbolQuestion: ({sentenceSymbol}: {sentenceSymbol: string}) => string; - lineLabel: string; - beginningPassage: string; - beginningFootnotes: string; - endPassage: string; - questionMarker: ({number}: {number: string}) => string; - circleMarker: ({number}: {number: string}) => string; - sentenceMarker: ({number}: {number: string}) => string; - dragHandles: string; - tapAddPoints: string; - false: string; - true: string; - no: string; - yes: string; - chooseCorrectNum: string; - notNoneOfTheAbove: string; - noneOfTheAbove: string; - chooseNumAnswers: ({numCorrect}: {numCorrect: string}) => string; - chooseAllAnswers: string; - chooseOneAnswer: string; - choiceCheckedCorrect: ({letter}: {letter: string}) => string; - choiceCrossedOutCorrect: ({letter}: {letter: string}) => string; - choiceCorrect: ({letter}: {letter: string}) => string; - choiceCheckedIncorrect: ({letter}: {letter: string}) => string; - choiceCrossedOutIncorrect: ({letter}: {letter: string}) => string; - choiceIncorrect: ({letter}: {letter: string}) => string; - choiceChecked: ({letter}: {letter: string}) => string; - choiceCrossedOut: ({letter}: {letter: string}) => string; - choice: ({letter}: {letter: string}) => string; - crossOut: string; - crossOutOption: string; - crossOutChoice: ({letter}: {letter: string}) => string; - bringBack: string; - openMenuForChoice: ({letter}: {letter: string}) => string; - letters: string; - rightArrow: string; - dontUnderstandUnits: string; - checkSigFigs: string; - answerNumericallyIncorrect: string; - checkUnits: string; - dontUnderstand: string; - loading: string; - videoTranscript: string; - somethingWrong: string; - videoWrapper: string; - mathInputTitle: string; - mathInputDescription: string; - sin: string; - cos: string; - tan: string; - simulationLoadFail: string; - simulationLocaleWarning: string; - addPoint: string; - removePoint: string; - graphKeyboardPrompt: string; -}`,signature:{properties:[{key:"closeKeypad",value:{name:"string",required:!0}},{key:"openKeypad",value:{name:"string",required:!0}},{key:"mathInputBox",value:{name:"string",required:!0}},{key:"removeHighlight",value:{name:"string",required:!0}},{key:"addHighlight",value:{name:"string",required:!0}},{key:"hintPos",value:{name:"signature",type:"function",raw:"({pos}: {pos: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{pos: number}",signature:{properties:[{key:"pos",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"errorRendering",value:{name:"signature",type:"function",raw:"({error}: {error: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{error: string}",signature:{properties:[{key:"error",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"APPROXIMATED_PI_ERROR",value:{name:"string",required:!0}},{key:"EXTRA_SYMBOLS_ERROR",value:{name:"string",required:!0}},{key:"NEEDS_TO_BE_SIMPLFIED_ERROR",value:{name:"string",required:!0}},{key:"MISSING_PERCENT_ERROR",value:{name:"string",required:!0}},{key:"MULTIPLICATION_SIGN_ERROR",value:{name:"string",required:!0}},{key:"WRONG_CASE_ERROR",value:{name:"string",required:!0}},{key:"WRONG_LETTER_ERROR",value:{name:"string",required:!0}},{key:"invalidSelection",value:{name:"string",required:!0}},{key:"ERROR_TITLE",value:{name:"string",required:!0}},{key:"ERROR_MESSAGE",value:{name:"string",required:!0}},{key:"hints",value:{name:"string",required:!0}},{key:"getAnotherHint",value:{name:"string",required:!0}},{key:"deprecatedStandin",value:{name:"string",required:!0}},{key:"keepTrying",value:{name:"string",required:!0}},{key:"tryAgain",value:{name:"string",required:!0}},{key:"check",value:{name:"string",required:!0}},{key:"correctExcited",value:{name:"string",required:!0}},{key:"nextQuestion",value:{name:"string",required:!0}},{key:"skipToTitle",value:{name:"signature",type:"function",raw:"({title}: {title: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{title: string}",signature:{properties:[{key:"title",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"current",value:{name:"string",required:!0}},{key:"correct",value:{name:"string",required:!0}},{key:"correctSelected",value:{name:"string",required:!0}},{key:"correctCrossedOut",value:{name:"string",required:!0}},{key:"incorrect",value:{name:"string",required:!0}},{key:"incorrectSelected",value:{name:"string",required:!0}},{key:"hideExplanation",value:{name:"string",required:!0}},{key:"explain",value:{name:"string",required:!0}},{key:"INVALID_MESSAGE_PREFIX",value:{name:"string",required:!0}},{key:"DEFAULT_INVALID_MESSAGE_1",value:{name:"string",required:!0}},{key:"DEFAULT_INVALID_MESSAGE_2",value:{name:"string",required:!0}},{key:"integerExample",value:{name:"string",required:!0}},{key:"properExample",value:{name:"string",required:!0}},{key:"simplifiedProperExample",value:{name:"string",required:!0}},{key:"improperExample",value:{name:"string",required:!0}},{key:"simplifiedImproperExample",value:{name:"string",required:!0}},{key:"mixedExample",value:{name:"string",required:!0}},{key:"decimalExample",value:{name:"string",required:!0}},{key:"percentExample",value:{name:"string",required:!0}},{key:"piExample",value:{name:"string",required:!0}},{key:"yourAnswer",value:{name:"string",required:!0}},{key:"yourAnswerLabel",value:{name:"string",required:!0}},{key:"addPoints",value:{name:"string",required:!0}},{key:"addVertices",value:{name:"string",required:!0}},{key:"tapMultiple",value:{name:"string",required:!0}},{key:"tapSingle",value:{name:"string",required:!0}},{key:"clickMultiple",value:{name:"string",required:!0}},{key:"clickSingle",value:{name:"string",required:!0}},{key:"choices",value:{name:"string",required:!0}},{key:"answers",value:{name:"signature",type:"function",raw:"({num}: {num: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{num: number}",signature:{properties:[{key:"num",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"hideAnswersToggleLabel",value:{name:"string",required:!0}},{key:"moves",value:{name:"signature",type:"function",raw:"({num}: {num: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{num: number}",signature:{properties:[{key:"num",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"clickTiles",value:{name:"string",required:!0}},{key:"turnOffLights",value:{name:"string",required:!0}},{key:"fillAllCells",value:{name:"string",required:!0}},{key:"molecularDrawing",value:{name:"signature",type:"function",raw:"({content}: {content: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{content: string}",signature:{properties:[{key:"content",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"switchDirection",value:{name:"string",required:!0}},{key:"circleOpen",value:{name:"string",required:!0}},{key:"circleFilled",value:{name:"string",required:!0}},{key:"numDivisions",value:{name:"string",required:!0}},{key:"divisions",value:{name:"signature",type:"function",raw:"({divRangeString}: {divRangeString: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{divRangeString: string}",signature:{properties:[{key:"divRangeString",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineRange",value:{name:"signature",type:"function",raw:"({lineRange}: {lineRange: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{lineRange: string}",signature:{properties:[{key:"lineRange",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineNumber",value:{name:"signature",type:"function",raw:"({lineNumber}: {lineNumber: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{lineNumber: string}",signature:{properties:[{key:"lineNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolPassage",value:{name:"signature",type:"function",raw:`({ - questionSymbol, - questionNumber, -}: { - questionSymbol: string; - questionNumber: string; -}) => string`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - questionSymbol: string; - questionNumber: string; -}`,signature:{properties:[{key:"questionSymbol",value:{name:"string",required:!0}},{key:"questionNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolQuestion",value:{name:"signature",type:"function",raw:"({sentenceSymbol}: {sentenceSymbol: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{sentenceSymbol: string}",signature:{properties:[{key:"sentenceSymbol",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineLabel",value:{name:"string",required:!0}},{key:"beginningPassage",value:{name:"string",required:!0}},{key:"beginningFootnotes",value:{name:"string",required:!0}},{key:"endPassage",value:{name:"string",required:!0}},{key:"questionMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"circleMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"sentenceMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"dragHandles",value:{name:"string",required:!0}},{key:"tapAddPoints",value:{name:"string",required:!0}},{key:"false",value:{name:"string",required:!0}},{key:"true",value:{name:"string",required:!0}},{key:"no",value:{name:"string",required:!0}},{key:"yes",value:{name:"string",required:!0}},{key:"chooseCorrectNum",value:{name:"string",required:!0}},{key:"notNoneOfTheAbove",value:{name:"string",required:!0}},{key:"noneOfTheAbove",value:{name:"string",required:!0}},{key:"chooseNumAnswers",value:{name:"signature",type:"function",raw:"({numCorrect}: {numCorrect: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{numCorrect: string}",signature:{properties:[{key:"numCorrect",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"chooseAllAnswers",value:{name:"string",required:!0}},{key:"chooseOneAnswer",value:{name:"string",required:!0}},{key:"choiceCheckedCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCheckedIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceChecked",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOut",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"crossOut",value:{name:"string",required:!0}},{key:"crossOutOption",value:{name:"string",required:!0}},{key:"crossOutChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"bringBack",value:{name:"string",required:!0}},{key:"openMenuForChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"letters",value:{name:"string",required:!0}},{key:"rightArrow",value:{name:"string",required:!0}},{key:"dontUnderstandUnits",value:{name:"string",required:!0}},{key:"checkSigFigs",value:{name:"string",required:!0}},{key:"answerNumericallyIncorrect",value:{name:"string",required:!0}},{key:"checkUnits",value:{name:"string",required:!0}},{key:"dontUnderstand",value:{name:"string",required:!0}},{key:"loading",value:{name:"string",required:!0}},{key:"videoTranscript",value:{name:"string",required:!0}},{key:"somethingWrong",value:{name:"string",required:!0}},{key:"videoWrapper",value:{name:"string",required:!0}},{key:"mathInputTitle",value:{name:"string",required:!0}},{key:"mathInputDescription",value:{name:"string",required:!0}},{key:"sin",value:{name:"string",required:!0}},{key:"cos",value:{name:"string",required:!0}},{key:"tan",value:{name:"string",required:!0}},{key:"simulationLoadFail",value:{name:"string",required:!0}},{key:"simulationLocaleWarning",value:{name:"string",required:!0}},{key:"addPoint",value:{name:"string",required:!0}},{key:"removePoint",value:{name:"string",required:!0}},{key:"graphKeyboardPrompt",value:{name:"string",required:!0}}]},alias:"PerseusStrings"}}],returns:{type:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"examples",docblock:null,modifiers:[],params:[],returns:null},{name:"shouldShowExamples",docblock:null,modifiers:[],params:[],returns:null},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ - // A list of all the possible correct and incorrect answers - answers: ReadonlyArray; - // Translatable Text; Text to describe this input. This will be shown to users using screenreaders. - labelText: string; - // Use size "Normal" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them. Options: "normal" or "small" - size: string; - // A coefficient style number allows the student to use - for -1 and an empty string to mean 1. - coefficient: boolean; - // Whether to right-align the text or not - // NOTE: perseus_data.go says this is required even though it isn't necessary. - rightAlign?: boolean; - // Always false. Not used for this widget - static: boolean; - // Used by examples, maybe not used and should be removed in the future - // see TODO in numeric-input - answerForms?: ReadonlyArray; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // Translatable Display; A description for why this answer is correct, wrong, or ungraded - message: string; - // The expected answer - value: number; - // Whether this answer is "correct", "wrong", or "ungraded" - status: string; - // The forms available for this answer. Options: "integer, ""decimal", "proper", "improper", "mixed", or "pi" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - answerForms?: ReadonlyArray; - // Whether we should check the answer strictly against the the configured answerForms (strict = true) - // or include the set of default answerForms (strict = false). - strict: boolean; - // A range of error +/- the value - // NOTE: perseus_data.go says this is non-nullable even though we handle null values. - maxError: number | null | undefined; - // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: "required", "correct", or "enforced" - simplify: string | null | undefined; -}`,signature:{properties:[{key:"message",value:{name:"string",required:!0}},{key:"value",value:{name:"number",required:!0}},{key:"status",value:{name:"string",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"union",raw:`| "integer" -| "mixed" -| "improper" -| "proper" -| "decimal" -| "percent" -| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}],raw:"ReadonlyArray",required:!1}},{key:"strict",value:{name:"boolean",required:!0}},{key:"maxError",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"simplify",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"labelText",value:{name:"string",required:!0}},{key:"size",value:{name:"string",required:!0}},{key:"coefficient",value:{name:"boolean",required:!0}},{key:"rightAlign",value:{name:"boolean",required:!1}},{key:"static",value:{name:"boolean",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - simplify: - | "required" - | "correct" - | "enforced" - | "optional" - | null - | undefined; - name: MathFormat; -}`,signature:{properties:[{key:"simplify",value:{name:"union",raw:`| "required" -| "correct" -| "enforced" -| "optional" -| null -| undefined`,elements:[{name:"literal",value:'"required"'},{name:"literal",value:'"correct"'},{name:"literal",value:'"enforced"'},{name:"literal",value:'"optional"'},{name:"null"},{name:"undefined"}],required:!0}},{key:"name",value:{name:"union",raw:`| "integer" -| "mixed" -| "improper" -| "proper" -| "decimal" -| "percent" -| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}}]}}],raw:"ReadonlyArray",required:!1}}]},alias:"PerseusNumericInputRubric"}}],returns:{type:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"focusInputPath",docblock:null,modifiers:[],params:[],returns:null},{name:"blurInputPath",docblock:null,modifiers:[],params:[],returns:null},{name:"getInputPaths",docblock:null,modifiers:[],params:[],returns:null},{name:"getGrammarTypeForPath",docblock:null,modifiers:[],params:[{name:"inputPath",optional:!1,type:null}],returns:null},{name:"setInputValue",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:null},{name:"newValue",optional:!1,type:null},{name:"cb",optional:!1,type:null}],returns:null},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}}}},{name:"handleChange",docblock:null,modifiers:[],params:[{name:"newValue",optional:!1,type:null},{name:"cb",optional:!1,type:null}],returns:null},{name:"_handleFocus",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleBlur",docblock:null,modifiers:[],params:[],returns:null}],displayName:"NumericInput",props:{widgetId:{required:!0,tsType:{name:"string"},description:""},alignment:{required:!0,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},problemNum:{required:!0,tsType:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},description:""},apiOptions:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["apiOptions"]',raw:'ExternalProps["apiOptions"]'}],raw:'NonNullable'},description:"",defaultValue:{value:`{ - isArticle: false, - isMobile: false, - onFocusChange: function () {}, - GroupMetadataEditor: StubTagEditor, - showAlignmentOptions: false, - readOnly: false, - groupAnnotator: function (): null { - return null; - }, - baseElements: { - Link: ( - props: any, - ): React.ReactElement> => { - return ; - }, - }, - setDrawingAreaAvailable: function () {}, - canScrollPage: false, - crossOutEnabled: false, - editorChangeDelay: 0, -}`,computed:!1}},keypadElement:{required:!1,tsType:{name:"any"},description:""},questionCompleted:{required:!1,tsType:{name:"boolean"},description:""},onFocus:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},onBlur:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},findWidgets:{required:!0,tsType:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray"}}},description:""},reviewModeRubric:{required:!0,tsType:{name:"Rubric"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`( - arg1: { - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; - }, - callback?: () => unknown | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; -}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; - }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only // NOTE: perseus_data.go says this is required even though it isn't necessary. static?: boolean; // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) @@ -14681,7 +12380,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14725,7 +12424,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14769,7 +12468,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14813,7 +12512,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14857,7 +12556,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14901,7 +12600,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14945,7 +12644,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14989,7 +12688,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15033,7 +12732,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15077,7 +12776,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15121,7 +12820,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15165,7 +12864,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15209,7 +12908,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15253,139 +12952,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15429,7 +12996,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15473,7 +13040,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15517,7 +13084,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15561,7 +13128,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15605,7 +13172,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15649,7 +13216,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15693,7 +13260,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15737,7 +13304,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15781,7 +13348,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15825,7 +13392,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15869,7 +13436,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15913,7 +13480,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15957,7 +13524,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16001,7 +13568,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16045,67 +13612,79 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ // The major part of the version major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ + _multi: ItemTree; +}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; }`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16149,46 +13728,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16232,21 +13772,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16290,271 +13816,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - selected: boolean; - crossedOut: boolean; - highlighted: boolean; - rationaleShown: boolean; - correctnessShown: boolean; - previouslyAnswered: boolean; - readOnly: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},trackInteraction:{required:!0,tsType:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"TrackingExtraArgs"},name:"extraData"}],return:{name:"void"}}},description:""},isLastUsedWidget:{required:!0,tsType:{name:"boolean"},description:""},linterContext:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["linterContext"]',raw:'ExternalProps["linterContext"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"linterContextDefault",computed:!0}},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},size:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["size"]',raw:'ExternalProps["size"]'}],raw:'NonNullable'},description:"",defaultValue:{value:'"normal"',computed:!1}},rightAlign:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["rightAlign"]',raw:'ExternalProps["rightAlign"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"false",computed:!1}},coefficient:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["coefficient"]',raw:'ExternalProps["coefficient"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"false",computed:!1}},answerForms:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["answerForms"]',raw:'ExternalProps["answerForms"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"[]",computed:!1}},labelText:{required:!1,tsType:{name:"NonNullable",elements:[{name:'intersection["labelText"]',raw:'ExternalProps["labelText"]'}],raw:'NonNullable'},description:"",defaultValue:{value:'""',computed:!1}},currentValue:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}}}};function G(t=0){return{type:"points",earned:t,total:t,message:null}}const Za="–",qt=class qt extends k.Component{constructor(){super(...arguments),this.displayName="PassageRef",this.state={lineRange:null,content:null},this.change=(...e)=>ne.apply(this,e),this._deferredUpdateRange=()=>{g.defer(this._updateRange)},this._updateRange=()=>{const e=this.props.findWidgets("passage "+this.props.passageNumber)[0];let r=null;e&&(r=e.getReference(this.props.referenceNumber)),this._isMounted&&(r?this.setState({lineRange:[r.startLine,r.endLine],content:r.content}):this.setState({lineRange:null,content:null}))}}static validate(){return G()}componentDidMount(){this._isMounted=!0,this._deferredUpdateRange(),this._throttledUpdateRange=g.throttle(this._deferredUpdateRange,500),window.addEventListener("resize",this._throttledUpdateRange)}shouldComponentUpdate(e,r){return!g.isEqual(this.props,e)||!g.isEqual(this.state,r)}componentDidUpdate(){this._deferredUpdateRange()}componentWillUnmount(){window.removeEventListener("resize",this._throttledUpdateRange),this._isMounted=!1}getUserInput(){return null}simpleValidate(){return G()}render(){const{strings:e}=this.context,r=this.state.lineRange;let n;r?r[0]===r[1]?n=e.lineNumber({lineNumber:String(r[0])}):n=e.lineRange({lineRange:r[0]+Za+r[1]}):n=e.lineRange({lineRange:`?${Za}?`});let a;if(this.props.summaryText){const i=za.parseInline(this.props.summaryText);a=q("span",{"aria-hidden":!0,children:[" ","(“",za.basicOutput(i),"”)"]})}else a=null;return q("span",{children:[n,a,r&&d("div",{className:"perseus-sr-only",children:this.state.content})]})}};qt.contextType=M,qt.defaultProps={passageNumber:1,referenceNumber:1,summaryText:""};let on=qt;const qs={name:"passage-ref",displayName:"PassageRef (SAT only)",hidden:!0,defaultAlignment:"inline",widget:on,transform:t=>({passageNumber:t.passageNumber,referenceNumber:t.referenceNumber,summaryText:t.summaryText}),version:{major:0,minor:1}};function ei(t,e,r){const n=t.choicesSelected.reduce((i,s)=>i+(s?1:0),0);return n===0?{type:"invalid",message:null}:t.numCorrect&&t.numCorrect>1&&n!==t.numCorrect?{type:"invalid",message:r.chooseCorrectNum}:t.noneOfTheAboveSelected&&n>1?{type:"invalid",message:r.notNoneOfTheAbove}:{type:"points",earned:t.choicesSelected.every((i,s)=>{let o;return t.noneOfTheAboveIndex===s?o=e.choices.every((l,u)=>s===u||!l.correct):o=!!e.choices[s].correct,o===i})?1:0,total:1,message:null}}var Be;let Ts=(Be=class extends k.Component{constructor(){super(...arguments),this._renderRenderer=(e="")=>{let r=1;const n={},a=e.replace(/\{\{passage-ref (\d+) (\d+)(?: "([^"]*)")?\}\}/g,(i,s,o,l)=>{const u="passage-ref "+r;return r++,n[u]={type:"passage-ref",graded:!1,options:{passageNumber:parseInt(s),referenceNumber:parseInt(o),summaryText:l},version:qs.version},"[["+z.snowman+" "+u+"]]"});return d(H,{content:a,widgets:n,findExternalWidgets:this.props.findWidgets,alwaysUpdate:!0,linterContext:{...this.props.linterContext,blockHighlight:!0},strings:this.context.strings},"choiceContentRenderer")},this.updateChoices=e=>{const{choiceStates:r,choices:n}=this.props,a=r?r.map(i=>({...i})):n.map(()=>({selected:!1,crossedOut:!1,highlighted:!1,rationaleShown:!1,correctnessShown:!1,previouslyAnswered:!1,readOnly:!1}));a.forEach((i,s)=>{i.selected=e.checked[s],i.crossedOut=e.crossedOut[s]}),this.props.onChange({choiceStates:a}),this.props.trackInteraction()},this.showRationalesForCurrentlySelectedChoices=e=>{const{choiceStates:r}=this.props;if(r){const n=this.simpleValidate(e),a=n.type==="points"&&n.total===n.earned,i=r.map(s=>({...s,highlighted:s.selected,rationaleShown:s.selected||s.rationaleShown||a,readOnly:s.selected||s.readOnly||a||this.props.showSolutions!=="none",correctnessShown:s.selected||s.correctnessShown,previouslyAnswered:s.previouslyAnswered||s.selected}));this.props.onChange({choiceStates:i},null,!0)}},this.deselectIncorrectSelectedChoices=()=>{if(this.props.choiceStates){const e=this.props.choiceStates.map((r,n)=>({...r,selected:r.selected&&!!this.props.choices[n].correct,highlighted:!1}));this.props.onChange({choiceStates:e},null,!1)}}}static validate(e,r,n){return ei(e,r,n)}static getUserInputFromProps(e){if(e.choiceStates){let n=null,a=!1;const i=e.choiceStates,s=i.map(()=>!1),o=e.countChoices,l=e.numCorrect;for(let u=0;u!1)}}componentDidUpdate(e){this.props.showSolutions==="selected"&&e.showSolutions!=="selected"&&this.showRationalesForCurrentlySelectedChoices(this.props)}focus(e){return this.focusFunction?this.focusFunction(e):!1}registerFocusFunction(e){this.focusFunction=e}getUserInput(){return Be.getUserInputFromProps(this.props)}simpleValidate(e){return ei(this.getUserInput(),e,this.context.strings)}render(){const{choices:e}=this.props,{strings:r}=this.context;let n;this.props.static?n=e.map(i=>({selected:!!i.correct,crossedOut:!1,readOnly:!0,highlighted:!1,rationaleShown:!0,correctnessShown:!0,previouslyAnswered:!1})):this.props.showSolutions==="all"?n=e.map(({correct:i})=>({selected:i,crossedOut:!1,readOnly:!0,highlighted:!1,rationaleShown:!0,correctnessShown:!0,previouslyAnswered:!1})):this.props.choiceStates?n=this.props.choiceStates:this.props.values?n=this.props.values.map(i=>({selected:i,crossedOut:!1,readOnly:!1,highlighted:!1,rationaleShown:!1,correctnessShown:!1,previouslyAnswered:!1})):n=e.map(()=>({selected:!1,crossedOut:!1,readOnly:!1,highlighted:!1,rationaleShown:!1,correctnessShown:!1,previouslyAnswered:!1}));const a=e.map((i,s)=>{const o=i.isNoneOfTheAbove&&!i.content?r.noneOfTheAbove:i.content,{selected:l,crossedOut:u,rationaleShown:y,correctnessShown:m,readOnly:h,highlighted:p,previouslyAnswered:c}=n[s],b=this.props.reviewModeRubric&&this.props.reviewModeRubric.choices[s];return{content:this._renderRenderer(o),checked:l,correct:i.correct===void 0?!!b&&!!b.correct:i.correct,disabled:h,hasRationale:!!i.clue,rationale:this._renderRenderer(i.clue),showRationale:y,showCorrectness:m,isNoneOfTheAbove:!!i.isNoneOfTheAbove,revealNoneOfTheAbove:!!(this.props.questionCompleted&&l),crossedOut:u,highlighted:p,previouslyAnswered:c}});return d(Bl,{labelWrap:!0,multipleSelect:this.props.multipleSelect,countChoices:this.props.countChoices,numCorrect:this.props.numCorrect,choices:a,onChange:this.updateChoices,reviewModeRubric:this.props.reviewModeRubric,deselectEnabled:this.props.deselectEnabled,apiOptions:this.props.apiOptions,isLastUsedWidget:this.props.isLastUsedWidget,registerFocusFunction:i=>this.registerFocusFunction(i)})}},Be.contextType=M,Be.defaultProps={choices:[],multipleSelect:!1,countChoices:!1,deselectEnabled:!1,linterContext:B,showSolutions:"none"},Be);Ts.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[{name:"userInput",optional:!1,type:{name:"signature",type:"object",raw:`{ - countChoices?: boolean; - choicesSelected: ReadonlyArray; - numCorrect?: number; - noneOfTheAboveIndex?: number | null | undefined; - noneOfTheAboveSelected?: boolean; -}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]},alias:"PerseusRadioUserInput"}},{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ - // The choices provided to the user. - choices: ReadonlyArray; - // Does this have a "none of the above" option? - // NOTE: perseus_data.go says this is required even though it isn't necessary. - hasNoneOfTheAbove?: boolean; - // If multipleSelect is enabled, Specify the number expected to be correct. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - countChoices?: boolean; - // Randomize the order of the options or keep them as defined - // NOTE: perseus_data.go says this is required even though it isn't necessary. - randomize?: boolean; - // Does this set allow for multiple selections to be correct? - // NOTE: perseus_data.go says this is required even though it isn't necessary. - multipleSelect?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - deselectEnabled?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - onePerLine?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - displayCount?: any; - // v0 props - // \`noneOfTheAbove\` is still in use (but only set to \`false\`). - noneOfTheAbove?: false; -}`,signature:{properties:[{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown; The label for this choice - content: string; - // Translatable Markdown; A clue to give the user when they get it wrong - // NOTE: perseus_data.go says this is required even though it isn't necessary. - clue?: string; - // Whether this option is a correct answer or not - // NOTE: perseus_data.go says this is required even though it isn't necessary. - correct?: boolean; - // If this is none of the above, override the content with "None of the above" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - isNoneOfTheAbove?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - widgets?: PerseusWidgetsMap; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"clue",value:{name:"string",required:!1}},{key:"correct",value:{name:"boolean",required:!1}},{key:"isNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16598,7 +13860,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16642,7 +13904,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16686,7 +13948,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16730,7 +13992,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16774,7 +14036,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16818,7 +14080,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16862,7 +14124,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16906,7 +14168,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16950,7 +14212,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16994,7 +14256,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17038,7 +14300,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17082,7 +14344,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17126,7 +14388,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17170,7 +14432,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17214,7 +14476,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17258,7 +14520,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17302,7 +14564,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17346,7 +14608,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17390,7 +14652,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17434,7 +14696,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17478,7 +14740,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17522,7 +14784,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17566,7 +14828,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17610,7 +14872,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17654,7 +14916,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17698,7 +14960,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17742,7 +15004,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17786,7 +15048,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17830,7 +15092,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17874,7 +15136,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17918,7 +15180,54 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17962,7 +15271,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18006,221 +15315,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}}]}}],raw:"ReadonlyArray",required:!0}},{key:"hasNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"countChoices",value:{name:"boolean",required:!1}},{key:"randomize",value:{name:"boolean",required:!1}},{key:"multipleSelect",value:{name:"boolean",required:!1}},{key:"deselectEnabled",value:{name:"boolean",required:!1}},{key:"onePerLine",value:{name:"boolean",required:!1}},{key:"displayCount",value:{name:"any",required:!1}},{key:"noneOfTheAbove",value:{name:"literal",value:"false",required:!1}}]},alias:"PerseusRadioRubric"}},{name:"strings",optional:!1,type:{name:"signature",type:"object",raw:`{ - closeKeypad: string; - openKeypad: string; - mathInputBox: string; - removeHighlight: string; - addHighlight: string; - hintPos: ({pos}: {pos: number}) => string; - errorRendering: ({error}: {error: string}) => string; - APPROXIMATED_PI_ERROR: string; - EXTRA_SYMBOLS_ERROR: string; - NEEDS_TO_BE_SIMPLFIED_ERROR: string; - MISSING_PERCENT_ERROR: string; - MULTIPLICATION_SIGN_ERROR: string; - WRONG_CASE_ERROR: string; - WRONG_LETTER_ERROR: string; - invalidSelection: string; - ERROR_TITLE: string; - ERROR_MESSAGE: string; - hints: string; - getAnotherHint: string; - deprecatedStandin: string; - keepTrying: string; - tryAgain: string; - check: string; - correctExcited: string; - nextQuestion: string; - skipToTitle: ({title}: {title: string}) => string; - current: string; - correct: string; - correctSelected: string; - correctCrossedOut: string; - incorrect: string; - incorrectSelected: string; - hideExplanation: string; - explain: string; - INVALID_MESSAGE_PREFIX: string; - DEFAULT_INVALID_MESSAGE_1: string; - DEFAULT_INVALID_MESSAGE_2: string; - integerExample: string; - properExample: string; - simplifiedProperExample: string; - improperExample: string; - simplifiedImproperExample: string; - mixedExample: string; - decimalExample: string; - percentExample: string; - piExample: string; - yourAnswer: string; - yourAnswerLabel: string; - addPoints: string; - addVertices: string; - tapMultiple: string; - tapSingle: string; - clickMultiple: string; - clickSingle: string; - choices: string; - answers: ({num}: {num: number}) => string; - hideAnswersToggleLabel: string; - moves: ({num}: {num: number}) => string; - clickTiles: string; - turnOffLights: string; - fillAllCells: string; - molecularDrawing: ({content}: {content: string}) => string; - switchDirection: string; - circleOpen: string; - circleFilled: string; - numDivisions: string; - divisions: ({divRangeString}: {divRangeString: string}) => string; - lineRange: ({lineRange}: {lineRange: string}) => string; - lineNumber: ({lineNumber}: {lineNumber: string}) => string; - symbolPassage: ({ - questionSymbol, - questionNumber, - }: { - questionSymbol: string; - questionNumber: string; - }) => string; - symbolQuestion: ({sentenceSymbol}: {sentenceSymbol: string}) => string; - lineLabel: string; - beginningPassage: string; - beginningFootnotes: string; - endPassage: string; - questionMarker: ({number}: {number: string}) => string; - circleMarker: ({number}: {number: string}) => string; - sentenceMarker: ({number}: {number: string}) => string; - dragHandles: string; - tapAddPoints: string; - false: string; - true: string; - no: string; - yes: string; - chooseCorrectNum: string; - notNoneOfTheAbove: string; - noneOfTheAbove: string; - chooseNumAnswers: ({numCorrect}: {numCorrect: string}) => string; - chooseAllAnswers: string; - chooseOneAnswer: string; - choiceCheckedCorrect: ({letter}: {letter: string}) => string; - choiceCrossedOutCorrect: ({letter}: {letter: string}) => string; - choiceCorrect: ({letter}: {letter: string}) => string; - choiceCheckedIncorrect: ({letter}: {letter: string}) => string; - choiceCrossedOutIncorrect: ({letter}: {letter: string}) => string; - choiceIncorrect: ({letter}: {letter: string}) => string; - choiceChecked: ({letter}: {letter: string}) => string; - choiceCrossedOut: ({letter}: {letter: string}) => string; - choice: ({letter}: {letter: string}) => string; - crossOut: string; - crossOutOption: string; - crossOutChoice: ({letter}: {letter: string}) => string; - bringBack: string; - openMenuForChoice: ({letter}: {letter: string}) => string; - letters: string; - rightArrow: string; - dontUnderstandUnits: string; - checkSigFigs: string; - answerNumericallyIncorrect: string; - checkUnits: string; - dontUnderstand: string; - loading: string; - videoTranscript: string; - somethingWrong: string; - videoWrapper: string; - mathInputTitle: string; - mathInputDescription: string; - sin: string; - cos: string; - tan: string; - simulationLoadFail: string; - simulationLocaleWarning: string; - addPoint: string; - removePoint: string; - graphKeyboardPrompt: string; -}`,signature:{properties:[{key:"closeKeypad",value:{name:"string",required:!0}},{key:"openKeypad",value:{name:"string",required:!0}},{key:"mathInputBox",value:{name:"string",required:!0}},{key:"removeHighlight",value:{name:"string",required:!0}},{key:"addHighlight",value:{name:"string",required:!0}},{key:"hintPos",value:{name:"signature",type:"function",raw:"({pos}: {pos: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{pos: number}",signature:{properties:[{key:"pos",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"errorRendering",value:{name:"signature",type:"function",raw:"({error}: {error: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{error: string}",signature:{properties:[{key:"error",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"APPROXIMATED_PI_ERROR",value:{name:"string",required:!0}},{key:"EXTRA_SYMBOLS_ERROR",value:{name:"string",required:!0}},{key:"NEEDS_TO_BE_SIMPLFIED_ERROR",value:{name:"string",required:!0}},{key:"MISSING_PERCENT_ERROR",value:{name:"string",required:!0}},{key:"MULTIPLICATION_SIGN_ERROR",value:{name:"string",required:!0}},{key:"WRONG_CASE_ERROR",value:{name:"string",required:!0}},{key:"WRONG_LETTER_ERROR",value:{name:"string",required:!0}},{key:"invalidSelection",value:{name:"string",required:!0}},{key:"ERROR_TITLE",value:{name:"string",required:!0}},{key:"ERROR_MESSAGE",value:{name:"string",required:!0}},{key:"hints",value:{name:"string",required:!0}},{key:"getAnotherHint",value:{name:"string",required:!0}},{key:"deprecatedStandin",value:{name:"string",required:!0}},{key:"keepTrying",value:{name:"string",required:!0}},{key:"tryAgain",value:{name:"string",required:!0}},{key:"check",value:{name:"string",required:!0}},{key:"correctExcited",value:{name:"string",required:!0}},{key:"nextQuestion",value:{name:"string",required:!0}},{key:"skipToTitle",value:{name:"signature",type:"function",raw:"({title}: {title: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{title: string}",signature:{properties:[{key:"title",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"current",value:{name:"string",required:!0}},{key:"correct",value:{name:"string",required:!0}},{key:"correctSelected",value:{name:"string",required:!0}},{key:"correctCrossedOut",value:{name:"string",required:!0}},{key:"incorrect",value:{name:"string",required:!0}},{key:"incorrectSelected",value:{name:"string",required:!0}},{key:"hideExplanation",value:{name:"string",required:!0}},{key:"explain",value:{name:"string",required:!0}},{key:"INVALID_MESSAGE_PREFIX",value:{name:"string",required:!0}},{key:"DEFAULT_INVALID_MESSAGE_1",value:{name:"string",required:!0}},{key:"DEFAULT_INVALID_MESSAGE_2",value:{name:"string",required:!0}},{key:"integerExample",value:{name:"string",required:!0}},{key:"properExample",value:{name:"string",required:!0}},{key:"simplifiedProperExample",value:{name:"string",required:!0}},{key:"improperExample",value:{name:"string",required:!0}},{key:"simplifiedImproperExample",value:{name:"string",required:!0}},{key:"mixedExample",value:{name:"string",required:!0}},{key:"decimalExample",value:{name:"string",required:!0}},{key:"percentExample",value:{name:"string",required:!0}},{key:"piExample",value:{name:"string",required:!0}},{key:"yourAnswer",value:{name:"string",required:!0}},{key:"yourAnswerLabel",value:{name:"string",required:!0}},{key:"addPoints",value:{name:"string",required:!0}},{key:"addVertices",value:{name:"string",required:!0}},{key:"tapMultiple",value:{name:"string",required:!0}},{key:"tapSingle",value:{name:"string",required:!0}},{key:"clickMultiple",value:{name:"string",required:!0}},{key:"clickSingle",value:{name:"string",required:!0}},{key:"choices",value:{name:"string",required:!0}},{key:"answers",value:{name:"signature",type:"function",raw:"({num}: {num: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{num: number}",signature:{properties:[{key:"num",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"hideAnswersToggleLabel",value:{name:"string",required:!0}},{key:"moves",value:{name:"signature",type:"function",raw:"({num}: {num: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{num: number}",signature:{properties:[{key:"num",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"clickTiles",value:{name:"string",required:!0}},{key:"turnOffLights",value:{name:"string",required:!0}},{key:"fillAllCells",value:{name:"string",required:!0}},{key:"molecularDrawing",value:{name:"signature",type:"function",raw:"({content}: {content: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{content: string}",signature:{properties:[{key:"content",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"switchDirection",value:{name:"string",required:!0}},{key:"circleOpen",value:{name:"string",required:!0}},{key:"circleFilled",value:{name:"string",required:!0}},{key:"numDivisions",value:{name:"string",required:!0}},{key:"divisions",value:{name:"signature",type:"function",raw:"({divRangeString}: {divRangeString: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{divRangeString: string}",signature:{properties:[{key:"divRangeString",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineRange",value:{name:"signature",type:"function",raw:"({lineRange}: {lineRange: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{lineRange: string}",signature:{properties:[{key:"lineRange",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineNumber",value:{name:"signature",type:"function",raw:"({lineNumber}: {lineNumber: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{lineNumber: string}",signature:{properties:[{key:"lineNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolPassage",value:{name:"signature",type:"function",raw:`({ - questionSymbol, - questionNumber, -}: { - questionSymbol: string; - questionNumber: string; -}) => string`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - questionSymbol: string; - questionNumber: string; -}`,signature:{properties:[{key:"questionSymbol",value:{name:"string",required:!0}},{key:"questionNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolQuestion",value:{name:"signature",type:"function",raw:"({sentenceSymbol}: {sentenceSymbol: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{sentenceSymbol: string}",signature:{properties:[{key:"sentenceSymbol",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineLabel",value:{name:"string",required:!0}},{key:"beginningPassage",value:{name:"string",required:!0}},{key:"beginningFootnotes",value:{name:"string",required:!0}},{key:"endPassage",value:{name:"string",required:!0}},{key:"questionMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"circleMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"sentenceMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"dragHandles",value:{name:"string",required:!0}},{key:"tapAddPoints",value:{name:"string",required:!0}},{key:"false",value:{name:"string",required:!0}},{key:"true",value:{name:"string",required:!0}},{key:"no",value:{name:"string",required:!0}},{key:"yes",value:{name:"string",required:!0}},{key:"chooseCorrectNum",value:{name:"string",required:!0}},{key:"notNoneOfTheAbove",value:{name:"string",required:!0}},{key:"noneOfTheAbove",value:{name:"string",required:!0}},{key:"chooseNumAnswers",value:{name:"signature",type:"function",raw:"({numCorrect}: {numCorrect: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{numCorrect: string}",signature:{properties:[{key:"numCorrect",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"chooseAllAnswers",value:{name:"string",required:!0}},{key:"chooseOneAnswer",value:{name:"string",required:!0}},{key:"choiceCheckedCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCheckedIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceChecked",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOut",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"crossOut",value:{name:"string",required:!0}},{key:"crossOutOption",value:{name:"string",required:!0}},{key:"crossOutChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"bringBack",value:{name:"string",required:!0}},{key:"openMenuForChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"letters",value:{name:"string",required:!0}},{key:"rightArrow",value:{name:"string",required:!0}},{key:"dontUnderstandUnits",value:{name:"string",required:!0}},{key:"checkSigFigs",value:{name:"string",required:!0}},{key:"answerNumericallyIncorrect",value:{name:"string",required:!0}},{key:"checkUnits",value:{name:"string",required:!0}},{key:"dontUnderstand",value:{name:"string",required:!0}},{key:"loading",value:{name:"string",required:!0}},{key:"videoTranscript",value:{name:"string",required:!0}},{key:"somethingWrong",value:{name:"string",required:!0}},{key:"videoWrapper",value:{name:"string",required:!0}},{key:"mathInputTitle",value:{name:"string",required:!0}},{key:"mathInputDescription",value:{name:"string",required:!0}},{key:"sin",value:{name:"string",required:!0}},{key:"cos",value:{name:"string",required:!0}},{key:"tan",value:{name:"string",required:!0}},{key:"simulationLoadFail",value:{name:"string",required:!0}},{key:"simulationLocaleWarning",value:{name:"string",required:!0}},{key:"addPoint",value:{name:"string",required:!0}},{key:"removePoint",value:{name:"string",required:!0}},{key:"graphKeyboardPrompt",value:{name:"string",required:!0}}]},alias:"PerseusStrings"}}],returns:{type:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"getUserInputFromProps",docblock:null,modifiers:["static"],params:[{name:"props",optional:!1,type:{name:"intersection",raw:`RenderProps & { - // provided by renderer.jsx#getWidgetProps() - widgetId: string; - alignment: string | null | undefined; - static: boolean | null | undefined; - problemNum: number | null | undefined; - apiOptions: APIOptionsWithDefaults; - keypadElement?: any; - questionCompleted?: boolean; - onFocus: (blurPath: FocusPath) => void; - onBlur: (blurPath: FocusPath) => void; - findWidgets: (arg1: FilterCriterion) => ReadonlyArray; - reviewModeRubric: Rubric; - onChange: ChangeHandler; - // This is slightly different from the \`trackInteraction\` function in - // APIOptions. This provides the widget an easy way to notify the renderer - // of an interaction. The Renderer then enriches the data provided with the - // widget's id and type before calling APIOptions.trackInteraction. - trackInteraction: (extraData?: TrackingExtraArgs) => void; - isLastUsedWidget: boolean; - // provided by widget-container.jsx#render() - linterContext: LinterContextProps; - containerSizeClass: SizeClass; -}`,elements:[{name:"signature",type:"object",raw:`{ - numCorrect: number; - hasNoneOfTheAbove?: boolean; - multipleSelect?: boolean; - countChoices?: boolean; - deselectEnabled?: boolean; - choices: ReadonlyArray; - selectedChoices: ReadonlyArray; - showSolutions?: ShowSolutions; - choiceStates?: ReadonlyArray; - // Depreciated; support for legacy way of handling changes - // Adds proptype for prop that is used but was lacking type - values?: ReadonlyArray; -}`,signature:{properties:[{key:"numCorrect",value:{name:"number",required:!0}},{key:"hasNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"multipleSelect",value:{name:"boolean",required:!1}},{key:"countChoices",value:{name:"boolean",required:!1}},{key:"deselectEnabled",value:{name:"boolean",required:!1}},{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRadioChoice & { - originalIndex: number; - correct: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown; The label for this choice - content: string; - // Translatable Markdown; A clue to give the user when they get it wrong - // NOTE: perseus_data.go says this is required even though it isn't necessary. - clue?: string; - // Whether this option is a correct answer or not - // NOTE: perseus_data.go says this is required even though it isn't necessary. - correct?: boolean; - // If this is none of the above, override the content with "None of the above" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - isNoneOfTheAbove?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - widgets?: PerseusWidgetsMap; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"clue",value:{name:"string",required:!1}},{key:"correct",value:{name:"boolean",required:!1}},{key:"isNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18264,51 +15359,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18352,7 +15403,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18396,7 +15447,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18440,7 +15491,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18484,7 +15535,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18528,7 +15579,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18572,7 +15623,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18616,7 +15667,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18660,7 +15711,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18704,7 +15755,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18748,7 +15799,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18792,7 +15843,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18836,7 +15887,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18880,7 +15931,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18924,7 +15975,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18968,7 +16019,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19012,7 +16063,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19056,7 +16107,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19100,7 +16151,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19144,7 +16195,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19188,7 +16239,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19232,7 +16283,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19276,7 +16327,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19320,7 +16371,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19364,7 +16415,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19408,7 +16459,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19452,7 +16503,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19496,7 +16547,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19540,7 +16591,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19584,7 +16635,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19628,7 +16679,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -19672,10 +16723,10 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - originalIndex: number; - correct: boolean; -}`,signature:{properties:[{key:"originalIndex",value:{name:"number",required:!0}},{key:"correct",value:{name:"boolean",required:!0}}]}}]}],raw:"ReadonlyArray",required:!0}},{key:"selectedChoices",value:{name:"ReadonlyArray",elements:[{name:"boolean",raw:'PerseusRadioChoice["correct"]'}],raw:'ReadonlyArray',required:!0}},{key:"showSolutions",value:{name:"union",raw:'"all" | "selected" | "none"',elements:[{name:"literal",value:'"all"'},{name:"literal",value:'"selected"'},{name:"literal",value:'"none"'}],required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ selected: boolean; crossedOut: boolean; highlighted: boolean; @@ -19683,7 +16734,253 @@ the available choices.`}]}}],raw:`Readonly<{ correctnessShown: boolean; previouslyAnswered: boolean; readOnly: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle +| PerseusGraphTypeCircle +| PerseusGraphTypeLinear +| PerseusGraphTypeLinearSystem +| PerseusGraphTypeNone +| PerseusGraphTypePoint +| PerseusGraphTypePolygon +| PerseusGraphTypeQuadratic +| PerseusGraphTypeRay +| PerseusGraphTypeSegment +| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ + type: "angle"; + // Whether to show the angle measurements. default: false + showAngles?: boolean; + // Allow Reflex Angles if an "angle" type. default: true + allowReflexAngles?: boolean; + // The angle offset in degrees if an "angle" type. default: 0 + angleOffsetDeg?: number; + // Snap to degree increments if an "angle" type. default: 1 + snapDegrees?: number; + // How to match the answer. If missing, defaults to exact matching. + match?: "congruent"; + // must have 3 coords - ie [Coord, Coord, Coord] + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ + type: "circle"; + center?: Coord; + radius?: number; + // The initial coordinates the graph renders with. + startCoords?: { + center: Coord; + radius: number; + }; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "circle"; + center?: Coord; + radius?: number; + // The initial coordinates the graph renders with. + startCoords?: { + center: Coord; + radius: number; + }; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ + center: Coord; + radius: number; +}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "linear"; + // expects 2 coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "linear"; + // expects 2 coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "linear-system"; + // expects 2 sets of 2 coords + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "linear-system"; + // expects 2 sets of 2 coords + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ + type: "none"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ + type: "point"; + // The number of points if a "point" type. default: 1. "unlimited" if no limit + numPoints?: number | "unlimited"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "point"; + // The number of points if a "point" type. default: 1. "unlimited" if no limit + numPoints?: number | "unlimited"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "polygon"; + // The number of sides. default: 3. "unlimited" if no limit + numSides?: number | "unlimited"; + // Whether to the angle measurements. default: false + showAngles?: boolean; + // Whether to show side measurements. default: false + showSides?: boolean; + // How to snap points. e.g. "grid", "angles", or "sides". default: grid + snapTo?: "grid" | "angles" | "sides"; + // How to match the answer. If missing, defaults to exact matching. + match?: "similar" | "congruent" | "approx"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "polygon"; + // The number of sides. default: 3. "unlimited" if no limit + numSides?: number | "unlimited"; + // Whether to the angle measurements. default: false + showAngles?: boolean; + // Whether to show side measurements. default: false + showSides?: boolean; + // How to snap points. e.g. "grid", "angles", or "sides". default: grid + snapTo?: "grid" | "angles" | "sides"; + // How to match the answer. If missing, defaults to exact matching. + match?: "similar" | "congruent" | "approx"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "quadratic"; + // expects a list of 3 coords + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "quadratic"; + // expects a list of 3 coords + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "ray"; + // Expects a list of 2 Coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "ray"; + // Expects a list of 2 Coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "segment"; + // The number of segments if a "segment" type. default: 1. Max: 6 + numSegments?: number; + // Expects a list of Coord tuples. Length should match the \`numSegments\` value. + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "segment"; + // The number of segments if a "segment" type. default: 1. Max: 6 + numSegments?: number; + // Expects a list of Coord tuples. Length should match the \`numSegments\` value. + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "sinusoid"; + // Expects a list of 2 Coords + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "sinusoid"; + // Expects a list of 2 Coords + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"Empty"},name:"extraData"}],return:{name:"void"}},required:!0}},{key:"isLastUsedWidget",value:{name:"boolean",required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}},{key:"containerSizeClass",value:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]",required:!0}}]}}]},{name:"Partial",elements:[{name:"ReactContextType",raw:"React.ContextType",elements:[{name:"DependenciesContext"}]}],raw:"Partial>"},{name:"signature",type:"object",raw:`{ + apiOptions: NonNullable; + buttonSets: NonNullable; + functions: NonNullable; + linterContext: NonNullable; + onBlur: NonNullable; + onFocus: NonNullable; + times: NonNullable; + visibleLabel: PerseusExpressionWidgetOptions["visibleLabel"]; + ariaLabel: PerseusExpressionWidgetOptions["ariaLabel"]; + value: string; +}`,signature:{properties:[{key:"apiOptions",value:{name:"NonNullable",elements:[{name:'intersection["apiOptions"]',raw:'ExternalProps["apiOptions"]'}],raw:'NonNullable',required:!0}},{key:"buttonSets",value:{name:"NonNullable",elements:[{name:'intersection["buttonSets"]',raw:'ExternalProps["buttonSets"]'}],raw:'NonNullable',required:!0}},{key:"functions",value:{name:"NonNullable",elements:[{name:'intersection["functions"]',raw:'ExternalProps["functions"]'}],raw:'NonNullable',required:!0}},{key:"linterContext",value:{name:"NonNullable",elements:[{name:'intersection["linterContext"]',raw:'ExternalProps["linterContext"]'}],raw:'NonNullable',required:!0}},{key:"onBlur",value:{name:"NonNullable",elements:[{name:'intersection["onBlur"]',raw:'ExternalProps["onBlur"]'}],raw:'NonNullable',required:!0}},{key:"onFocus",value:{name:"NonNullable",elements:[{name:'intersection["onFocus"]',raw:'ExternalProps["onFocus"]'}],raw:'NonNullable',required:!0}},{key:"times",value:{name:"NonNullable",elements:[{name:'intersection["times"]',raw:'ExternalProps["times"]'}],raw:'NonNullable',required:!0}},{key:"visibleLabel",value:{name:"string",raw:'PerseusExpressionWidgetOptions["visibleLabel"]',required:!0}},{key:"ariaLabel",value:{name:"string",raw:'PerseusExpressionWidgetOptions["ariaLabel"]',required:!0}},{key:"value",value:{name:"string",required:!0}}]}}],alias:"Props"}}],returns:null},{name:"changeAndTrack",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"any"}},{name:"cb",optional:!1,type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}}}],returns:null},{name:"_handleFocus",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleBlur",docblock:null,modifiers:[],params:[],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"focusInputPath",docblock:null,modifiers:[],params:[{name:"inputPath",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",alias:"InputPath"}}],returns:null},{name:"blurInputPath",docblock:null,modifiers:[],params:[{name:"inputPath",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",alias:"InputPath"}}],returns:null},{name:"insert",docblock:null,modifiers:[],params:[{name:"keyPressed",optional:!1,type:{name:"Key",alias:"Key"}}],returns:null},{name:"getInputPaths",docblock:null,modifiers:[],params:[],returns:null},{name:"getGrammarTypeForPath",docblock:null,modifiers:[],params:[{name:"inputPath",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:{type:{name:"string"}}},{name:"setInputValue",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}},{name:"newValue",optional:!1,type:{name:"string"}},{name:"cb",optional:!1,type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}}}],returns:null}],displayName:"Expression",props:{value:{defaultValue:{value:'""',computed:!1},required:!1},times:{defaultValue:{value:"false",computed:!1},required:!1},functions:{defaultValue:{value:"[]",computed:!1},required:!1},buttonSets:{defaultValue:{value:'["basic", "trig", "prealgebra", "logarithms"]',computed:!1},required:!1},onFocus:{defaultValue:{value:"() => {}",computed:!1},required:!1},onBlur:{defaultValue:{value:"() => {}",computed:!1},required:!1},apiOptions:{defaultValue:{value:`{ + isArticle: false, + isMobile: false, + onFocusChange: function () {}, + GroupMetadataEditor: StubTagEditor, + showAlignmentOptions: false, + readOnly: false, + groupAnnotator: function (): null { + return null; + }, + baseElements: { + Link: ( + props: any, + ): React.ReactElement> => { + return ; + }, + }, + setDrawingAreaAvailable: function () {}, + canScrollPage: false, + crossOutEnabled: false, + editorChangeDelay: 0, +}`,computed:!1},required:!1},linterContext:{defaultValue:{value:"linterContextDefault",computed:!0},required:!1}}};function Fu(t,e){let r=0;for(let n=e,a=t.length;n-1&&i>-1?Math.min(a,i):a>-1?a:i>-1?i:-1}function aa(t,e){if(!t)return"";let r="",n=0,a=Ba(t,n);for(;a>-1;){r+=t.substring(n,a),n=a;const i=Ga(t,n,e);n=i.endpoint+1;const s=Ga(t,n,e);n=s.endpoint+1,r.length&&(r+=" "),r+=e(i.expression,s.expression),a=Ba(t,n)}return r+=t.slice(n),r}function Su(t){function e(n){return n.indexOf("\\frac")>-1||n.indexOf("\\dfrac")>-1}return aa(t,function(n,a){let i;return e(n)||e(a)?i="\\dfrac":i="\\frac",i+" {"+n+"}{"+a+"}"})}function Mu(t){return aa(t,function(n,a){return n+"/"+a}).replace("\\%","%")}const ps={parseTex:Mu,modifyTex:Su},Uu=ps.parseTex,cs={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"}};function Ka(t,e,r){e.answerType==null&&(e.answerType="number");const n=`${e.value}`,a=Lr.number.createValidatorFunctional(n,{simplify:e.simplify,inexact:e.inexact||void 0,maxError:e.maxError,forms:cs[e.answerType].forms},r),i=Uu(t.currentValue),s=a(i);return s.empty?{type:"invalid",message:s.message}:{type:"points",earned:s.correct?1:0,total:1,message:s.message}}const Du={integer:function(t,e){return e.integerExample},proper:function(t,e){return t.simplify==="optional"?e.properExample:e.simplifiedProperExample},improper:function(t,e){return t.simplify==="optional"?e.improperExample:e.simplifiedImproperExample},mixed:function(t,e){return e.mixedExample},decimal:function(t,e){return e.decimalExample},percent:function(t,e){return e.percentExample},pi:function(t,e){return e.piExample}},Or=class Or extends v.Component{constructor(){super(...arguments),this.shouldShowExamples=()=>this.props.answerType!=="number",this.handleChange=(e,r)=>{this.props.onChange({currentValue:e},r)},this._handleFocus=()=>{this.props.onFocus([])},this._handleBlur=()=>{this.props.onBlur([])},this.focus=()=>(this.refs.input.focus(),!0),this.focusInputPath=e=>{this.refs.input.focus()},this.blurInputPath=e=>{var r,n;typeof((r=this.refs.input)==null?void 0:r.blur)=="function"&&((n=this.refs.input)==null||n.blur())},this.getInputPaths=()=>[[]],this.getGrammarTypeForPath=e=>"number",this.setInputValue=(e,r,n)=>{this.props.onChange({currentValue:r},n)},this.examples=()=>{const{strings:e}=this.context,r=this.props.answerType,n=cs[r].forms.split(/\s*,\s*/),a=g.map(n,i=>Du[i](this.props,e));return[e.yourAnswer].concat(a)}}static validate(e,r,n){return Ka(e,r,n)}static getUserInputFromProps(e){return{currentValue:e.currentValue}}static getOneCorrectAnswerFromRubric(e){if(e.value==null)return;let r=String(e.value);return e.inexact&&e.maxError&&(r+=" ± "+e.maxError),r}getUserInput(){return Or.getUserInputFromProps(this.props)}simpleValidate(e){return Ka(this.getUserInput(),e,this.context.strings)}render(){if(this.props.apiOptions.customKeypad){const n=d(Pr,{ref:"input",value:this.props.currentValue,keypadElement:this.props.keypadElement,onChange:this.handleChange,onFocus:this._handleFocus,onBlur:this._handleBlur});return this.props.rightAlign?d("div",{className:"perseus-input-right-align",children:n}):n}const e=this.props.reviewModeRubric,r=[vr.default,this.props.size==="small"?vr.small:null,this.props.rightAlign?vr.rightAlign:vr.leftAlign];return e&&!this.props.currentValue&&r.push(vr.answerStateUnanswered),d(os,{ref:"input",value:this.props.currentValue,onChange:this.handleChange,style:r,examples:this.examples(),shouldShowExamples:this.shouldShowExamples(),onFocus:this._handleFocus,onBlur:this._handleBlur,id:this.props.widgetId,disabled:this.props.apiOptions.readOnly,linterContext:this.props.linterContext})}};Or.contextType=S,Or.defaultProps={currentValue:"",size:"normal",answerType:"number",rightAlign:!1,apiOptions:ye.defaults,linterContext:B};let tn=Or;const vr=x.StyleSheet.create({default:{width:80,height:"auto"},small:{width:40},leftAlign:{paddingLeft:oe.xxxSmall_4,paddingRight:0},rightAlign:{textAlign:"right",paddingLeft:0,paddingRight:oe.xxxSmall_4},answerStateUnanswered:{backgroundColor:"#eee",border:"solid 1px #999"}}),Vu=t=>{const{simplify:e,size:r,answerType:n,rightAlign:a}=t;return{simplify:e,size:r,answerType:n,rightAlign:a}},$u={name:"input-number",displayName:"Input number (deprecated - use numeric input instead)",defaultAlignment:"inline-block",hidden:!0,widget:tn,transform:Vu,isLintable:!0},Hu=ps.parseTex,Gu=[{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:"π"}];function Xa(t,e){if(!(typeof t=="string"&&t.endsWith("%")))return t;const r=parseFloat(t.slice(0,-1));return isNaN(r)?t:e?r/100:r}function Ya(t,e,r){const n=Gu.map(u=>u.value).filter(u=>u!=="pi"),a=u=>{const y=`${u.value}`,m=[...u.answerForms??[]];return(!u.strict||m.length===0)&&m.push(...n),Lr.number.createValidatorFunctional(y,{message:u.message,simplify:u.status==="correct"?u.simplify:"optional",inexact:!0,maxError:u.maxError,forms:m},r)},i=Hu(t.currentValue),s=e.answers.filter(u=>u.status==="correct"),o=s.every(u=>Math.abs(u.value)<=1);let l=s.map(u=>{let y=i;return e.coefficient&&(y?y==="-"&&(y=-1):y=1),a(u)(Xa(y,o))}).find(u=>u.correct||u.empty);if(!l){const y=[].concat(e.answers.filter(m=>m.status==="ungraded"),e.answers.filter(m=>m.status==="wrong")).find(m=>a(m)(Xa(i,o)).correct);l={empty:y?y.status==="ungraded":!1,correct:y?y.status==="correct":!1,message:y?y.message:null,guess:i}}return l.empty?{type:"invalid",message:l.message}:{type:"points",earned:l.correct?1:0,total:1,message:l.message}}const Qr={integer:(t,e)=>e.integerExample,proper:(t,e)=>t.simplify==="optional"?e.properExample:e.simplifiedProperExample,improper:(t,e)=>t.simplify==="optional"?e.improperExample:e.simplifiedImproperExample,mixed:(t,e)=>e.mixedExample,decimal:(t,e)=>e.decimalExample,pi:(t,e)=>e.piExample},xr=class xr extends v.Component{constructor(){super(...arguments),this.state={previousValues:[""]},this.examples=()=>{var n;const e=((n=this.props.answerForms)==null?void 0:n.length)!==0?this.props.answerForms:Object.keys(Qr).map(a=>({name:a,simplify:"required"}));let r=g.map(e,a=>Qr[a.name](a,this.context.strings));return r=g.uniq(r),[this.context.strings.yourAnswer].concat(r)},this.shouldShowExamples=()=>{var a,i;const e=((a=this.props.answerForms)==null?void 0:a.length)===0,n=g.uniq((i=this.props.answerForms)==null?void 0:i.map(s=>s.name)).length>=Object.keys(Qr).length;return!e&&!n},this.focus=()=>{var e;return(e=this.inputRef)==null||e.focus(),!0},this.focusInputPath=()=>{var e;(e=this.inputRef)==null||e.focus()},this.blurInputPath=()=>{var e;(e=this.inputRef)==null||e.blur()},this.getInputPaths=()=>[[]],this.getGrammarTypeForPath=e=>"number",this.setInputValue=(e,r,n)=>{this.props.onChange({currentValue:r},n)},this.handleChange=(e,r)=>{this.props.onChange({currentValue:e},r),this.props.trackInteraction()},this._handleFocus=()=>{this.props.onFocus([])},this._handleBlur=()=>{this.props.onBlur([])}}static getUserInputFromProps(e){return{currentValue:e.currentValue}}static getOneCorrectAnswerFromRubric(e){const n=e.answers.filter(a=>a.status==="correct").map(a=>{let i="decimal";a.answerForms&&a.answerForms[0]&&(i=a.answerForms[0]);let s=De.toNumericString(a.value,i);return a.maxError&&(s+=" ± "+De.toNumericString(a.maxError,i)),s});if(n.length!==0)return n[0]}static validate(e,r,n){return Ya(e,r,n)}simpleValidate(e){return Ya(this.getUserInput(),e,this.context.strings)}getUserInput(){return xr.getUserInputFromProps(this.props)}render(){let e=this.props.labelText;(e==null||e==="")&&(e=this.context.strings.yourAnswerLabel);const r=a=>this.props.rightAlign?d("div",{className:"perseus-input-right-align",children:a}):a;if(this.props.apiOptions.customKeypad)return r(d(Pr,{ref:a=>this.inputRef=a,value:this.props.currentValue,keypadElement:this.props.keypadElement,onChange:this.handleChange,onFocus:this._handleFocus,onBlur:this._handleBlur}));const n=x.StyleSheet.create({input:{textAlign:this.props.rightAlign?"right":"left",width:this.props.size==="small"?40:80,padding:0,height:"auto"}});return d("div",{children:d(os,{ref:a=>this.inputRef=a,value:this.props.currentValue,onChange:this.handleChange,labelText:e,examples:this.examples(),shouldShowExamples:this.shouldShowExamples(),onFocus:this._handleFocus,onBlur:this._handleBlur,id:this.props.widgetId,disabled:this.props.apiOptions.readOnly,style:n.input})})}};xr.contextType=S,xr.defaultProps={currentValue:"",size:"normal",rightAlign:!1,apiOptions:ye.defaults,coefficient:!1,answerForms:[],labelText:"",linterContext:B};let st=xr;const Bu=function(t){const e=function(i,s){return i.reduce((o,l)=>g.find(o,s.bind(null,l))?o:o.concat([l]),[])},r=t.flat(),n=e(r,g.isEqual),a=Object.keys(Qr);return g.sortBy(n,i=>a.indexOf(i.name))},Ku=function(t){return g.extend(g.omit(t,"answers"),{answerForms:Bu(t.answers.map(r=>g.map(r.answerForms,n=>({simplify:r.simplify,name:n}))))})},Xu={name:"numeric-input",displayName:"Numeric input",defaultAlignment:"inline-block",accessible:!0,widget:st,transform:Ku,isLintable:!0};st.__docgenInfo={description:"",methods:[{name:"getUserInputFromProps",docblock:null,modifiers:["static"],params:[{name:"props",optional:!1,type:{name:"intersection",raw:`ExternalProps & { + size: NonNullable; + rightAlign: NonNullable; + apiOptions: NonNullable; + coefficient: NonNullable; + answerForms: NonNullable; + labelText: NonNullable; + linterContext: NonNullable; + currentValue: string; +}`,elements:[{name:"intersection",raw:`RenderProps & { // provided by renderer.jsx#getWidgetProps() widgetId: string; alignment: string | null | undefined; @@ -19694,7 +16991,91 @@ the available choices.`}]}}],raw:`Readonly<{ questionCompleted?: boolean; onFocus: (blurPath: FocusPath) => void; onBlur: (blurPath: FocusPath) => void; - findWidgets: (arg1: FilterCriterion) => ReadonlyArray; + findWidgets: (criterion: FilterCriterion) => ReadonlyArray; + reviewModeRubric: Rubric; + onChange: ChangeHandler; + // This is slightly different from the \`trackInteraction\` function in + // APIOptions. This provides the widget an easy way to notify the renderer + // of an interaction. The Renderer then enriches the data provided with the + // widget's id and type before calling APIOptions.trackInteraction. + trackInteraction: (extraData?: TrackingExtraArgs) => void; + isLastUsedWidget: boolean; + // provided by widget-container.jsx#render() + linterContext: LinterContextProps; + containerSizeClass: SizeClass; +}`,elements:[{name:"signature",type:"object",raw:`{ + // A list of all the possible correct and incorrect answers + answers: ReadonlyArray; + // Translatable Text; Text to describe this input. This will be shown to users using screenreaders. + labelText: string; + // Use size "Normal" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them. Options: "normal" or "small" + size: string; + // A coefficient style number allows the student to use - for -1 and an empty string to mean 1. + coefficient: boolean; + // Whether to right-align the text or not + // NOTE: perseus_data.go says this is required even though it isn't necessary. + rightAlign?: boolean; + // Always false. Not used for this widget + static: boolean; + // Used by examples, maybe not used and should be removed in the future + // see TODO in numeric-input + answerForms?: ReadonlyArray; +}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + // Translatable Display; A description for why this answer is correct, wrong, or ungraded + message: string; + // The expected answer + value: number; + // Whether this answer is "correct", "wrong", or "ungraded" + status: string; + // The forms available for this answer. Options: "integer, ""decimal", "proper", "improper", "mixed", or "pi" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + answerForms?: ReadonlyArray; + // Whether we should check the answer strictly against the the configured answerForms (strict = true) + // or include the set of default answerForms (strict = false). + strict: boolean; + // A range of error +/- the value + // NOTE: perseus_data.go says this is non-nullable even though we handle null values. + maxError: number | null | undefined; + // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: "required", "correct", or "enforced" + simplify: string | null | undefined; +}`,signature:{properties:[{key:"message",value:{name:"string",required:!0}},{key:"value",value:{name:"number",required:!0}},{key:"status",value:{name:"string",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"union",raw:`| "integer" +| "mixed" +| "improper" +| "proper" +| "decimal" +| "percent" +| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}],raw:"ReadonlyArray",required:!1}},{key:"strict",value:{name:"boolean",required:!0}},{key:"maxError",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"simplify",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"labelText",value:{name:"string",required:!0}},{key:"size",value:{name:"string",required:!0}},{key:"coefficient",value:{name:"boolean",required:!0}},{key:"rightAlign",value:{name:"boolean",required:!1}},{key:"static",value:{name:"boolean",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + simplify: + | "required" + | "correct" + | "enforced" + | "optional" + | null + | undefined; + name: MathFormat; +}`,signature:{properties:[{key:"simplify",value:{name:"union",raw:`| "required" +| "correct" +| "enforced" +| "optional" +| null +| undefined`,elements:[{name:"literal",value:'"required"'},{name:"literal",value:'"correct"'},{name:"literal",value:'"enforced"'},{name:"literal",value:'"optional"'},{name:"null"},{name:"undefined"}],required:!0}},{key:"name",value:{name:"union",raw:`| "integer" +| "mixed" +| "improper" +| "proper" +| "decimal" +| "percent" +| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}}]}}],raw:"ReadonlyArray",required:!1}}]},required:!0},{name:"signature",type:"object",raw:`{ + // provided by renderer.jsx#getWidgetProps() + widgetId: string; + alignment: string | null | undefined; + static: boolean | null | undefined; + problemNum: number | null | undefined; + apiOptions: APIOptionsWithDefaults; + keypadElement?: any; + questionCompleted?: boolean; + onFocus: (blurPath: FocusPath) => void; + onBlur: (blurPath: FocusPath) => void; + findWidgets: (criterion: FilterCriterion) => ReadonlyArray; reviewModeRubric: Rubric; onChange: ChangeHandler; // This is slightly different from the \`trackInteraction\` function in @@ -20003,7 +17384,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20047,7 +17428,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20091,7 +17472,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20135,7 +17516,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20179,7 +17560,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20223,7 +17604,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20267,7 +17648,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20311,7 +17692,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20355,7 +17736,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20399,7 +17780,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20443,7 +17824,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20487,7 +17868,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20531,7 +17912,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20575,7 +17956,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20619,7 +18000,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20663,7 +18044,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20707,7 +18088,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20751,7 +18132,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20795,7 +18176,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20839,7 +18220,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20883,7 +18264,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20927,7 +18308,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -20971,7 +18352,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21015,7 +18396,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21059,7 +18440,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21103,7 +18484,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21147,7 +18528,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21191,7 +18572,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21235,7 +18616,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21279,7 +18660,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21323,7 +18704,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21367,7 +18748,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21411,7 +18792,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props after they have been transformed by the widget's transform function. This is useful for when we need to know how a widget has shuffled its the available choices.`}]}}],raw:`Readonly<{ @@ -21585,12 +18966,152 @@ the available choices.`}]}}],raw:`Readonly<{ >; showAlignmentOptions: NonNullable; } ->`,required:!0}},{key:"keypadElement",value:{name:"any",required:!1}},{key:"questionCompleted",value:{name:"boolean",required:!1}},{key:"onFocus",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"onBlur",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"findWidgets",value:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string +>`,required:!0}},{key:"keypadElement",value:{name:"any",required:!1}},{key:"questionCompleted",value:{name:"boolean",required:!1}},{key:"onFocus",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"onBlur",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"findWidgets",value:{name:"signature",type:"function",raw:"(criterion: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string | (( id: string, widgetInfo: PerseusWidget, widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"Widget"}],raw:"ReadonlyArray"}},required:!0}},{key:"reviewModeRubric",value:{name:"signature",type:"object",raw:`{ + // A list of all the possible correct and incorrect answers + answers: ReadonlyArray; + // Translatable Text; Text to describe this input. This will be shown to users using screenreaders. + labelText: string; + // Use size "Normal" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them. Options: "normal" or "small" + size: string; + // A coefficient style number allows the student to use - for -1 and an empty string to mean 1. + coefficient: boolean; + // Whether to right-align the text or not + // NOTE: perseus_data.go says this is required even though it isn't necessary. + rightAlign?: boolean; + // Always false. Not used for this widget + static: boolean; + // Used by examples, maybe not used and should be removed in the future + // see TODO in numeric-input + answerForms?: ReadonlyArray; +}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + // Translatable Display; A description for why this answer is correct, wrong, or ungraded + message: string; + // The expected answer + value: number; + // Whether this answer is "correct", "wrong", or "ungraded" + status: string; + // The forms available for this answer. Options: "integer, ""decimal", "proper", "improper", "mixed", or "pi" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + answerForms?: ReadonlyArray; + // Whether we should check the answer strictly against the the configured answerForms (strict = true) + // or include the set of default answerForms (strict = false). + strict: boolean; + // A range of error +/- the value + // NOTE: perseus_data.go says this is non-nullable even though we handle null values. + maxError: number | null | undefined; + // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: "required", "correct", or "enforced" + simplify: string | null | undefined; +}`,signature:{properties:[{key:"message",value:{name:"string",required:!0}},{key:"value",value:{name:"number",required:!0}},{key:"status",value:{name:"string",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"union",raw:`| "integer" +| "mixed" +| "improper" +| "proper" +| "decimal" +| "percent" +| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}],raw:"ReadonlyArray",required:!1}},{key:"strict",value:{name:"boolean",required:!0}},{key:"maxError",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"simplify",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"labelText",value:{name:"string",required:!0}},{key:"size",value:{name:"string",required:!0}},{key:"coefficient",value:{name:"boolean",required:!0}},{key:"rightAlign",value:{name:"boolean",required:!1}},{key:"static",value:{name:"boolean",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + simplify: + | "required" + | "correct" + | "enforced" + | "optional" + | null + | undefined; + name: MathFormat; +}`,signature:{properties:[{key:"simplify",value:{name:"union",raw:`| "required" +| "correct" +| "enforced" +| "optional" +| null +| undefined`,elements:[{name:"literal",value:'"required"'},{name:"literal",value:'"correct"'},{name:"literal",value:'"enforced"'},{name:"literal",value:'"optional"'},{name:"null"},{name:"undefined"}],required:!0}},{key:"name",value:{name:"union",raw:`| "integer" +| "mixed" +| "improper" +| "proper" +| "decimal" +| "percent" +| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}}]}}],raw:"ReadonlyArray",required:!1}}]},required:!0}},{key:"onChange",value:{name:"signature",type:"function",raw:`( + arg1: { + hints?: ReadonlyArray; + replace?: boolean; + content?: string; + widgets?: WidgetDict; + images?: ImageDict; + // used only in EditorPage + question?: any; + answerArea?: PerseusAnswerArea | null; + itemDataVersion?: Version; + // used in MutirenderEditor + item?: Item; + editorMode?: EditorMode; + jsonMode?: boolean; + // perseus-all-package/widgets/unit.jsx + value?: any; + // widgets/radio/widget.jsx + choiceStates?: ReadonlyArray; + // widgets/numeric-input.jsx + currentValue?: string; + // perseus-all-package/widgets/dropdown.jsx + selected?: number; + // perseus-all-package/widgets/grapher.jsx + plot?: any; + // Interactive Graph callback (see legacy: interactive-graph.tsx) + graph?: PerseusGraphType; + }, + callback?: () => unknown | null | undefined, + silent?: boolean, +) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + hints?: ReadonlyArray; + replace?: boolean; + content?: string; + widgets?: WidgetDict; + images?: ImageDict; + // used only in EditorPage + question?: any; + answerArea?: PerseusAnswerArea | null; + itemDataVersion?: Version; + // used in MutirenderEditor + item?: Item; + editorMode?: EditorMode; + jsonMode?: boolean; + // perseus-all-package/widgets/unit.jsx + value?: any; + // widgets/radio/widget.jsx + choiceStates?: ReadonlyArray; + // widgets/numeric-input.jsx + currentValue?: string; + // perseus-all-package/widgets/dropdown.jsx + selected?: number; + // perseus-all-package/widgets/grapher.jsx + plot?: any; + // Interactive Graph callback (see legacy: interactive-graph.tsx) + graph?: PerseusGraphType; +}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { + /** + * When \`true\`, causes the previous hint to be replaced with this hint when + * displayed. When \`false\`, the previous hint remains visible when this one + * is displayed. This allows for hints that build upon each other. + */ + replace?: boolean; +}`,elements:[{name:"signature",type:"object",raw:`{ + // Translatable Markdown content to be rendered. May include references to + // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). + // For each image found in this content, there can be an entry in the + // \`images\` dict (below) with the key being the image's url which defines + // additional attributes for the image. + content: string; + // A dictionary of {[widgetName]: Widget} to be referenced from the content field + widgets: PerseusWidgetsMap; + // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + metadata?: ReadonlyArray; + // A dictionary of {[imageUrl]: PerseusImageDetail}. + images: { + [key: string]: PerseusImageDetail; + }; +}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21634,49 +19155,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}],raw:"ReadonlyArray"}},required:!0}},{key:"reviewModeRubric",value:{name:"signature",type:"object",raw:`{ - // The choices provided to the user. - choices: ReadonlyArray; - // Does this have a "none of the above" option? - // NOTE: perseus_data.go says this is required even though it isn't necessary. - hasNoneOfTheAbove?: boolean; - // If multipleSelect is enabled, Specify the number expected to be correct. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - countChoices?: boolean; - // Randomize the order of the options or keep them as defined - // NOTE: perseus_data.go says this is required even though it isn't necessary. - randomize?: boolean; - // Does this set allow for multiple selections to be correct? - // NOTE: perseus_data.go says this is required even though it isn't necessary. - multipleSelect?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - deselectEnabled?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - onePerLine?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - displayCount?: any; - // v0 props - // \`noneOfTheAbove\` is still in use (but only set to \`false\`). - noneOfTheAbove?: false; -}`,signature:{properties:[{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown; The label for this choice - content: string; - // Translatable Markdown; A clue to give the user when they get it wrong - // NOTE: perseus_data.go says this is required even though it isn't necessary. - clue?: string; - // Whether this option is a correct answer or not - // NOTE: perseus_data.go says this is required even though it isn't necessary. - correct?: boolean; - // If this is none of the above, override the content with "None of the above" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - isNoneOfTheAbove?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - widgets?: PerseusWidgetsMap; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"clue",value:{name:"string",required:!1}},{key:"correct",value:{name:"boolean",required:!1}},{key:"isNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21720,51 +19199,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21808,7 +19243,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21852,7 +19287,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21896,7 +19331,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21940,7 +19375,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -21984,7 +19419,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22028,7 +19463,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22072,7 +19507,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22116,7 +19551,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22160,7 +19595,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22204,7 +19639,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22248,7 +19683,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22292,7 +19727,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22336,7 +19771,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22380,7 +19815,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22424,7 +19859,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22468,7 +19903,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22512,7 +19947,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22556,7 +19991,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22600,7 +20035,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22644,7 +20079,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22688,7 +20123,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22732,7 +20167,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22776,7 +20211,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22820,7 +20255,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22864,7 +20299,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22908,7 +20343,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22952,7 +20387,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -22996,7 +20431,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23040,7 +20475,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23084,7 +20519,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23128,86 +20563,56 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"hasNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"countChoices",value:{name:"boolean",required:!1}},{key:"randomize",value:{name:"boolean",required:!1}},{key:"multipleSelect",value:{name:"boolean",required:!1}},{key:"deselectEnabled",value:{name:"boolean",required:!1}},{key:"onePerLine",value:{name:"boolean",required:!1}},{key:"displayCount",value:{name:"any",required:!1}},{key:"noneOfTheAbove",value:{name:"literal",value:"false",required:!1}}]},required:!0}},{key:"onChange",value:{name:"signature",type:"function",raw:`( - arg1: { - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; - }, - callback?: () => unknown | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; -}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [key: string]: PerseusImageDetail; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // The width of the image + width: number; + // the height of the image + height: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ /** * When \`true\`, causes the previous hint to be replaced with this hint when * displayed. When \`false\`, the previous hint remains visible when this one * is displayed. This allows for hints that build upon each other. */ replace?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; - }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23251,7 +20656,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23295,7 +20700,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23339,7 +20744,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23383,7 +20788,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23427,7 +20832,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23471,7 +20876,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23515,7 +20920,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23559,7 +20964,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23603,7 +21008,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23647,7 +21052,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23691,7 +21096,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23735,7 +21140,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23779,7 +21184,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23823,7 +21228,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23867,7 +21272,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23911,7 +21316,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23955,7 +21360,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -23999,7 +21404,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24043,7 +21448,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24087,7 +21492,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24131,7 +21536,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24175,7 +21580,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24219,7 +21624,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24263,7 +21668,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24307,7 +21712,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24351,7 +21756,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24395,7 +21800,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24439,7 +21844,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24483,7 +21888,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24527,7 +21932,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24571,7 +21976,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24615,7 +22020,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24659,23 +22064,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24719,7 +22108,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ [url: string]: Dimensions; }`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ width?: number; @@ -24757,8 +22146,41 @@ the available choices.`}]}}],raw:`Readonly<{ width?: number; height?: number; }`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24802,21 +22224,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -24860,279 +22268,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - selected: boolean; - crossedOut: boolean; - highlighted: boolean; - rationaleShown: boolean; - correctnessShown: boolean; - previouslyAnswered: boolean; - readOnly: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"Empty"},name:"extraData"}],return:{name:"void"}},required:!0}},{key:"isLastUsedWidget",value:{name:"boolean",required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}},{key:"containerSizeClass",value:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]",required:!0}}]}}],alias:"Props"}}],returns:{type:{name:"signature",type:"object",raw:`{ - countChoices?: boolean; - choicesSelected: ReadonlyArray; - numCorrect?: number; - noneOfTheAboveIndex?: number | null | undefined; - noneOfTheAboveSelected?: boolean; -}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]}}}},{name:"_renderRenderer",docblock:null,modifiers:[],params:[{name:"content",optional:!0,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!0,type:{name:"union",raw:"number | null",elements:[{name:"number"},{name:"null"}]}}],returns:{type:{name:"boolean"}}},{name:"registerFocusFunction",docblock:null,modifiers:[],params:[{name:"fun",optional:!1,type:{name:"signature",type:"function",raw:`( - choiceIndex?: number | null | undefined, -) => boolean`,signature:{arguments:[{type:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},name:"choiceIndex"}],return:{name:"boolean"}},alias:"FocusFunction"}}],returns:{type:{name:"void"}}},{name:"updateChoices",docblock:null,modifiers:[],params:[{name:"newValueLists",optional:!1,type:null}],returns:null},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"signature",type:"object",raw:`{ - countChoices?: boolean; - choicesSelected: ReadonlyArray; - numCorrect?: number; - noneOfTheAboveIndex?: number | null | undefined; - noneOfTheAboveSelected?: boolean; -}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]}}}},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ - // The choices provided to the user. - choices: ReadonlyArray; - // Does this have a "none of the above" option? - // NOTE: perseus_data.go says this is required even though it isn't necessary. - hasNoneOfTheAbove?: boolean; - // If multipleSelect is enabled, Specify the number expected to be correct. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - countChoices?: boolean; - // Randomize the order of the options or keep them as defined - // NOTE: perseus_data.go says this is required even though it isn't necessary. - randomize?: boolean; - // Does this set allow for multiple selections to be correct? - // NOTE: perseus_data.go says this is required even though it isn't necessary. - multipleSelect?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - deselectEnabled?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - onePerLine?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - displayCount?: any; - // v0 props - // \`noneOfTheAbove\` is still in use (but only set to \`false\`). - noneOfTheAbove?: false; -}`,signature:{properties:[{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown; The label for this choice - content: string; - // Translatable Markdown; A clue to give the user when they get it wrong - // NOTE: perseus_data.go says this is required even though it isn't necessary. - clue?: string; - // Whether this option is a correct answer or not - // NOTE: perseus_data.go says this is required even though it isn't necessary. - correct?: boolean; - // If this is none of the above, override the content with "None of the above" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - isNoneOfTheAbove?: boolean; - // deprecated - // NOTE: perseus_data.go says this is required even though it isn't necessary. - widgets?: PerseusWidgetsMap; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"clue",value:{name:"string",required:!1}},{key:"correct",value:{name:"boolean",required:!1}},{key:"isNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25176,7 +22312,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25220,7 +22356,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25264,7 +22400,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25308,7 +22444,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25352,7 +22488,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25396,7 +22532,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25440,7 +22576,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25484,7 +22620,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25528,7 +22664,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25572,7 +22708,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25616,7 +22752,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25660,7 +22796,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25704,7 +22840,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25748,7 +22884,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25792,7 +22928,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25836,7 +22972,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25880,7 +23016,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25924,7 +23060,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -25968,7 +23104,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26012,7 +23148,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26056,7 +23192,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26100,7 +23236,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26144,7 +23280,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26188,7 +23324,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26232,7 +23368,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26276,7 +23412,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26320,7 +23456,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26364,7 +23500,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26408,7 +23544,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26452,7 +23588,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26496,7 +23632,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26540,7 +23676,54 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26584,284 +23767,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}}]}}],raw:"ReadonlyArray",required:!0}},{key:"hasNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"countChoices",value:{name:"boolean",required:!1}},{key:"randomize",value:{name:"boolean",required:!1}},{key:"multipleSelect",value:{name:"boolean",required:!1}},{key:"deselectEnabled",value:{name:"boolean",required:!1}},{key:"onePerLine",value:{name:"boolean",required:!1}},{key:"displayCount",value:{name:"any",required:!1}},{key:"noneOfTheAbove",value:{name:"literal",value:"false",required:!1}}]},alias:"PerseusRadioRubric"}}],returns:{type:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"showRationalesForCurrentlySelectedChoices",docblock:`Turn on rationale display for the currently selected choices. Note that -this leaves rationales on for choices that are already showing -rationales. -@deprecated Internal only. Use \`showSolutions\` prop instead.`,modifiers:[],params:[{name:"rubric",optional:!1}],returns:null,description:`Turn on rationale display for the currently selected choices. Note that -this leaves rationales on for choices that are already showing -rationales.`},{name:"deselectIncorrectSelectedChoices",docblock:"Deselects any currently-selected choices that are not correct choices.",modifiers:[],params:[],returns:null,description:"Deselects any currently-selected choices that are not correct choices."}],displayName:"Radio",props:{widgetId:{required:!0,tsType:{name:"string"},description:""},alignment:{required:!0,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},problemNum:{required:!0,tsType:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},description:""},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26905,7 +23811,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26949,7 +23855,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -26993,7 +23899,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27037,7 +23943,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27081,7 +23987,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27125,7 +24031,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27169,7 +24075,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27213,7 +24119,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27257,7 +24163,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27301,7 +24207,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27345,7 +24251,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27389,7 +24295,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27433,7 +24339,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27477,7 +24383,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27521,7 +24427,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27565,7 +24471,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27609,7 +24515,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27653,7 +24559,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27697,7 +24603,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27741,7 +24647,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27785,7 +24691,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27829,7 +24735,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27873,7 +24779,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27917,7 +24823,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -27961,7 +24867,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -28005,7 +24911,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -28049,7 +24955,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -28093,7 +24999,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -28137,7 +25043,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -28181,7 +25087,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -28225,7 +25131,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -28269,7 +25175,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -28313,982 +25219,1001 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + selected: boolean; + crossedOut: boolean; + highlighted: boolean; + rationaleShown: boolean; + correctnessShown: boolean; + previouslyAnswered: boolean; + readOnly: boolean; +}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle +| PerseusGraphTypeCircle +| PerseusGraphTypeLinear +| PerseusGraphTypeLinearSystem +| PerseusGraphTypeNone +| PerseusGraphTypePoint +| PerseusGraphTypePolygon +| PerseusGraphTypeQuadratic +| PerseusGraphTypeRay +| PerseusGraphTypeSegment +| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ + type: "angle"; + // Whether to show the angle measurements. default: false + showAngles?: boolean; + // Allow Reflex Angles if an "angle" type. default: true + allowReflexAngles?: boolean; + // The angle offset in degrees if an "angle" type. default: 0 + angleOffsetDeg?: number; + // Snap to degree increments if an "angle" type. default: 1 + snapDegrees?: number; + // How to match the answer. If missing, defaults to exact matching. + match?: "congruent"; + // must have 3 coords - ie [Coord, Coord, Coord] + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ + type: "circle"; + center?: Coord; + radius?: number; + // The initial coordinates the graph renders with. + startCoords?: { + center: Coord; + radius: number; }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},{name:"signature",type:"object",raw:`{ - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< - APIOptions["setDrawingAreaAvailable"] ->`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< - APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; - } ->`},description:""},keypadElement:{required:!1,tsType:{name:"any"},description:""},questionCompleted:{required:!1,tsType:{name:"boolean"},description:""},onFocus:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},onBlur:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},findWidgets:{required:!0,tsType:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray"}}},description:""},reviewModeRubric:{required:!0,tsType:{name:"Rubric"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`( - arg1: { - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; - }, - callback?: () => unknown | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; -}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "circle"; + center?: Coord; + radius?: number; + // The initial coordinates the graph renders with. + startCoords?: { + center: Coord; + radius: number; }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ + center: Coord; + radius: number; +}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "linear"; + // expects 2 coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "linear"; + // expects 2 coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "linear-system"; + // expects 2 sets of 2 coords + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "linear-system"; + // expects 2 sets of 2 coords + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ + type: "none"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ + type: "point"; + // The number of points if a "point" type. default: 1. "unlimited" if no limit + numPoints?: number | "unlimited"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "point"; + // The number of points if a "point" type. default: 1. "unlimited" if no limit + numPoints?: number | "unlimited"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "polygon"; + // The number of sides. default: 3. "unlimited" if no limit + numSides?: number | "unlimited"; + // Whether to the angle measurements. default: false + showAngles?: boolean; + // Whether to show side measurements. default: false + showSides?: boolean; + // How to snap points. e.g. "grid", "angles", or "sides". default: grid + snapTo?: "grid" | "angles" | "sides"; + // How to match the answer. If missing, defaults to exact matching. + match?: "similar" | "congruent" | "approx"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "polygon"; + // The number of sides. default: 3. "unlimited" if no limit + numSides?: number | "unlimited"; + // Whether to the angle measurements. default: false + showAngles?: boolean; + // Whether to show side measurements. default: false + showSides?: boolean; + // How to snap points. e.g. "grid", "angles", or "sides". default: grid + snapTo?: "grid" | "angles" | "sides"; + // How to match the answer. If missing, defaults to exact matching. + match?: "similar" | "congruent" | "approx"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "quadratic"; + // expects a list of 3 coords + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "quadratic"; + // expects a list of 3 coords + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "ray"; + // Expects a list of 2 Coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "ray"; + // Expects a list of 2 Coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "segment"; + // The number of segments if a "segment" type. default: 1. Max: 6 + numSegments?: number; + // Expects a list of Coord tuples. Length should match the \`numSegments\` value. + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "segment"; + // The number of segments if a "segment" type. default: 1. Max: 6 + numSegments?: number; + // Expects a list of Coord tuples. Length should match the \`numSegments\` value. + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "sinusoid"; + // Expects a list of 2 Coords + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "sinusoid"; + // Expects a list of 2 Coords + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"Empty"},name:"extraData"}],return:{name:"void"}},required:!0}},{key:"isLastUsedWidget",value:{name:"boolean",required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}},{key:"containerSizeClass",value:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]",required:!0}}]}}]},{name:"signature",type:"object",raw:`{ + size: NonNullable; + rightAlign: NonNullable; + apiOptions: NonNullable; + coefficient: NonNullable; + answerForms: NonNullable; + labelText: NonNullable; + linterContext: NonNullable; + currentValue: string; +}`,signature:{properties:[{key:"size",value:{name:"NonNullable",elements:[{name:'intersection["size"]',raw:'ExternalProps["size"]'}],raw:'NonNullable',required:!0}},{key:"rightAlign",value:{name:"NonNullable",elements:[{name:'intersection["rightAlign"]',raw:'ExternalProps["rightAlign"]'}],raw:'NonNullable',required:!0}},{key:"apiOptions",value:{name:"NonNullable",elements:[{name:'intersection["apiOptions"]',raw:'ExternalProps["apiOptions"]'}],raw:'NonNullable',required:!0}},{key:"coefficient",value:{name:"NonNullable",elements:[{name:'intersection["coefficient"]',raw:'ExternalProps["coefficient"]'}],raw:'NonNullable',required:!0}},{key:"answerForms",value:{name:"NonNullable",elements:[{name:'intersection["answerForms"]',raw:'ExternalProps["answerForms"]'}],raw:'NonNullable',required:!0}},{key:"labelText",value:{name:"NonNullable",elements:[{name:'intersection["labelText"]',raw:'ExternalProps["labelText"]'}],raw:'NonNullable',required:!0}},{key:"linterContext",value:{name:"NonNullable",elements:[{name:'intersection["linterContext"]',raw:'ExternalProps["linterContext"]'}],raw:'NonNullable',required:!0}},{key:"currentValue",value:{name:"string",required:!0}}]}}],alias:"Props"}}],returns:{type:{name:"signature",type:"object",raw:`{ + currentValue: string; +}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}}}},{name:"getOneCorrectAnswerFromRubric",docblock:null,modifiers:["static"],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // A list of all the possible correct and incorrect answers + answers: ReadonlyArray; + // Translatable Text; Text to describe this input. This will be shown to users using screenreaders. + labelText: string; + // Use size "Normal" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them. Options: "normal" or "small" + size: string; + // A coefficient style number allows the student to use - for -1 and an empty string to mean 1. + coefficient: boolean; + // Whether to right-align the text or not // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable + rightAlign?: boolean; + // Always false. Not used for this widget static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components + // Used by examples, maybe not used and should be removed in the future + // see TODO in numeric-input + answerForms?: ReadonlyArray; +}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + // Translatable Display; A description for why this answer is correct, wrong, or ungraded + message: string; + // The expected answer + value: number; + // Whether this answer is "correct", "wrong", or "ungraded" + status: string; + // The forms available for this answer. Options: "integer, ""decimal", "proper", "improper", "mixed", or "pi" // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. + answerForms?: ReadonlyArray; + // Whether we should check the answer strictly against the the configured answerForms (strict = true) + // or include the set of default answerForms (strict = false). + strict: boolean; + // A range of error +/- the value + // NOTE: perseus_data.go says this is non-nullable even though we handle null values. + maxError: number | null | undefined; + // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: "required", "correct", or "enforced" + simplify: string | null | undefined; +}`,signature:{properties:[{key:"message",value:{name:"string",required:!0}},{key:"value",value:{name:"number",required:!0}},{key:"status",value:{name:"string",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"union",raw:`| "integer" +| "mixed" +| "improper" +| "proper" +| "decimal" +| "percent" +| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}],raw:"ReadonlyArray",required:!1}},{key:"strict",value:{name:"boolean",required:!0}},{key:"maxError",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"simplify",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"labelText",value:{name:"string",required:!0}},{key:"size",value:{name:"string",required:!0}},{key:"coefficient",value:{name:"boolean",required:!0}},{key:"rightAlign",value:{name:"boolean",required:!1}},{key:"static",value:{name:"boolean",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + simplify: + | "required" + | "correct" + | "enforced" + | "optional" + | null + | undefined; + name: MathFormat; +}`,signature:{properties:[{key:"simplify",value:{name:"union",raw:`| "required" +| "correct" +| "enforced" +| "optional" +| null +| undefined`,elements:[{name:"literal",value:'"required"'},{name:"literal",value:'"correct"'},{name:"literal",value:'"enforced"'},{name:"literal",value:'"optional"'},{name:"null"},{name:"undefined"}],required:!0}},{key:"name",value:{name:"union",raw:`| "integer" +| "mixed" +| "improper" +| "proper" +| "decimal" +| "percent" +| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}}]}}],raw:"ReadonlyArray",required:!1}}]},alias:"PerseusNumericInputRubric"}}],returns:{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]}}},{name:"validate",docblock:null,modifiers:["static"],params:[{name:"userInput",optional:!1,type:{name:"signature",type:"object",raw:`{ + currentValue: string; +}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]},alias:"PerseusNumericInputUserInput"}},{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // A list of all the possible correct and incorrect answers + answers: ReadonlyArray; + // Translatable Text; Text to describe this input. This will be shown to users using screenreaders. + labelText: string; + // Use size "Normal" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them. Options: "normal" or "small" + size: string; + // A coefficient style number allows the student to use - for -1 and an empty string to mean 1. + coefficient: boolean; + // Whether to right-align the text or not // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable + rightAlign?: boolean; + // Always false. Not used for this widget static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components + // Used by examples, maybe not used and should be removed in the future + // see TODO in numeric-input + answerForms?: ReadonlyArray; +}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + // Translatable Display; A description for why this answer is correct, wrong, or ungraded + message: string; + // The expected answer + value: number; + // Whether this answer is "correct", "wrong", or "ungraded" + status: string; + // The forms available for this answer. Options: "integer, ""decimal", "proper", "improper", "mixed", or "pi" // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. + answerForms?: ReadonlyArray; + // Whether we should check the answer strictly against the the configured answerForms (strict = true) + // or include the set of default answerForms (strict = false). + strict: boolean; + // A range of error +/- the value + // NOTE: perseus_data.go says this is non-nullable even though we handle null values. + maxError: number | null | undefined; + // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: "required", "correct", or "enforced" + simplify: string | null | undefined; +}`,signature:{properties:[{key:"message",value:{name:"string",required:!0}},{key:"value",value:{name:"number",required:!0}},{key:"status",value:{name:"string",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"union",raw:`| "integer" +| "mixed" +| "improper" +| "proper" +| "decimal" +| "percent" +| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}],raw:"ReadonlyArray",required:!1}},{key:"strict",value:{name:"boolean",required:!0}},{key:"maxError",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"simplify",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"labelText",value:{name:"string",required:!0}},{key:"size",value:{name:"string",required:!0}},{key:"coefficient",value:{name:"boolean",required:!0}},{key:"rightAlign",value:{name:"boolean",required:!1}},{key:"static",value:{name:"boolean",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + simplify: + | "required" + | "correct" + | "enforced" + | "optional" + | null + | undefined; + name: MathFormat; +}`,signature:{properties:[{key:"simplify",value:{name:"union",raw:`| "required" +| "correct" +| "enforced" +| "optional" +| null +| undefined`,elements:[{name:"literal",value:'"required"'},{name:"literal",value:'"correct"'},{name:"literal",value:'"enforced"'},{name:"literal",value:'"optional"'},{name:"null"},{name:"undefined"}],required:!0}},{key:"name",value:{name:"union",raw:`| "integer" +| "mixed" +| "improper" +| "proper" +| "decimal" +| "percent" +| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}}]}}],raw:"ReadonlyArray",required:!1}}]},alias:"PerseusNumericInputRubric"}},{name:"strings",optional:!1,type:{name:"signature",type:"object",raw:`{ + closeKeypad: string; + openKeypad: string; + mathInputBox: string; + removeHighlight: string; + addHighlight: string; + hintPos: ({pos}: {pos: number}) => string; + errorRendering: ({error}: {error: string}) => string; + APPROXIMATED_PI_ERROR: string; + EXTRA_SYMBOLS_ERROR: string; + NEEDS_TO_BE_SIMPLFIED_ERROR: string; + MISSING_PERCENT_ERROR: string; + MULTIPLICATION_SIGN_ERROR: string; + WRONG_CASE_ERROR: string; + WRONG_LETTER_ERROR: string; + invalidSelection: string; + ERROR_TITLE: string; + ERROR_MESSAGE: string; + hints: string; + getAnotherHint: string; + deprecatedStandin: string; + keepTrying: string; + tryAgain: string; + check: string; + correctExcited: string; + nextQuestion: string; + skipToTitle: ({title}: {title: string}) => string; + current: string; + correct: string; + correctSelected: string; + correctCrossedOut: string; + incorrect: string; + incorrectSelected: string; + hideExplanation: string; + explain: string; + INVALID_MESSAGE_PREFIX: string; + DEFAULT_INVALID_MESSAGE_1: string; + DEFAULT_INVALID_MESSAGE_2: string; + integerExample: string; + properExample: string; + simplifiedProperExample: string; + improperExample: string; + simplifiedImproperExample: string; + mixedExample: string; + decimalExample: string; + percentExample: string; + piExample: string; + yourAnswer: string; + yourAnswerLabel: string; + addPoints: string; + addVertices: string; + tapMultiple: string; + tapSingle: string; + clickMultiple: string; + clickSingle: string; + choices: string; + answers: ({num}: {num: number}) => string; + hideAnswersToggleLabel: string; + moves: ({num}: {num: number}) => string; + clickTiles: string; + turnOffLights: string; + fillAllCells: string; + molecularDrawing: ({content}: {content: string}) => string; + switchDirection: string; + circleOpen: string; + circleFilled: string; + numDivisions: string; + divisions: ({divRangeString}: {divRangeString: string}) => string; + lineRange: ({lineRange}: {lineRange: string}) => string; + lineNumber: ({lineNumber}: {lineNumber: string}) => string; + symbolPassage: ({ + questionSymbol, + questionNumber, + }: { + questionSymbol: string; + questionNumber: string; + }) => string; + symbolQuestion: ({sentenceSymbol}: {sentenceSymbol: string}) => string; + lineLabel: string; + beginningPassage: string; + beginningFootnotes: string; + endPassage: string; + questionMarker: ({number}: {number: string}) => string; + circleMarker: ({number}: {number: string}) => string; + sentenceMarker: ({number}: {number: string}) => string; + dragHandles: string; + tapAddPoints: string; + false: string; + true: string; + no: string; + yes: string; + chooseCorrectNum: string; + notNoneOfTheAbove: string; + noneOfTheAbove: string; + chooseNumAnswers: ({numCorrect}: {numCorrect: string}) => string; + chooseAllAnswers: string; + chooseOneAnswer: string; + choiceCheckedCorrect: ({letter}: {letter: string}) => string; + choiceCrossedOutCorrect: ({letter}: {letter: string}) => string; + choiceCorrect: ({letter}: {letter: string}) => string; + choiceCheckedIncorrect: ({letter}: {letter: string}) => string; + choiceCrossedOutIncorrect: ({letter}: {letter: string}) => string; + choiceIncorrect: ({letter}: {letter: string}) => string; + choiceChecked: ({letter}: {letter: string}) => string; + choiceCrossedOut: ({letter}: {letter: string}) => string; + choice: ({letter}: {letter: string}) => string; + crossOut: string; + crossOutOption: string; + crossOutChoice: ({letter}: {letter: string}) => string; + bringBack: string; + openMenuForChoice: ({letter}: {letter: string}) => string; + letters: string; + rightArrow: string; + dontUnderstandUnits: string; + checkSigFigs: string; + answerNumericallyIncorrect: string; + checkUnits: string; + dontUnderstand: string; + loading: string; + videoTranscript: string; + somethingWrong: string; + videoWrapper: string; + mathInputTitle: string; + mathInputDescription: string; + sin: string; + cos: string; + tan: string; + simulationLoadFail: string; + simulationLocaleWarning: string; + addPoint: string; + removePoint: string; + graphKeyboardPrompt: string; +}`,signature:{properties:[{key:"closeKeypad",value:{name:"string",required:!0}},{key:"openKeypad",value:{name:"string",required:!0}},{key:"mathInputBox",value:{name:"string",required:!0}},{key:"removeHighlight",value:{name:"string",required:!0}},{key:"addHighlight",value:{name:"string",required:!0}},{key:"hintPos",value:{name:"signature",type:"function",raw:"({pos}: {pos: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{pos: number}",signature:{properties:[{key:"pos",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"errorRendering",value:{name:"signature",type:"function",raw:"({error}: {error: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{error: string}",signature:{properties:[{key:"error",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"APPROXIMATED_PI_ERROR",value:{name:"string",required:!0}},{key:"EXTRA_SYMBOLS_ERROR",value:{name:"string",required:!0}},{key:"NEEDS_TO_BE_SIMPLFIED_ERROR",value:{name:"string",required:!0}},{key:"MISSING_PERCENT_ERROR",value:{name:"string",required:!0}},{key:"MULTIPLICATION_SIGN_ERROR",value:{name:"string",required:!0}},{key:"WRONG_CASE_ERROR",value:{name:"string",required:!0}},{key:"WRONG_LETTER_ERROR",value:{name:"string",required:!0}},{key:"invalidSelection",value:{name:"string",required:!0}},{key:"ERROR_TITLE",value:{name:"string",required:!0}},{key:"ERROR_MESSAGE",value:{name:"string",required:!0}},{key:"hints",value:{name:"string",required:!0}},{key:"getAnotherHint",value:{name:"string",required:!0}},{key:"deprecatedStandin",value:{name:"string",required:!0}},{key:"keepTrying",value:{name:"string",required:!0}},{key:"tryAgain",value:{name:"string",required:!0}},{key:"check",value:{name:"string",required:!0}},{key:"correctExcited",value:{name:"string",required:!0}},{key:"nextQuestion",value:{name:"string",required:!0}},{key:"skipToTitle",value:{name:"signature",type:"function",raw:"({title}: {title: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{title: string}",signature:{properties:[{key:"title",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"current",value:{name:"string",required:!0}},{key:"correct",value:{name:"string",required:!0}},{key:"correctSelected",value:{name:"string",required:!0}},{key:"correctCrossedOut",value:{name:"string",required:!0}},{key:"incorrect",value:{name:"string",required:!0}},{key:"incorrectSelected",value:{name:"string",required:!0}},{key:"hideExplanation",value:{name:"string",required:!0}},{key:"explain",value:{name:"string",required:!0}},{key:"INVALID_MESSAGE_PREFIX",value:{name:"string",required:!0}},{key:"DEFAULT_INVALID_MESSAGE_1",value:{name:"string",required:!0}},{key:"DEFAULT_INVALID_MESSAGE_2",value:{name:"string",required:!0}},{key:"integerExample",value:{name:"string",required:!0}},{key:"properExample",value:{name:"string",required:!0}},{key:"simplifiedProperExample",value:{name:"string",required:!0}},{key:"improperExample",value:{name:"string",required:!0}},{key:"simplifiedImproperExample",value:{name:"string",required:!0}},{key:"mixedExample",value:{name:"string",required:!0}},{key:"decimalExample",value:{name:"string",required:!0}},{key:"percentExample",value:{name:"string",required:!0}},{key:"piExample",value:{name:"string",required:!0}},{key:"yourAnswer",value:{name:"string",required:!0}},{key:"yourAnswerLabel",value:{name:"string",required:!0}},{key:"addPoints",value:{name:"string",required:!0}},{key:"addVertices",value:{name:"string",required:!0}},{key:"tapMultiple",value:{name:"string",required:!0}},{key:"tapSingle",value:{name:"string",required:!0}},{key:"clickMultiple",value:{name:"string",required:!0}},{key:"clickSingle",value:{name:"string",required:!0}},{key:"choices",value:{name:"string",required:!0}},{key:"answers",value:{name:"signature",type:"function",raw:"({num}: {num: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{num: number}",signature:{properties:[{key:"num",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"hideAnswersToggleLabel",value:{name:"string",required:!0}},{key:"moves",value:{name:"signature",type:"function",raw:"({num}: {num: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{num: number}",signature:{properties:[{key:"num",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"clickTiles",value:{name:"string",required:!0}},{key:"turnOffLights",value:{name:"string",required:!0}},{key:"fillAllCells",value:{name:"string",required:!0}},{key:"molecularDrawing",value:{name:"signature",type:"function",raw:"({content}: {content: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{content: string}",signature:{properties:[{key:"content",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"switchDirection",value:{name:"string",required:!0}},{key:"circleOpen",value:{name:"string",required:!0}},{key:"circleFilled",value:{name:"string",required:!0}},{key:"numDivisions",value:{name:"string",required:!0}},{key:"divisions",value:{name:"signature",type:"function",raw:"({divRangeString}: {divRangeString: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{divRangeString: string}",signature:{properties:[{key:"divRangeString",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineRange",value:{name:"signature",type:"function",raw:"({lineRange}: {lineRange: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{lineRange: string}",signature:{properties:[{key:"lineRange",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineNumber",value:{name:"signature",type:"function",raw:"({lineNumber}: {lineNumber: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{lineNumber: string}",signature:{properties:[{key:"lineNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolPassage",value:{name:"signature",type:"function",raw:`({ + questionSymbol, + questionNumber, +}: { + questionSymbol: string; + questionNumber: string; +}) => string`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + questionSymbol: string; + questionNumber: string; +}`,signature:{properties:[{key:"questionSymbol",value:{name:"string",required:!0}},{key:"questionNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolQuestion",value:{name:"signature",type:"function",raw:"({sentenceSymbol}: {sentenceSymbol: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{sentenceSymbol: string}",signature:{properties:[{key:"sentenceSymbol",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineLabel",value:{name:"string",required:!0}},{key:"beginningPassage",value:{name:"string",required:!0}},{key:"beginningFootnotes",value:{name:"string",required:!0}},{key:"endPassage",value:{name:"string",required:!0}},{key:"questionMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"circleMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"sentenceMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"dragHandles",value:{name:"string",required:!0}},{key:"tapAddPoints",value:{name:"string",required:!0}},{key:"false",value:{name:"string",required:!0}},{key:"true",value:{name:"string",required:!0}},{key:"no",value:{name:"string",required:!0}},{key:"yes",value:{name:"string",required:!0}},{key:"chooseCorrectNum",value:{name:"string",required:!0}},{key:"notNoneOfTheAbove",value:{name:"string",required:!0}},{key:"noneOfTheAbove",value:{name:"string",required:!0}},{key:"chooseNumAnswers",value:{name:"signature",type:"function",raw:"({numCorrect}: {numCorrect: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{numCorrect: string}",signature:{properties:[{key:"numCorrect",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"chooseAllAnswers",value:{name:"string",required:!0}},{key:"chooseOneAnswer",value:{name:"string",required:!0}},{key:"choiceCheckedCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCheckedIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceChecked",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOut",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"crossOut",value:{name:"string",required:!0}},{key:"crossOutOption",value:{name:"string",required:!0}},{key:"crossOutChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"bringBack",value:{name:"string",required:!0}},{key:"openMenuForChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"letters",value:{name:"string",required:!0}},{key:"rightArrow",value:{name:"string",required:!0}},{key:"dontUnderstandUnits",value:{name:"string",required:!0}},{key:"checkSigFigs",value:{name:"string",required:!0}},{key:"answerNumericallyIncorrect",value:{name:"string",required:!0}},{key:"checkUnits",value:{name:"string",required:!0}},{key:"dontUnderstand",value:{name:"string",required:!0}},{key:"loading",value:{name:"string",required:!0}},{key:"videoTranscript",value:{name:"string",required:!0}},{key:"somethingWrong",value:{name:"string",required:!0}},{key:"videoWrapper",value:{name:"string",required:!0}},{key:"mathInputTitle",value:{name:"string",required:!0}},{key:"mathInputDescription",value:{name:"string",required:!0}},{key:"sin",value:{name:"string",required:!0}},{key:"cos",value:{name:"string",required:!0}},{key:"tan",value:{name:"string",required:!0}},{key:"simulationLoadFail",value:{name:"string",required:!0}},{key:"simulationLocaleWarning",value:{name:"string",required:!0}},{key:"addPoint",value:{name:"string",required:!0}},{key:"removePoint",value:{name:"string",required:!0}},{key:"graphKeyboardPrompt",value:{name:"string",required:!0}}]},alias:"PerseusStrings"}}],returns:{type:{name:"union",raw:`| { + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; + } +| { + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; + }`,elements:[{name:"signature",type:"object",raw:`{ + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"examples",docblock:null,modifiers:[],params:[],returns:null},{name:"shouldShowExamples",docblock:null,modifiers:[],params:[],returns:null},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // A list of all the possible correct and incorrect answers + answers: ReadonlyArray; + // Translatable Text; Text to describe this input. This will be shown to users using screenreaders. + labelText: string; + // Use size "Normal" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them. Options: "normal" or "small" + size: string; + // A coefficient style number allows the student to use - for -1 and an empty string to mean 1. + coefficient: boolean; + // Whether to right-align the text or not // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable + rightAlign?: boolean; + // Always false. Not used for this widget static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" + // Used by examples, maybe not used and should be removed in the future + // see TODO in numeric-input + answerForms?: ReadonlyArray; +}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + // Translatable Display; A description for why this answer is correct, wrong, or ungraded + message: string; + // The expected answer + value: number; + // Whether this answer is "correct", "wrong", or "ungraded" + status: string; + // The forms available for this answer. Options: "integer, ""decimal", "proper", "improper", "mixed", or "pi" // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; + answerForms?: ReadonlyArray; + // Whether we should check the answer strictly against the the configured answerForms (strict = true) + // or include the set of default answerForms (strict = false). + strict: boolean; + // A range of error +/- the value + // NOTE: perseus_data.go says this is non-nullable even though we handle null values. + maxError: number | null | undefined; + // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: "required", "correct", or "enforced" + simplify: string | null | undefined; +}`,signature:{properties:[{key:"message",value:{name:"string",required:!0}},{key:"value",value:{name:"number",required:!0}},{key:"status",value:{name:"string",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"union",raw:`| "integer" +| "mixed" +| "improper" +| "proper" +| "decimal" +| "percent" +| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}],raw:"ReadonlyArray",required:!1}},{key:"strict",value:{name:"boolean",required:!0}},{key:"maxError",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"simplify",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"labelText",value:{name:"string",required:!0}},{key:"size",value:{name:"string",required:!0}},{key:"coefficient",value:{name:"boolean",required:!0}},{key:"rightAlign",value:{name:"boolean",required:!1}},{key:"static",value:{name:"boolean",required:!0}},{key:"answerForms",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + simplify: + | "required" + | "correct" + | "enforced" + | "optional" + | null + | undefined; + name: MathFormat; +}`,signature:{properties:[{key:"simplify",value:{name:"union",raw:`| "required" +| "correct" +| "enforced" +| "optional" +| null +| undefined`,elements:[{name:"literal",value:'"required"'},{name:"literal",value:'"correct"'},{name:"literal",value:'"enforced"'},{name:"literal",value:'"optional"'},{name:"null"},{name:"undefined"}],required:!0}},{key:"name",value:{name:"union",raw:`| "integer" +| "mixed" +| "improper" +| "proper" +| "decimal" +| "percent" +| "pi"`,elements:[{name:"literal",value:'"integer"'},{name:"literal",value:'"mixed"'},{name:"literal",value:'"improper"'},{name:"literal",value:'"proper"'},{name:"literal",value:'"decimal"'},{name:"literal",value:'"percent"'},{name:"literal",value:'"pi"'}],required:!0}}]}}],raw:"ReadonlyArray",required:!1}}]},alias:"PerseusNumericInputRubric"}}],returns:{type:{name:"union",raw:`| { + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; + } +| { + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; + }`,elements:[{name:"signature",type:"object",raw:`{ + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"focusInputPath",docblock:null,modifiers:[],params:[],returns:null},{name:"blurInputPath",docblock:null,modifiers:[],params:[],returns:null},{name:"getInputPaths",docblock:null,modifiers:[],params:[],returns:null},{name:"getGrammarTypeForPath",docblock:null,modifiers:[],params:[{name:"inputPath",optional:!1,type:null}],returns:null},{name:"setInputValue",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:null},{name:"newValue",optional:!1,type:null},{name:"cb",optional:!1,type:null}],returns:null},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"signature",type:"object",raw:`{ + currentValue: string; +}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}}}},{name:"handleChange",docblock:null,modifiers:[],params:[{name:"newValue",optional:!1,type:null},{name:"cb",optional:!1,type:null}],returns:null},{name:"_handleFocus",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleBlur",docblock:null,modifiers:[],params:[],returns:null}],displayName:"NumericInput",props:{currentValue:{defaultValue:{value:'""',computed:!1},required:!1},size:{defaultValue:{value:'"normal"',computed:!1},required:!1},rightAlign:{defaultValue:{value:"false",computed:!1},required:!1},apiOptions:{defaultValue:{value:`{ + isArticle: false, + isMobile: false, + onFocusChange: function () {}, + GroupMetadataEditor: StubTagEditor, + showAlignmentOptions: false, + readOnly: false, + groupAnnotator: function (): null { + return null; + }, + baseElements: { + Link: ( + props: any, + ): React.ReactElement> => { + return ; + }, + }, + setDrawingAreaAvailable: function () {}, + canScrollPage: false, + crossOutEnabled: false, + editorChangeDelay: 0, +}`,computed:!1},required:!1},coefficient:{defaultValue:{value:"false",computed:!1},required:!1},answerForms:{defaultValue:{value:"[]",computed:!1},required:!1},labelText:{defaultValue:{value:'""',computed:!1},required:!1},linterContext:{defaultValue:{value:"linterContextDefault",computed:!0},required:!1}}};function H(t=0){return{type:"points",earned:t,total:t,message:null}}function be(t,e,r,n){let a;return e==="start"&&n==="start"?a=Range.START_TO_START:e==="start"&&n==="end"?a=Range.END_TO_START:e==="end"&&n==="start"?a=Range.START_TO_END:a=Range.END_TO_END,t.compareBoundaryPoints(a,r)}function Ft(t,e){const r=t.cloneRange();return r.setEnd(e.endContainer,e.endOffset),r}function St(t,e){return!(be(t,"end",e,"start")<0||be(e,"end",t,"start")<0)}function Yu(t,e){return be(t,"start",e,"start")<=0&&be(t,"end",e,"end")>=0}function Qu(t,e){if(!St(t,e))return null;const r=be(t,"start",e,"start")>0?t:e,n=be(t,"end",e,"end")<0?t:e;return Ft(r,n)}function Ju(t,e){if(!St(t,e))return null;const r=be(t,"start",e,"start")<0?t:e,n=be(t,"end",e,"end")>0?t:e;return Ft(r,n)}function Qa(t,e,r,n,a){let i=-1,s=n,o=a,l=0;for(;s<=o;){if(l++,l>e.length*2)throw new Error(`Assertion error: Binary search isn't terminating? lower=${s}, upper=${o}`);const u=Math.floor((s+o)/2);r==="first"?be(e[u],"end",t,"start")<=0?s=u+1:(i=u,o=u-1):be(e[u],"start",t,"end")>=0?o=u-1:(i=u,s=u+1)}return i}function Zu(t,e){const r=Qa(t,e,"first",0,e.length-1);if(r<0)return null;const n=Qa(t,e,"last",r,e.length-1);return n<0?null:[r,n]}function ed(t,e){const r={};let n=e.domRange,a=e.firstWordIndex,i=e.lastWordIndex;for(const u of Object.keys(t)){const y=t[u],m=Ju(y.domRange,n);m?(n=m,a=Math.min(y.firstWordIndex,a),i=Math.max(y.lastWordIndex,i)):r[u]=y}const s={firstWordIndex:a,lastWordIndex:i,domRange:n},o=Object.keys(r),l=td(o);return r[l]=s,r}function rd(t,e,r){for(const l of Object.keys(t)){const u=t[l].domRange;if(Yu(u,r))return null}const n=Zu(r,e);if(!n)return null;const[a,i]=n,s=e[a],o=e[i];return{firstWordIndex:a,lastWordIndex:i,domRange:Ft(s,o)}}function td(t){const e=`${new Date().getTime()}`;if(!t.includes(e))return e;let r=0,n;do n=`${e}-${r}`,r++;while(t.includes(n));return n}function nd(t,e){const{firstWordIndex:r,lastWordIndex:n}=t.range,a=e[r];if(!a)throw new Be(`first word index ${a} is out of bounds: must be 0–${e.length-1} inclusive`,Te.InvalidInput,{metadata:{firstWord:a,wordRanges:JSON.stringify(e)}});const i=e[n];if(!i)throw new Be(`last word index ${i} is out of bounds: must be 0–${e.length-1} inclusive`,Te.InvalidInput,{metadata:{lastWord:i,wordRanges:JSON.stringify(e)}});return{firstWordIndex:r,lastWordIndex:n,domRange:Ft(a,i)}}function ad(t){const{firstWordIndex:e,lastWordIndex:r}=t;return{range:{type:"word-indexes",firstWordIndex:e,lastWordIndex:r}}}function nn(t,e){return{left:t.left-e.left,top:t.top-e.top}}function bs({left:t,top:e,width:r,height:n},a){return{...nn({left:t,top:e},a),width:r,height:n}}function id(t){const e=[];return vs(t.commonAncestorContainer,t,e),e}function vs(t,e,r){const n=new Range;if(n.selectNodeContents(t),t.nodeType===Node.TEXT_NODE){const a=Qu(e,n);a&&sd(t,a,r)}else if(t.nodeType===Node.ELEMENT_NODE){if(!St(e,n))return;for(const a of Array.from(t.childNodes))vs(a,e,r)}}function sd(t,e,r){const n=t.parentElement,a=window.getComputedStyle(n);let i=null;if(typeof a.lineHeight=="string"&&a.lineHeight.endsWith("px")){const o=parseFloat(a.lineHeight);isNaN(o)||(i=o)}const s=Array.from(e.getClientRects());for(const o of s){const l={left:o.left,top:o.top,height:o.height,width:o.width};if(i!==null){const u=i-l.height;l.top-=u,l.height=i}r.push(l)}}class fs extends v.PureComponent{constructor(){super(...arguments),this.state={cachedHighlightRects:this._computeRects(this.props),tooltipIsHovered:!1}}UNSAFE_componentWillReceiveProps(e){(this.props.highlight!==e.highlight||this.props.offsetParent!==e.offsetParent)&&this.setState({cachedHighlightRects:this._computeRects(e)})}_computeRects(e){const{highlight:r,offsetParent:n}=e,a=id(r.domRange),{left:i,top:s}=n.getBoundingClientRect();return a.map(l=>bs(l,{left:i,top:s}))}_rectIsHovered(e,r){const n=nn(r,{left:e.left,top:e.top});return 0<=n.left&&n.leftthis._rectIsHovered(o,s))}render(){const e=this.state.cachedHighlightRects;return d("div",{children:e.map((r,n)=>d("div",{className:x.css(od.highlightRect),style:{position:"absolute",width:r.width,height:r.height,top:r.top,left:r.left,zIndex:this.props.zIndexes.belowContent}},n))})}}const od=x.StyleSheet.create({highlightRect:{background:"#fffabe"}});fs.__docgenInfo={description:"",methods:[{name:"_computeRects",docblock:`Compute the set of rectangles that cover the highlighted content, with +coordinates relative to the offset parent. That way, we can use them +for CSS positioning.`,modifiers:[],params:[{name:"props",optional:!1,type:{name:"signature",type:"object",raw:`{ + // The DOMHighlight to render. + highlight: DOMHighlight; + // A unique key corresponding to the given \`highlight\`. + highlightKey: string; + // This component's \`offsetParent\` element, which is the nearest ancestor + // with \`position: relative\`. This will enable us to choose the correct + // CSS coordinates to align highlights and tooltips with the target + // content. + offsetParent: Element; + // The z-indexes to use when rendering tooltips above content, and + // highlights below content. + zIndexes: ZIndexes; +}`,signature:{properties:[{key:"highlight",value:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},required:!0}},{key:"highlightKey",value:{name:"string",required:!0}},{key:"offsetParent",value:{name:"Element",required:!0}},{key:"zIndexes",value:{name:"signature",type:"object",raw:`{ + belowContent: number; +}`,signature:{properties:[{key:"belowContent",value:{name:"number",required:!0}}]},required:!0}}]},alias:"Props"}}],returns:{type:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`Position & { + width: number; + height: number; +}`,elements:[{name:"signature",type:"object",raw:`{ + left: number; + top: number; +}`,signature:{properties:[{key:"left",value:{name:"number",required:!0}},{key:"top",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ + width: number; + height: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]}}]}],raw:"ReadonlyArray"}},description:`Compute the set of rectangles that cover the highlighted content, with +coordinates relative to the offset parent. That way, we can use them +for CSS positioning.`},{name:"_rectIsHovered",docblock:`Return whether the given mouse position (coordinates relative to this +component's offset parent) is hovering over the given rectangle +(coordinates also relative to this component's offset parent).`,modifiers:[],params:[{name:"rect",optional:!1,type:{name:"intersection",raw:`Position & { + width: number; + height: number; +}`,elements:[{name:"signature",type:"object",raw:`{ + left: number; + top: number; +}`,signature:{properties:[{key:"left",value:{name:"number",required:!0}},{key:"top",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ + width: number; + height: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]}}],alias:"Rect"}},{name:"mouseOffsetPosition",optional:!1,type:{name:"signature",type:"object",raw:`{ + left: number; + top: number; +}`,signature:{properties:[{key:"left",value:{name:"number",required:!0}},{key:"top",value:{name:"number",required:!0}}]},alias:"Position"}}],returns:{type:{name:"boolean"}},description:`Return whether the given mouse position (coordinates relative to this +component's offset parent) is hovering over the given rectangle +(coordinates also relative to this component's offset parent).`},{name:"isHovered",docblock:`Return whether the given mouse position (coordinates relative to the +viewport) is hovering over this highlight.`,modifiers:[],params:[{name:"mouseClientPosition",optional:!0,type:{name:"union",raw:"Position | null",elements:[{name:"signature",type:"object",raw:`{ + left: number; + top: number; +}`,signature:{properties:[{key:"left",value:{name:"number",required:!0}},{key:"top",value:{name:"number",required:!0}}]}},{name:"null"}]}}],returns:{type:{name:"boolean"}},description:`Return whether the given mouse position (coordinates relative to the +viewport) is hovering over this highlight.`}],displayName:"HighlightRenderer",props:{highlight:{required:!0,tsType:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]}},description:""},highlightKey:{required:!0,tsType:{name:"string"},description:""},offsetParent:{required:!0,tsType:{name:"Element"},description:""},zIndexes:{required:!0,tsType:{name:"signature",type:"object",raw:`{ + belowContent: number; +}`,signature:{properties:[{key:"belowContent",value:{name:"number",required:!0}}]}},description:""}}};class ia extends v.PureComponent{_getFocusRect(){const{focusNode:e,focusOffset:r,offsetParent:n}=this.props,a=document.createRange();a.setStart(e,r),a.setEnd(e,r);const i=a.getClientRects()[0];if(!i)return Zn.log('[Highlighting] Known bug: Could not determine the focus position, so did not show an "Add Highlight" tooltip. https://app.asana.com/0/329800276300868/413878480039713 (see also /r/asana-links)'),null;const{left:s,top:o}=n.getBoundingClientRect();return bs({left:i.left,top:i.top,width:i.width,height:i.height},{left:s,top:o})}render(){const e=this._getFocusRect();if(!e)return null;const r=d("div",{className:x.css(ld.tooltipLabel),onClick:this.props.onClick,children:this.props.label}),n={position:"absolute",left:e.left,top:`calc(${Math.round(e.top)}px + 0.95em)`,height:0};return d("div",{style:n,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave,children:d(Qn,{content:r,opened:!0,children:d("div",{})})})}}const ld=x.StyleSheet.create({tooltipLabel:{userSelect:"none",fontFamily:'"Lato", sans-serif',padding:`10px ${oe.medium_16}px`,cursor:"pointer"}});ia.__docgenInfo={description:"",methods:[{name:"_getFocusRect",docblock:null,modifiers:[],params:[],returns:{type:{name:"union",raw:"Rect | null | undefined",elements:[{name:"intersection",raw:`Position & { + width: number; + height: number; +}`,elements:[{name:"signature",type:"object",raw:`{ + left: number; + top: number; +}`,signature:{properties:[{key:"left",value:{name:"number",required:!0}},{key:"top",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ + width: number; + height: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]}}]},{name:"null"},{name:"undefined"}]}}}],displayName:"HighlightTooltip",props:{label:{required:!0,tsType:{name:"string"},description:""},onClick:{required:!0,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},onMouseEnter:{required:!1,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},onMouseLeave:{required:!1,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},focusNode:{required:!0,tsType:{name:"Node"},description:""},focusOffset:{required:!0,tsType:{name:"number"},description:""},offsetParent:{required:!0,tsType:{name:"Element"},description:""}}};const pa=class pa extends v.PureComponent{constructor(){super(...arguments),this.state={hoveredHighlightKey:null,hoveringTooltipFor:null},this._highlightRenderers={},this._handleMouseMove=e=>{const r={left:e.clientX,top:e.clientY},n=this._getHoveredHighlightKey(r);this.setState({hoveredHighlightKey:n})}}componentDidMount(){this._updateEditListeners(!1,this.props.editable)}UNSAFE_componentWillReceiveProps(e){this._updateEditListeners(this.props.editable,e.editable),this.state.hoveredHighlightKey!=null&&!(this.state.hoveredHighlightKey in e.highlights)&&this.setState({hoveredHighlightKey:null}),this.state.hoveringTooltipFor!=null&&!(this.state.hoveringTooltipFor in e.highlights)&&this.setState({hoveringTooltipFor:null})}componentWillUnmount(){this._updateEditListeners(this.props.editable,!1)}_updateEditListeners(e,r){!e&&r?window.addEventListener("mousemove",this._handleMouseMove):e&&!r&&(window.removeEventListener("mousemove",this._handleMouseMove),this.setState({hoveredHighlightKey:null,hoveringTooltipFor:null}))}_getHoveredHighlightKey(e){const{hoveringTooltipFor:r}=this.state;return typeof r=="string"?r:Object.keys(this.props.highlights).find(a=>{const i=this._highlightRenderers[a];return i&&i.isHovered(e)})}_renderTooltip(){const{hoveredHighlightKey:e}=this.state;if(e==null)return null;const r=this.props.highlights[e];return d(ia,{label:this.context.strings.removeHighlight,focusNode:r.domRange.endContainer,focusOffset:r.domRange.endOffset,offsetParent:this.props.offsetParent,onClick:()=>this.props.onRemoveHighlight(e),onMouseEnter:()=>this.setState({hoveringTooltipFor:e}),onMouseLeave:()=>this.setState({hoveringTooltipFor:null})})}render(){return f("div",{children:[Object.keys(this.props.highlights).map(e=>d(fs,{ref:r=>{r?this._highlightRenderers[e]=r:delete this._highlightRenderers[e]},highlight:this.props.highlights[e],highlightKey:e,offsetParent:this.props.offsetParent,zIndexes:this.props.zIndexes},e)),this.props.editable&&this._renderTooltip()]})}};pa.contextType=S;let ot=pa;ot.__docgenInfo={description:"",methods:[{name:"_updateEditListeners",docblock:`Given whether we were previously listening to mousemove events, and +whether we will now listen to mousemove events, add or remove the +listener accordingly.`,modifiers:[],params:[{name:"wasListening",optional:!1,type:{name:"boolean"}},{name:"willListen",optional:!1,type:{name:"boolean"}}],returns:null,description:`Given whether we were previously listening to mousemove events, and +whether we will now listen to mousemove events, add or remove the +listener accordingly.`},{name:"_handleMouseMove",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"MouseEvent",alias:"MouseEvent"}}],returns:null},{name:"_getHoveredHighlightKey",docblock:null,modifiers:[],params:[{name:"mouseClientPosition",optional:!1,type:{name:"signature",type:"object",raw:`{ + left: number; + top: number; +}`,signature:{properties:[{key:"left",value:{name:"number",required:!0}},{key:"top",value:{name:"number",required:!0}}]},alias:"Position"}}],returns:{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]}}},{name:"_renderTooltip",docblock:null,modifiers:[],params:[],returns:{type:{name:"union",raw:"null | React.ReactNode",elements:[{name:"null"},{name:"ReactReactNode",raw:"React.ReactNode"}]}}}],displayName:"HighlightSetRenderer",props:{editable:{required:!0,tsType:{name:"boolean"},description:""},highlights:{required:!0,tsType:{name:"signature",type:"object",raw:`{ + [key: string]: DOMHighlight; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},required:!0}}]}},description:""},offsetParent:{required:!0,tsType:{name:"Element"},description:""},onRemoveHighlight:{required:!0,tsType:{name:"signature",type:"function",raw:"(highlightKey: string) => unknown",signature:{arguments:[{type:{name:"string"},name:"highlightKey"}],return:{name:"unknown"}}},description:""},zIndexes:{required:!0,tsType:{name:"signature",type:"object",raw:`{ + belowContent: number; +}`,signature:{properties:[{key:"belowContent",value:{name:"number",required:!0}}]}},description:""}}};class ws extends v.PureComponent{constructor(){super(...arguments),this.state={mouseState:"up",trackedSelection:null},this._handleSelectionChange=()=>{this._updateTrackedSelection(),this.state.mouseState==="down"&&this.setState({mouseState:"down-and-selecting"})},this._handleMouseDown=()=>{this.setState({mouseState:"down"})},this._handleMouseUp=()=>{this.setState({mouseState:"up"})}}componentDidMount(){this._updateListeners(!1,this.props.enabled)}componentDidUpdate(e){this.props.buildHighlight!==e.buildHighlight&&this._updateTrackedSelection(),this._updateListeners(e.enabled,this.props.enabled)}componentWillUnmount(){this._updateListeners(this.props.enabled,!1)}_updateListeners(e,r){!e&&r?(window.addEventListener("mousedown",this._handleMouseDown),window.addEventListener("mouseup",this._handleMouseUp),document.addEventListener("selectionchange",this._handleSelectionChange)):e&&!r&&(window.removeEventListener("mousedown",this._handleMouseDown),window.removeEventListener("mouseup",this._handleMouseUp),document.removeEventListener("selectionchange",this._handleSelectionChange),this.setState({mouseState:"up",trackedSelection:null}))}_computeFocusAndRange(){const e=document.getSelection();if(!e||e.rangeCount===0)return null;const r=e.getRangeAt(0);if(r.collapsed)return null;const n=e.focusNode,a=e.focusOffset;return{focusNode:n,focusOffset:a,range:r}}_updateTrackedSelection(){const e=this._computeFocusAndRange();if(!e){this.setState({trackedSelection:null});return}const{focusNode:r,focusOffset:n,range:a}=e,i=this.props.buildHighlight(a);if(!i){this.setState({trackedSelection:null});return}const s={focusNode:r,focusOffset:n,proposedHighlight:i};this.setState({trackedSelection:s})}render(){const{mouseState:e,trackedSelection:r}=this.state,n=e==="down-and-selecting";return this.props.children?d("div",{children:this.props.children(r,n)}):null}}ws.__docgenInfo={description:"",methods:[{name:"_updateListeners",docblock:null,modifiers:[],params:[{name:"wasListening",optional:!1,type:{name:"boolean"}},{name:"willListen",optional:!1,type:{name:"boolean"}}],returns:null},{name:"_computeFocusAndRange",docblock:`Get the current selection focus and range, if present and non-collapsed. + +Otherwise, if there is no current selection or it's collapsed, return +null.`,modifiers:[],params:[],returns:{type:{name:"union",raw:`| { + focusNode: Node; + focusOffset: number; + range: DOMRange; + } +| null +| undefined`,elements:[{name:"signature",type:"object",raw:`{ + focusNode: Node; + focusOffset: number; + range: DOMRange; +}`,signature:{properties:[{key:"focusNode",value:{name:"Node",required:!0}},{key:"focusOffset",value:{name:"number",required:!0}},{key:"range",value:{name:"Range",required:!0}}]}},{name:"null"},{name:"undefined"}]}},description:`Get the current selection focus and range, if present and non-collapsed. + +Otherwise, if there is no current selection or it's collapsed, return +null.`},{name:"_updateTrackedSelection",docblock:"Compute and update the TrackedSelection to reflect the document state.",modifiers:[],params:[],returns:{type:{name:"void"}},description:"Compute and update the TrackedSelection to reflect the document state."},{name:"_handleSelectionChange",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleMouseDown",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleMouseUp",docblock:null,modifiers:[],params:[],returns:null}],displayName:"SelectionTracker",props:{buildHighlight:{required:!0,tsType:{name:"signature",type:"function",raw:"(domRange: DOMRange) => DOMHighlight | null | undefined",signature:{arguments:[{type:{name:"Range",required:!0},name:"domRange"}],return:{name:"union",raw:"DOMHighlight | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]}},{name:"null"},{name:"undefined"}]}}},description:""},children:{required:!1,tsType:{name:"signature",type:"function",raw:`( + trackedSelection: TrackedSelection | null | undefined, + userIsMouseSelecting: boolean, +) => React.ReactElement`,signature:{arguments:[{type:{name:"union",raw:"TrackedSelection | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + // The focus of the current selection - that is, the boundary point of the + // selection that the user is dragging around. + // + // We don't simply track the full \`Selection\` object, which contains all of + // this focus and range information and more, because the browser reuses + // the global \`Selection\` object and mutates it, which breaks our + // \`shouldComponentUpdate\` checks. + focusNode: Node; + focusOffset: number; + // If the current selection maps to a valid new highlight, we cache the + // highlight object here. + proposedHighlight: DOMHighlight; +}`,signature:{properties:[{key:"focusNode",value:{name:"Node",required:!0}},{key:"focusOffset",value:{name:"number",required:!0}},{key:"proposedHighlight",value:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},required:!0}}]}},{name:"null"},{name:"undefined"}]},name:"trackedSelection"},{type:{name:"boolean"},name:"userIsMouseSelecting"}],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}}},description:""},enabled:{required:!0,tsType:{name:"boolean"},description:""}}};const ca=class ca extends v.PureComponent{_handleAddHighlight(e){this.props.onAddHighlight(e);const r=document.getSelection();r&&r.collapseToEnd()}_selectionIsValid(e){if(!e)return!1;const{contentNode:r}=this.props,n=new Range;n.selectNodeContents(r);const a=new Range;return a.setStart(e.focusNode,e.focusOffset),a.collapse(!0),St(n,a)}render(){return d(ws,{buildHighlight:this.props.buildHighlight,enabled:this.props.editable,children:(e,r)=>f("div",{children:[d(ot,{editable:this.props.editable&&!this._selectionIsValid(e),highlights:this.props.highlights,offsetParent:this.props.offsetParent,onRemoveHighlight:this.props.onRemoveHighlight,zIndexes:this.props.zIndexes}),this._selectionIsValid(e)&&!r&&d(ia,{label:this.context.strings.addHighlight,onClick:()=>this._handleAddHighlight(e.proposedHighlight),focusNode:e.focusNode,focusOffset:e.focusOffset,offsetParent:this.props.offsetParent})]})})}};ca.contextType=S;let lt=ca;lt.__docgenInfo={description:"",methods:[{name:"_handleAddHighlight",docblock:null,modifiers:[],params:[{name:"highlightToAdd",optional:!1,type:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},alias:"DOMHighlight"}}],returns:null},{name:"_selectionIsValid",docblock:null,modifiers:[],params:[{name:"trackedSelection",optional:!0,type:{name:"union",raw:"TrackedSelection | null",elements:[{name:"signature",type:"object",raw:`{ + // The focus of the current selection - that is, the boundary point of the + // selection that the user is dragging around. + // + // We don't simply track the full \`Selection\` object, which contains all of + // this focus and range information and more, because the browser reuses + // the global \`Selection\` object and mutates it, which breaks our + // \`shouldComponentUpdate\` checks. + focusNode: Node; + focusOffset: number; + // If the current selection maps to a valid new highlight, we cache the + // highlight object here. + proposedHighlight: DOMHighlight; +}`,signature:{properties:[{key:"focusNode",value:{name:"Node",required:!0}},{key:"focusOffset",value:{name:"number",required:!0}},{key:"proposedHighlight",value:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},required:!0}}]}},{name:"null"}]}}],returns:{type:{name:"unknown"}}}],displayName:"HighlightingUI",props:{buildHighlight:{required:!0,tsType:{name:"signature",type:"function",raw:"(range: DOMRange) => DOMHighlight | null | undefined",signature:{arguments:[{type:{name:"Range",required:!0},name:"range"}],return:{name:"union",raw:"DOMHighlight | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]}},{name:"null"},{name:"undefined"}]}}},description:""},contentNode:{required:!0,tsType:{name:"Node"},description:""},editable:{required:!0,tsType:{name:"boolean"},description:""},highlights:{required:!0,tsType:{name:"signature",type:"object",raw:`{ + [key: string]: DOMHighlight; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},required:!0}}]}},description:""},offsetParent:{required:!0,tsType:{name:"Element"},description:""},onAddHighlight:{required:!0,tsType:{name:"signature",type:"function",raw:"(range: DOMHighlight) => unknown",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]}},name:"range"}],return:{name:"unknown"}}},description:""},onRemoveHighlight:{required:!0,tsType:{name:"signature",type:"function",raw:"(highlightKey: string) => unknown",signature:{arguments:[{type:{name:"string"},name:"highlightKey"}],return:{name:"unknown"}}},description:""},zIndexes:{required:!0,tsType:{name:"signature",type:"object",raw:`{ + belowContent: number; +}`,signature:{properties:[{key:"belowContent",value:{name:"number",required:!0}}]}},description:""}}};class ks extends v.PureComponent{componentDidMount(){this._sendWordsUpdate()}componentDidUpdate(){this._sendWordsUpdate()}_sendWordsUpdate(){this.props.onWordsUpdate(this._getWordRanges())}_getWordRanges(){const e=this._container;if(!e)throw new Be("invariant violation: `this._container` is not defined, but this method is only called after mount/update",Te.NotAllowed);const r=e.ownerDocument.createTreeWalker(e,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,()=>NodeFilter.FILTER_ACCEPT,!1),n=[];let a=null;for(;r.nextNode();){const i=r.currentNode;if(i.nodeType===Node.ELEMENT_NODE)getComputedStyle(i).display!=="inline"&&(a=null);else if(i.nodeType===Node.TEXT_NODE){const s=i.nodeValue,o=/\S+/g;let l,u=null;for(;(l=o.exec(s))!==null;){const y=l.index,m=l.index+l[0].length;let h;y===0&&a?(h=a,h.setEnd(i,m)):(h=i.ownerDocument.createRange(),h.setStart(i,y),h.setEnd(i,m),n.push(h)),m===s.length&&(u=h)}a=u}}return n}render(){return d("div",{ref:e=>this._container=e,children:this.props.children})}}ks.__docgenInfo={description:"",methods:[{name:"_sendWordsUpdate",docblock:null,modifiers:[],params:[],returns:null},{name:"_getWordRanges",docblock:null,modifiers:[],params:[],returns:{type:{name:"ReadonlyArray",elements:[{name:"Range"}],raw:"ReadonlyArray"}}}],displayName:"WordIndexer",props:{children:{required:!1,tsType:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]},description:""},onWordsUpdate:{required:!0,tsType:{name:"signature",type:"function",raw:"(wordRanges: ReadonlyArray) => unknown",signature:{arguments:[{type:{name:"ReadonlyArray",elements:[{name:"Range"}],raw:"ReadonlyArray"},name:"wordRanges"}],return:{name:"unknown"}}},description:""}}};class qs extends v.PureComponent{constructor(){super(...arguments),this.state={wordRanges:[]},this._handleAddHighlight=e=>{const r=ed(this._getDOMHighlights(),e),n={};for(const a of Object.keys(r))n[a]=ad(r[a]);this.props.onSerializedHighlightsUpdate(n)},this._handleRemoveHighlight=e=>{const{serializedHighlights:r}=this.props,n={...r};delete n[e],this.props.onSerializedHighlightsUpdate(n)},this._handleWordsUpdate=e=>{this.setState({wordRanges:e})}}_buildHighlight(e){return rd(this._getDOMHighlights(),this.state.wordRanges,e)}_getDOMHighlights(){const{serializedHighlights:e}=this.props,{wordRanges:r}=this.state,n={};for(const a of Object.keys(e))n[a]=nd(e[a],r);return n}render(){const e=this._getDOMHighlights(),r=n=>this._buildHighlight(n);return f("div",{className:x.css(Ja.container),ref:n=>this._container=n,children:[d("div",{children:this.props.enabled&&this._container&&this._content&&d(lt,{buildHighlight:r,contentNode:this._content,editable:this.props.editable,highlights:e,offsetParent:this._container,zIndexes:{belowContent:0},onAddHighlight:this._handleAddHighlight,onRemoveHighlight:this._handleRemoveHighlight})}),d("div",{className:x.css(Ja.content),ref:n=>this._content=n,children:d(ks,{onWordsUpdate:this._handleWordsUpdate,children:this.props.children})})]})}}const Ja=x.StyleSheet.create({container:{position:"relative",zIndex:0},content:{position:"relative",zIndex:1}});qs.__docgenInfo={description:"",methods:[{name:"_buildHighlight",docblock:null,modifiers:[],params:[{name:"highlightRange",optional:!1,type:{name:"Range",alias:"DOMRange"}}],returns:{type:{name:"union",raw:"DOMHighlight | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]}},{name:"null"},{name:"undefined"}]}}},{name:"_getDOMHighlights",docblock:`Take the highlights from props, and deserialize them into DOMHighlights, +according to the latest cache of word ranges.`,modifiers:[],params:[],returns:{type:{name:"signature",type:"object",raw:`{ + [key: string]: DOMHighlight; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},required:!0}}]}}},description:`Take the highlights from props, and deserialize them into DOMHighlights, +according to the latest cache of word ranges.`},{name:"_handleAddHighlight",docblock:"Add the given DOMHighlight to the current set.",modifiers:[],params:[{name:"highlight",optional:!1,type:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, both in terms of + // the first and last word, and in terms of the DOM for caching purposes. + firstWordIndex: number; + lastWordIndex: number; + // TODO(mdr): Things like color will go here, too :) + domRange: DOMRange; +}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},alias:"DOMHighlight"}}],returns:null,description:"Add the given DOMHighlight to the current set."},{name:"_handleRemoveHighlight",docblock:`Remove the given highlight from the list, and call our callback with the +new set of highlights.`,modifiers:[],params:[{name:"keyToRemove",optional:!1,type:{name:"string"}}],returns:null,description:`Remove the given highlight from the list, and call our callback with the +new set of highlights.`},{name:"_handleWordsUpdate",docblock:`When our WordIndexer sends us a new cache of word ranges, store it in +our component state.`,modifiers:[],params:[{name:"wordRanges",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"Range"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}}],returns:null,description:`When our WordIndexer sends us a new cache of word ranges, store it in +our component state.`}],displayName:"HighlightableContent",props:{children:{required:!1,tsType:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]},description:""},editable:{required:!0,tsType:{name:"boolean"},description:""},enabled:{required:!0,tsType:{name:"boolean"},description:""},onSerializedHighlightsUpdate:{required:!0,tsType:{name:"signature",type:"function",raw:`( + serializedHighlights: SerializedHighlightSet, +) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + [key: string]: SerializedHighlight; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, in a + // DOM-independent format. + // TODO(mdr): Things like color will go here, too :) + range: SerializedRange; +}`,signature:{properties:[{key:"range",value:{name:"signature",type:"object",raw:`{ + type: "word-indexes"; + firstWordIndex: number; + lastWordIndex: number; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"word-indexes"',required:!0}},{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},name:"serializedHighlights"}],return:{name:"unknown"}}},description:""},serializedHighlights:{required:!0,tsType:{name:"signature",type:"object",raw:`{ + [key: string]: SerializedHighlight; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, in a + // DOM-independent format. + // TODO(mdr): Things like color will go here, too :) + range: SerializedRange; +}`,signature:{properties:[{key:"range",value:{name:"signature",type:"object",raw:`{ + type: "word-indexes"; + firstWordIndex: number; + lastWordIndex: number; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"word-indexes"',required:!0}},{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},description:""}}};function sa(){return{currentRef:[],useRefs:!0,lastRef:0,firstSentenceRef:null,firstQuestionRef:null,lastFootnote:{id:0,text:""}}}class ud extends v.Component{constructor(){super(...arguments),this.getRefContent=()=>this.props.refContent}render(){return d("span",{style:As,children:"_"})}}class dd extends v.Component{render(){return d("span",{style:As,children:"_"})}}const $t=({id:t,number:e})=>{const{strings:r}=Jn();return d("span",{className:"perseus-sr-only",children:r[t]({number:e})},"alt-text")},Ts={newline:U.defaultRules.newline,paragraph:U.defaultRules.paragraph,escape:U.defaultRules.escape,passageFootnote:{order:U.defaultRules.escape.order+.1,match:U.inlineRegex(/^\^/),parse:(t,e,r)=>{const n=r.lastFootnote.id+1,a={id:n,text:n===1?"*":""+n};return r.lastFootnote.text==="*"&&(r.lastFootnote.text=""+r.lastFootnote.id),r.lastFootnote=a,a},react:(t,e,r)=>d("sup",{children:t.text},r.key)},refStart:{order:U.defaultRules.escape.order+.2,match:function(t){const e=/^\{\{/.exec(t);if(e){let r=2,n=0;for(;r0)n--,r++;else break;r++}return e[1]=t.slice(2,r),e}return null},parse:(t,e,r)=>{if(!r.useRefs)return{ref:null,refContent:null};const n=r.lastRef+1;r.lastRef=n,r.currentRef.push(n);const a=e("(“"+t[1]+`”) + +`,g.defaults({useRefs:!1},sa()));return{ref:n,refContent:a}},react:(t,e,r)=>{const n=t.ref;if(n==null)return null;const a=e(t.refContent,{});return d(ud,{ref:an+n,refContent:a},an+n)}},refEnd:{order:U.defaultRules.escape.order+.3,match:U.inlineRegex(/^\}\}/),parse:(t,e,r)=>r.useRefs?{ref:r.currentRef.pop()||null}:{ref:null},react:(t,e,r)=>t.ref!=null?d(dd,{ref:sn+t.ref},sn+t.ref):null},squareLabel:{order:U.defaultRules.escape.order+.4,match:U.inlineRegex(/^\[\[(\w+)\]\]( *)/),parse:(t,e,r)=>(r.firstQuestionRef||(r.firstQuestionRef=t[1]),{content:t[1],space:t[2].length>0}),react:(t,e,r)=>[d("span",{className:"perseus-passage-square-label",style:Za,"aria-hidden":"true",children:d("span",{style:yd,children:t.content})},"visual-square"),d($t,{id:"questionMarker",number:t.content},"alt-text"),t.space?" ":null]},circleLabel:{order:U.defaultRules.escape.order+.5,match:U.inlineRegex(/^\(\((\w+)\)\)( *)/),parse:(t,e,r)=>({content:t[1],space:t[2].length>0}),react:(t,e,r)=>[d("span",{className:"perseus-passage-circle-label",style:Za,"aria-hidden":!0,children:d("span",{style:md,children:t.content})},"visual-circle"),d($t,{id:"circleMarker",number:t.content},"alt-text"),t.space?" ":null]},squareBracketRef:{order:U.defaultRules.escape.order+.6,match:U.inlineRegex(/^\[(\d+)\]( *)/),parse:(t,e,r)=>(r.firstSentenceRef||(r.firstSentenceRef=t[1]),{content:t[1],space:t[2].length>0}),react:(t,e,r)=>[f("span",{className:"perseus-passage-bracket-label","aria-hidden":"true",children:["[",t.content,"]"]},"visual-brackets"),d($t,{id:"sentenceMarker",number:t.content},"alt-text"),t.space?" ":null]},highlight:{order:U.defaultRules.escape.order+.7,match:U.inlineRegex(/^{highlighting.start}(.+?){highlighting.end}/),parse:(t,e,r)=>({content:t[1]}),react:(t,e,r)=>[d("span",{className:"perseus-highlight",children:t.content},0)]},reviewHighlight:{order:U.defaultRules.escape.order+.7,match:U.inlineRegex(/^{review-highlighting.start}(.+?){review-highlighting.end}/),parse:(t,e,r)=>({content:t[1]}),react:(t,e,r)=>[d("span",{className:"perseus-review-highlight",children:t.content},0)]},strong:U.defaultRules.strong,u:U.defaultRules.u,em:U.defaultRules.em,del:U.defaultRules.del,text:{...U.defaultRules.text,react(t,e,r){return d("span",{children:t.content},r.key)}}},an="start-ref-",sn="end-ref-",As={display:"inline-block",width:0,visibility:"hidden"},Za={display:"inline",whiteSpace:"nowrap"},yd={display:"inline-block",color:"rgb(255, 255, 255)",backgroundColor:"rgb(90, 90, 90)",paddingLeft:10,paddingRight:10,userSelect:"none",WebkitUserSelect:"none"},md={display:"inline-block",color:"rgb(255, 255, 255)",backgroundColor:"rgb(90, 90, 90)",userSelect:"none",WebkitUserSelect:"none",width:22,height:22,borderRadius:"50%",textAlign:"center"},gd=U.parserFor(Ts),hd=(t,e)=>{e=e||{};const r=t+` + +`;return gd(r,g.extend(e,sa()))},pd=U.reactFor(U.ruleOutput(Ts,"react")),ge={parse:hd,output:pd,START_REF_PREFIX:an,END_REF_PREFIX:sn,getInitialParseState:sa};class Rs extends v.Component{measureLineHeight(){return this._line?this._line.clientHeight:0}render(){return d("div",{className:x.css(cd.measurer),"aria-hidden":"true",children:d("div",{ref:e=>this._line=e,className:"paragraph",children:"Line Height Measurement"})})}}const cd=x.StyleSheet.create({measurer:{position:"absolute",top:0,left:0,visibility:"hidden",zIndex:-1}}),vt=class vt extends v.Component{constructor(){super(...arguments),this.state={nLines:null,startLineNumbersAfter:0,stylesAreApplied:!1},this._handleSerializedHighlightsUpdate=e=>{this.props.onChange({highlights:e})}}static validate(){return H()}componentDidMount(){this._updateState(),this._onResize=g.throttle(()=>{var e;this.shouldRenderJipt()||((e=this._lineHeightMeasurerRef)==null||e.measureLineHeight(),this._updateState())},500),window.addEventListener("resize",this._onResize),this._stylesAppiedTimer=window.setTimeout(()=>{this.setState({stylesAreApplied:!0})},0)}shouldComponentUpdate(e,r){return!g.isEqual(this.props,e)||!g.isEqual(this.state,r)}componentDidUpdate(){this._updateState()}componentWillUnmount(){window.removeEventListener("resize",this._onResize),clearTimeout(this._stylesAppiedTimer)}_updateState(){this.shouldRenderJipt()||this.setState({nLines:this._measureLines(),startLineNumbersAfter:this._getInitialLineNumber()})}_measureLines(){const e=qr.findDOMNode(this._contentRef),r=_(e).height(),n=this._getLineHeight();return Math.round(r/n)}_getInitialLineNumber(){let e=!0;return this.props.findWidgets((n,a)=>a.type!=="passage"?!1:(n===this.props.widgetId&&(e=!1),e)).filter(Os).map(n=>n.getLineCount()).reduce((n,a)=>n+a,0)}_getLineHeight(){var e;return((e=this._lineHeightMeasurerRef)==null?void 0:e.measureLineHeight())||0}getLineCount(){return this.state.nLines!=null?this.state.nLines:this._measureLines()}_getStartRefLineNumber(e){const r=ge.START_REF_PREFIX+e,n=this.refs[r];if(!n)return null;const a=_(qr.findDOMNode(n));let i=a.next();i.length===0&&(i=a);const s=i.offset().top;return this.state.startLineNumbersAfter+1+this._convertPosToLineNumber(s)}_getEndRefLineNumber(e){const r=ge.END_REF_PREFIX+e,n=this.refs[r];if(!n)return null;const a=_(qr.findDOMNode(n));let i=a.prev();i.length===0&&(i=a);const s=i.height(),o=i.offset().top;let l=this._convertPosToLineNumber(o+s);return s===0&&(l+=1),this.state.startLineNumbersAfter+l}_convertPosToLineNumber(e){const r=qr.findDOMNode(this._contentRef),n=e-_(r).offset().top,a=this._getLineHeight();return Math.round(n/a)}_getRefContent(e){const r=ge.START_REF_PREFIX+e,n=this.refs[r];return n?n.getRefContent():null}getReference(e){const r=this._getStartRefLineNumber(e),n=this._getEndRefLineNumber(e);if(r==null||n==null)return null;const a=this._getRefContent(e);return{startLine:r,endLine:n,content:a}}getUserInput(){return null}simpleValidate(){return H()}_renderInstructions(e){const r=e.firstQuestionRef,n=e.firstSentenceRef,{strings:a}=this.context;let i="";r&&(i+=a.symbolPassage({questionSymbol:"[["+r+"]]",questionNumber:r})),n&&(i+=a.symbolQuestion({sentenceSymbol:"["+n+"]"}));const s=ge.parse(i);return d("div",{className:"perseus-widget-passage-instructions",children:ge.output(s)})}shouldRenderJipt(){const{JIPT:e}=fe();return e.useJIPT&&this.props.passageText.indexOf("crwdns")!==-1}_renderContent(e){const r=this.state.stylesAreApplied,n=!this.props.reviewModeRubric;return d(qs,{editable:n,enabled:r,onSerializedHighlightsUpdate:this._handleSerializedHighlightsUpdate,serializedHighlights:this.props.highlights,children:f("div",{ref:a=>this._contentRef=a,children:[d(Rs,{ref:a=>this._lineHeightMeasurerRef=a}),ge.output(e)]})})}_hasFootnotes(){const e=this.props.footnotes;return!/^\s*$/.test(e)}_renderFootnotes(){const e=this.props.footnotes,r=ge.parse(e);return ge.output(r)}render(){const{strings:e}=this.context;let r;const n=this.state.nLines;this.props.showLineNumbers&&n&&(r=g.range(1,n+1).map(u=>{const y=u+this.state.startLineNumbersAfter;if(y===4){const m=e.lineLabel;return d("span",{className:"line-marker",children:m},"line-marker")}return d("span",{children:y},u)}));const a=ge.getInitialParseState(),i=/("{1})([^"]*)("{1})/g,s=this.props.passageText.replace(i,"“$2”"),o=ge.parse(s,a),l=/\S/.test(this.props.passageTitle);return d("div",{children:f("div",{className:"perseus-widget-passage-container",children:[this._renderInstructions(a),f("div",{className:"perseus-widget-passage",children:[l&&d("h3",{className:"passage-title",children:d($,{content:this.props.passageTitle,linterContext:this.props.linterContext,strings:e})}),r&&d("div",{className:"line-numbers","aria-hidden":!0,children:r}),!l&&d("h3",{className:"perseus-sr-only",children:e.beginningPassage}),d("div",{className:"passage-text",children:this.shouldRenderJipt()?d($,{content:this.props.passageText,strings:e}):this._renderContent(o)}),this._hasFootnotes()&&[d("h4",{className:"perseus-sr-only",children:e.beginningFootnotes},"footnote-start"),d("div",{className:"footnotes",children:this._renderFootnotes()},"footnotes")],d("div",{className:"perseus-sr-only",children:e.endPassage})]})]})})}};vt.contextType=S,vt.defaultProps={passageTitle:"",passageText:"",footnotes:"",showLineNumbers:!0,highlights:{},linterContext:B};let Nr=vt;const bd={name:"passage",displayName:"Passage (SAT only)",hidden:!0,widget:Nr,transform:t=>g.pick(t,"passageTitle","passageText","footnotes","showLineNumbers"),isLintable:!0};Rs.__docgenInfo={description:"",methods:[{name:"measureLineHeight",docblock:null,modifiers:[],params:[],returns:{type:{name:"number"}}}],displayName:"LineHeightMeasurer"};Nr.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[],returns:null},{name:"_handleSerializedHighlightsUpdate",docblock:null,modifiers:[],params:[{name:"serializedHighlights",optional:!1,type:{name:"signature",type:"object",raw:`{ + [key: string]: SerializedHighlight; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // A range that specifies this highlight's target content, in a + // DOM-independent format. + // TODO(mdr): Things like color will go here, too :) + range: SerializedRange; +}`,signature:{properties:[{key:"range",value:{name:"signature",type:"object",raw:`{ + type: "word-indexes"; + firstWordIndex: number; + lastWordIndex: number; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"word-indexes"',required:!0}},{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]},alias:"SerializedHighlightSet"}}],returns:null},{name:"_updateState",docblock:`Line numbering + +These functions support passage line numbering, which is non-trivial +because we manually measure lines to support resizing as well as +continuing line numbers from previous passages.`,modifiers:[],params:[],returns:null,description:`Line numbering + +These functions support passage line numbering, which is non-trivial +because we manually measure lines to support resizing as well as +continuing line numbers from previous passages.`},{name:"_measureLines",docblock:null,modifiers:[],params:[],returns:{type:{name:"number"}}},{name:"_getInitialLineNumber",docblock:null,modifiers:[],params:[],returns:{type:{name:"number"}}},{name:"_getLineHeight",docblock:null,modifiers:[],params:[],returns:{type:{name:"number"}}},{name:"getLineCount",docblock:null,modifiers:[],params:[],returns:{type:{name:"number"}}},{name:"_getStartRefLineNumber",docblock:`Passage refs + +These are functions to support the passage refs inter-widgets feature +where other widgets can fetch the line numbers of a reference inside of +a passage. + +todo(matthewc): The refs are created by PassageMarkdown's refStart and refEnd, +somehow bubbling up to Passage's \`this.refs\`. This runs against +current best practices for refs by using string refs, but also +by breaking our expectation of explicit data flow.`,modifiers:[],params:[{name:"referenceNumber",optional:!1,type:{name:"number"}}],returns:{type:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]}},description:`Passage refs + +These are functions to support the passage refs inter-widgets feature +where other widgets can fetch the line numbers of a reference inside of +a passage. + +todo(matthewc): The refs are created by PassageMarkdown's refStart and refEnd, +somehow bubbling up to Passage's \`this.refs\`. This runs against +current best practices for refs by using string refs, but also +by breaking our expectation of explicit data flow.`},{name:"_getEndRefLineNumber",docblock:null,modifiers:[],params:[{name:"referenceNumber",optional:!1,type:{name:"number"}}],returns:{type:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]}}},{name:"_convertPosToLineNumber",docblock:null,modifiers:[],params:[{name:"absoluteVPos",optional:!1,type:{name:"number"}}],returns:{type:{name:"number"}}},{name:"_getRefContent",docblock:null,modifiers:[],params:[{name:"referenceNumber",optional:!1,type:{name:"number"}}],returns:{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]}}},{name:"getReference",docblock:null,modifiers:[],params:[{name:"referenceNumber",optional:!1,type:{name:"number"}}],returns:{type:{name:"union",raw:"Reference | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + startLine: number; + endLine: number; + content: string | null | undefined; +}`,signature:{properties:[{key:"startLine",value:{name:"number",required:!0}},{key:"endLine",value:{name:"number",required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"null"},{name:"undefined"}]}}},{name:"getUserInput",docblock:`Misc functions + +These are misc widget functions used for the widget API`,modifiers:[],params:[],returns:{type:{name:"null"}},description:`Misc functions + +These are misc widget functions used for the widget API`},{name:"simpleValidate",docblock:null,modifiers:[],params:[],returns:null},{name:"_renderInstructions",docblock:`Rendering + +Functions to render the passage widget.`,modifiers:[],params:[{name:"parseState",optional:!1,type:{name:"intersection",raw:`State & { + currentRef: number[]; + useRefs: boolean; + lastRef: number; + firstSentenceRef: string | null | undefined; + firstQuestionRef: string | null | undefined; + lastFootnote: { + id: number; + text: string; + }; +}`,elements:[{name:"State"},{name:"signature",type:"object",raw:`{ + currentRef: number[]; + useRefs: boolean; + lastRef: number; + firstSentenceRef: string | null | undefined; + firstQuestionRef: string | null | undefined; + lastFootnote: { + id: number; + text: string; + }; +}`,signature:{properties:[{key:"currentRef",value:{name:"Array",elements:[{name:"number"}],raw:"number[]",required:!0}},{key:"useRefs",value:{name:"boolean",required:!0}},{key:"lastRef",value:{name:"number",required:!0}},{key:"firstSentenceRef",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"firstQuestionRef",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"lastFootnote",value:{name:"signature",type:"object",raw:`{ + id: number; + text: string; +}`,signature:{properties:[{key:"id",value:{name:"number",required:!0}},{key:"text",value:{name:"string",required:!0}}]},required:!0}}]}}],alias:"ParseState"}}],returns:{type:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},description:`Rendering + +Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null,modifiers:[],params:[],returns:{type:{name:"boolean"}}},{name:"_renderContent",docblock:null,modifiers:[],params:[{name:"parsed",optional:!1,type:{name:"Array",elements:[{name:"SingleASTNode"}],raw:"Array",alias:"Array"}}],returns:{type:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}}},{name:"_hasFootnotes",docblock:null,modifiers:[],params:[],returns:{type:{name:"boolean"}}},{name:"_renderFootnotes",docblock:null,modifiers:[],params:[],returns:{type:{name:"ReactReactNode",raw:"React.ReactNode"}}}],displayName:"Passage",props:{passageTitle:{defaultValue:{value:'""',computed:!1},required:!1},passageText:{defaultValue:{value:'""',computed:!1},required:!1},footnotes:{defaultValue:{value:'""',computed:!1},required:!1},showLineNumbers:{defaultValue:{value:"true",computed:!1},required:!1},highlights:{defaultValue:{value:"{}",computed:!1},required:!1},linterContext:{defaultValue:{value:"linterContextDefault",computed:!0},required:!1}}};function Os(t){return t instanceof Nr}const ei="–",ft=class ft extends v.Component{constructor(){super(...arguments),this.displayName="PassageRef",this.state={lineRange:null,content:null},this.change=(...e)=>re.apply(this,e),this._deferredUpdateRange=()=>{g.defer(this._updateRange)},this._updateRange=()=>{const e=this.props.findWidgets("passage "+this.props.passageNumber).filter(Os)[0],r=e==null?void 0:e.getReference(this.props.referenceNumber);this._isMounted&&(r?this.setState({lineRange:[r.startLine,r.endLine],content:r.content}):this.setState({lineRange:null,content:null}))}}static validate(){return H()}componentDidMount(){this._isMounted=!0,this._deferredUpdateRange(),this._throttledUpdateRange=g.throttle(this._deferredUpdateRange,500),window.addEventListener("resize",this._throttledUpdateRange)}shouldComponentUpdate(e,r){return!g.isEqual(this.props,e)||!g.isEqual(this.state,r)}componentDidUpdate(){this._deferredUpdateRange()}componentWillUnmount(){window.removeEventListener("resize",this._throttledUpdateRange),this._isMounted=!1}getUserInput(){return null}simpleValidate(){return H()}render(){const{strings:e}=this.context,r=this.state.lineRange;let n;r?r[0]===r[1]?n=e.lineNumber({lineNumber:String(r[0])}):n=e.lineRange({lineRange:r[0]+ei+r[1]}):n=e.lineRange({lineRange:`?${ei}?`});let a;if(this.props.summaryText){const i=Ea.parseInline(this.props.summaryText);a=f("span",{"aria-hidden":!0,children:[" ","(“",Ea.basicOutput(i),"”)"]})}else a=null;return f("span",{children:[n,a,r&&d("div",{className:"perseus-sr-only",children:this.state.content})]})}};ft.contextType=S,ft.defaultProps={passageNumber:1,referenceNumber:1,summaryText:""};let on=ft;const xs={name:"passage-ref",displayName:"PassageRef (SAT only)",hidden:!0,defaultAlignment:"inline",widget:on,transform:t=>({passageNumber:t.passageNumber,referenceNumber:t.referenceNumber,summaryText:t.summaryText}),version:{major:0,minor:1}};function ri(t,e,r){const n=t.choicesSelected.reduce((i,s)=>i+(s?1:0),0);return n===0?{type:"invalid",message:null}:t.numCorrect&&t.numCorrect>1&&n!==t.numCorrect?{type:"invalid",message:r.chooseCorrectNum}:t.noneOfTheAboveSelected&&n>1?{type:"invalid",message:r.notNoneOfTheAbove}:{type:"points",earned:t.choicesSelected.every((i,s)=>{let o;return t.noneOfTheAboveIndex===s?o=e.choices.every((l,u)=>s===u||!l.correct):o=!!e.choices[s].correct,o===i})?1:0,total:1,message:null}}var Ge;let js=(Ge=class extends v.Component{constructor(){super(...arguments),this._renderRenderer=(e="")=>{let r=1;const n={},a=e.replace(/\{\{passage-ref (\d+) (\d+)(?: "([^"]*)")?\}\}/g,(i,s,o,l)=>{const u="passage-ref "+r;return r++,n[u]={type:"passage-ref",graded:!1,options:{passageNumber:parseInt(s),referenceNumber:parseInt(o),summaryText:l},version:xs.version},"[["+z.snowman+" "+u+"]]"});return d($,{content:a,widgets:n,findExternalWidgets:this.props.findWidgets,alwaysUpdate:!0,linterContext:{...this.props.linterContext,blockHighlight:!0},strings:this.context.strings},"choiceContentRenderer")},this.updateChoices=e=>{const{choiceStates:r,choices:n}=this.props,a=r?r.map(i=>({...i})):n.map(()=>({selected:!1,crossedOut:!1,highlighted:!1,rationaleShown:!1,correctnessShown:!1,previouslyAnswered:!1,readOnly:!1}));a.forEach((i,s)=>{i.selected=e.checked[s],i.crossedOut=e.crossedOut[s]}),this.props.onChange({choiceStates:a}),this.props.trackInteraction()},this.showRationalesForCurrentlySelectedChoices=e=>{const{choiceStates:r}=this.props;if(r){const n=this.simpleValidate(e),a=n.type==="points"&&n.total===n.earned,i=r.map(s=>({...s,highlighted:s.selected,rationaleShown:s.selected||s.rationaleShown||a,readOnly:s.selected||s.readOnly||a||this.props.showSolutions!=="none",correctnessShown:s.selected||s.correctnessShown,previouslyAnswered:s.previouslyAnswered||s.selected}));this.props.onChange({choiceStates:i},null,!0)}},this.deselectIncorrectSelectedChoices=()=>{if(this.props.choiceStates){const e=this.props.choiceStates.map((r,n)=>({...r,selected:r.selected&&!!this.props.choices[n].correct,highlighted:!1}));this.props.onChange({choiceStates:e},null,!1)}}}static validate(e,r,n){return ri(e,r,n)}static getUserInputFromProps(e){if(e.choiceStates){let n=null,a=!1;const i=e.choiceStates,s=i.map(()=>!1),o=e.countChoices,l=e.numCorrect;for(let u=0;u!1)}}componentDidUpdate(e){this.props.showSolutions==="selected"&&e.showSolutions!=="selected"&&this.showRationalesForCurrentlySelectedChoices(this.props)}focus(e){return this.focusFunction?this.focusFunction(e):!1}registerFocusFunction(e){this.focusFunction=e}getUserInput(){return Ge.getUserInputFromProps(this.props)}simpleValidate(e){return ri(this.getUserInput(),e,this.context.strings)}render(){const{choices:e}=this.props,{strings:r}=this.context;let n;this.props.static?n=e.map(i=>({selected:!!i.correct,crossedOut:!1,readOnly:!0,highlighted:!1,rationaleShown:!0,correctnessShown:!0,previouslyAnswered:!1})):this.props.showSolutions==="all"?n=e.map(({correct:i})=>({selected:i,crossedOut:!1,readOnly:!0,highlighted:!1,rationaleShown:!0,correctnessShown:!0,previouslyAnswered:!1})):this.props.choiceStates?n=this.props.choiceStates:this.props.values?n=this.props.values.map(i=>({selected:i,crossedOut:!1,readOnly:!1,highlighted:!1,rationaleShown:!1,correctnessShown:!1,previouslyAnswered:!1})):n=e.map(()=>({selected:!1,crossedOut:!1,readOnly:!1,highlighted:!1,rationaleShown:!1,correctnessShown:!1,previouslyAnswered:!1}));const a=e.map((i,s)=>{const o=i.isNoneOfTheAbove&&!i.content?r.noneOfTheAbove:i.content,{selected:l,crossedOut:u,rationaleShown:y,correctnessShown:m,readOnly:h,highlighted:p,previouslyAnswered:c}=n[s],b=this.props.reviewModeRubric&&this.props.reviewModeRubric.choices[s];return{content:this._renderRenderer(o),checked:l,correct:i.correct===void 0?!!b&&!!b.correct:i.correct,disabled:h,hasRationale:!!i.clue,rationale:this._renderRenderer(i.clue),showRationale:y,showCorrectness:m,isNoneOfTheAbove:!!i.isNoneOfTheAbove,revealNoneOfTheAbove:!!(this.props.questionCompleted&&l),crossedOut:u,highlighted:p,previouslyAnswered:c}});return d($l,{labelWrap:!0,multipleSelect:this.props.multipleSelect,countChoices:this.props.countChoices,numCorrect:this.props.numCorrect,choices:a,onChange:this.updateChoices,reviewModeRubric:this.props.reviewModeRubric,deselectEnabled:this.props.deselectEnabled,apiOptions:this.props.apiOptions,isLastUsedWidget:this.props.isLastUsedWidget,registerFocusFunction:i=>this.registerFocusFunction(i)})}},Ge.contextType=S,Ge.defaultProps={choices:[],multipleSelect:!1,countChoices:!1,deselectEnabled:!1,linterContext:B,showSolutions:"none"},Ge);js.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[{name:"userInput",optional:!1,type:{name:"signature",type:"object",raw:`{ + countChoices?: boolean; + choicesSelected: ReadonlyArray; + numCorrect?: number; + noneOfTheAboveIndex?: number | null | undefined; + noneOfTheAboveSelected?: boolean; +}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]},alias:"PerseusRadioUserInput"}},{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // The choices provided to the user. + choices: ReadonlyArray; + // Does this have a "none of the above" option? + // NOTE: perseus_data.go says this is required even though it isn't necessary. + hasNoneOfTheAbove?: boolean; + // If multipleSelect is enabled, Specify the number expected to be correct. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + countChoices?: boolean; + // Randomize the order of the options or keep them as defined + // NOTE: perseus_data.go says this is required even though it isn't necessary. + randomize?: boolean; + // Does this set allow for multiple selections to be correct? + // NOTE: perseus_data.go says this is required even though it isn't necessary. + multipleSelect?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + deselectEnabled?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + onePerLine?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + displayCount?: any; + // v0 props + // \`noneOfTheAbove\` is still in use (but only set to \`false\`). + noneOfTheAbove?: false; +}`,signature:{properties:[{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + // Translatable Markdown; The label for this choice + content: string; + // Translatable Markdown; A clue to give the user when they get it wrong + // NOTE: perseus_data.go says this is required even though it isn't necessary. + clue?: string; + // Whether this option is a correct answer or not + // NOTE: perseus_data.go says this is required even though it isn't necessary. + correct?: boolean; + // If this is none of the above, override the content with "None of the above" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + isNoneOfTheAbove?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + widgets?: PerseusWidgetsMap; +}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"clue",value:{name:"string",required:!1}},{key:"correct",value:{name:"boolean",required:!1}},{key:"isNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; // Only used by interactive child widgets (line, point, etc) to identify the components // NOTE: perseus_data.go says this is required even though it isn't necessary. key?: number; @@ -29319,7 +26244,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29363,7 +26288,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29407,7 +26332,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29451,7 +26376,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29495,7 +26420,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29539,7 +26464,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29583,7 +26508,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29627,7 +26552,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29671,7 +26596,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29715,7 +26640,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29759,7 +26684,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29803,7 +26728,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29847,7 +26772,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29891,7 +26816,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29935,7 +26860,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -29979,7 +26904,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -30023,23 +26948,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -30083,46 +26992,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -30166,21 +27036,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -30224,225 +27080,71 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - selected: boolean; - crossedOut: boolean; - highlighted: boolean; - rationaleShown: boolean; - correctnessShown: boolean; - previouslyAnswered: boolean; - readOnly: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},trackInteraction:{required:!0,tsType:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"TrackingExtraArgs"},name:"extraData"}],return:{name:"void"}}},description:""},isLastUsedWidget:{required:!0,tsType:{name:"boolean"},description:""},linterContext:{required:!1,tsType:{name:"LinterContextProps"},description:"",defaultValue:{value:"linterContextDefault",computed:!0}},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},choices:{defaultValue:{value:"[]",computed:!1},required:!1},multipleSelect:{defaultValue:{value:"false",computed:!1},required:!1},countChoices:{defaultValue:{value:"false",computed:!1},required:!1},deselectEnabled:{defaultValue:{value:"false",computed:!1},required:!1},showSolutions:{defaultValue:{value:'"none"',computed:!1},required:!1}}};const{shuffle:ed,random:rd}=z,td=(t,e,r)=>{const n=function(o){const l=r===void 0?rd:r;return t.randomize?ed(o,l??0):o},a=function(o){let l=null;const u=o.filter((y,m)=>y.isNoneOfTheAbove?(l=y,!1):!0);return l&&u.push(l),u},i=o=>{const l=[[e.false,e.true],[e.no,e.yes]],u=o.map(y=>y.content);return l.some(y=>g.isEqual(u,y))?[o[1],o[0]]:o},s=t.choices.map((o,l)=>({...o,originalIndex:l,correct:!!o.correct}));return a(i(n(s)))},ri=(t,e,r)=>{const n=td(t,e,r),a=g.reduce(t.choices,function(u,y){return y.correct?u+1:u},0),{hasNoneOfTheAbove:i,multipleSelect:s,countChoices:o,deselectEnabled:l}=t;return{numCorrect:a,hasNoneOfTheAbove:i,multipleSelect:s,countChoices:o,deselectEnabled:l,choices:n,selectedChoices:g.pluck(n,"correct")}},nd={1:t=>{let e,r;if(!t.noneOfTheAbove)e=t.choices,r=!1;else throw new Error("radio widget v0 no longer supports auto noneOfTheAbove");return g.extend(g.omit(t,"noneOfTheAbove"),{choices:e,hasNoneOfTheAbove:r})}},ad={name:"radio",displayName:"Radio / Multiple choice",accessible:!0,widget:Ts,transform:ri,staticTransform:ri,version:{major:1,minor:0},propUpgrades:nd,isLintable:!0},id=[ad,Bu,Zu,$u];function ti(t,e,r){let n=!0,a=!0;return e.values.forEach((i,s)=>{t.values[s]==null&&(n=!1),t.values[s]!==i&&(a=!1)}),n?{type:"points",earned:a?1:0,total:1,message:null}:{type:"invalid",message:r.invalidSelection}}const Cr=class Cr extends k.Component{constructor(){super(...arguments),this.state={uniqueId:g.uniqueId("perseus_radio_")},this.change=(...e)=>ne.apply(this,e)}static validate(e,r,n){return ti(e,r,n)}static getUserInputFromProps(e){return{values:e.values}}getUserInput(){return Cr.getUserInputFromProps(this.props)}onChange(e,r){const n=[...this.props.values];n[e]=r,this.change("values",n),this.props.trackInteraction()}simpleValidate(e){return ti(this.getUserInput(),e,this.context.strings)}render(){const e=this,r=this.props.apiOptions.isMobile;let n=this.props.items.map((o,l)=>[o,l]);this.props.randomizeItems&&(n=z.shuffle(n,this.props.problemNum));const a=q("table",{className:"categorizer-table "+j.css(Ne.mobileTable),children:[d("thead",{children:q("tr",{children:[d("td",{className:j.css(Ne.emptyHeaderCell)}),this.props.categories.map((o,l)=>d("th",{className:j.css(Ne.header),children:d(H,{content:o,linterContext:this.props.linterContext,strings:this.context.strings})},l))]})}),d("tbody",{children:n.map(o=>{const l=o[0],u=o[1],y=e.state.uniqueId+"_"+u;return q("tr",{children:[d("td",{children:d(H,{content:l,linterContext:this.props.linterContext,strings:this.context.strings})}),e.props.categories.map((m,h)=>{const p=e.props.values[u]===h;return d("td",{className:"category "+j.css(Ne.cell),children:q("div",{className:_e.INTERACTIVE,role:"button","aria-label":m,onClick:()=>this.onChange(u,h),children:[r&&d("input",{type:"radio",name:y,className:j.css(Da.responsiveInput,Da.responsiveRadioInput),checked:p,onChange:()=>this.onChange(u,h),onClick:c=>c.stopPropagation()}),!r&&d("span",{className:j.css(Ne.radioSpan,p&&Ne.checkedRadioSpan,this.props.static&&p&&Ne.staticCheckedRadioSpan),children:p?d(or,{...Yl}):d(or,{...Xl})})]})},h)})]},u)})})]}),i=We({"categorizer-container":!0,"static-mode":this.props.static}),s=this.props.apiOptions.isMobile?[Ne.fullBleedContainer]:[];return d("div",{className:i+" "+j.css(...s),children:a})}};Cr.contextType=M,Cr.defaultProps={items:[],categories:[],values:[],linterContext:B};let ut=Cr;const ni=16,Ne=j.StyleSheet.create({mobileTable:{[Er.smOrSmaller]:{minWidth:"auto"}},fullBleedContainer:{[Er.mdOrSmaller]:{marginLeft:-ni,marginRight:-ni,overflowX:"auto"}},header:{textAlign:"center",verticalAlign:"bottom"},cell:{textAlign:"center",padding:0,color:"#ccc",verticalAlign:"middle"},emptyHeaderCell:{backgroundColor:"inherit",borderBottom:"2px solid #ccc"},radioSpan:{fontSize:30,paddingRight:3,":hover":{color:"#999"}},checkedRadioSpan:{color:"#333"},staticCheckedRadioSpan:{color:"#888"}}),sd={name:"categorizer",displayName:"Categorizer",hidden:!0,widget:ut,transform:t=>g.pick(t,"items","categories","randomizeItems"),staticTransform:t=>g.pick(t,"items","categories","values","randomizeItems"),isLintable:!0};ut.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[{name:"userInput",optional:!1,type:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] values: ReadonlyArray; -}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]},alias:"PerseusCategorizerUserInput"}},{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] items: ReadonlyArray; // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] @@ -30461,474 +27163,12 @@ the available choices.`}]}}],raw:`Readonly<{ contentType: string; paths: ReadonlyArray; stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},alias:"PerseusCategorizerRubric"}},{name:"strings",optional:!1,type:{name:"signature",type:"object",raw:`{ - closeKeypad: string; - openKeypad: string; - mathInputBox: string; - removeHighlight: string; - addHighlight: string; - hintPos: ({pos}: {pos: number}) => string; - errorRendering: ({error}: {error: string}) => string; - APPROXIMATED_PI_ERROR: string; - EXTRA_SYMBOLS_ERROR: string; - NEEDS_TO_BE_SIMPLFIED_ERROR: string; - MISSING_PERCENT_ERROR: string; - MULTIPLICATION_SIGN_ERROR: string; - WRONG_CASE_ERROR: string; - WRONG_LETTER_ERROR: string; - invalidSelection: string; - ERROR_TITLE: string; - ERROR_MESSAGE: string; - hints: string; - getAnotherHint: string; - deprecatedStandin: string; - keepTrying: string; - tryAgain: string; - check: string; - correctExcited: string; - nextQuestion: string; - skipToTitle: ({title}: {title: string}) => string; - current: string; - correct: string; - correctSelected: string; - correctCrossedOut: string; - incorrect: string; - incorrectSelected: string; - hideExplanation: string; - explain: string; - INVALID_MESSAGE_PREFIX: string; - DEFAULT_INVALID_MESSAGE_1: string; - DEFAULT_INVALID_MESSAGE_2: string; - integerExample: string; - properExample: string; - simplifiedProperExample: string; - improperExample: string; - simplifiedImproperExample: string; - mixedExample: string; - decimalExample: string; - percentExample: string; - piExample: string; - yourAnswer: string; - yourAnswerLabel: string; - addPoints: string; - addVertices: string; - tapMultiple: string; - tapSingle: string; - clickMultiple: string; - clickSingle: string; - choices: string; - answers: ({num}: {num: number}) => string; - hideAnswersToggleLabel: string; - moves: ({num}: {num: number}) => string; - clickTiles: string; - turnOffLights: string; - fillAllCells: string; - molecularDrawing: ({content}: {content: string}) => string; - switchDirection: string; - circleOpen: string; - circleFilled: string; - numDivisions: string; - divisions: ({divRangeString}: {divRangeString: string}) => string; - lineRange: ({lineRange}: {lineRange: string}) => string; - lineNumber: ({lineNumber}: {lineNumber: string}) => string; - symbolPassage: ({ - questionSymbol, - questionNumber, - }: { - questionSymbol: string; - questionNumber: string; - }) => string; - symbolQuestion: ({sentenceSymbol}: {sentenceSymbol: string}) => string; - lineLabel: string; - beginningPassage: string; - beginningFootnotes: string; - endPassage: string; - questionMarker: ({number}: {number: string}) => string; - circleMarker: ({number}: {number: string}) => string; - sentenceMarker: ({number}: {number: string}) => string; - dragHandles: string; - tapAddPoints: string; - false: string; - true: string; - no: string; - yes: string; - chooseCorrectNum: string; - notNoneOfTheAbove: string; - noneOfTheAbove: string; - chooseNumAnswers: ({numCorrect}: {numCorrect: string}) => string; - chooseAllAnswers: string; - chooseOneAnswer: string; - choiceCheckedCorrect: ({letter}: {letter: string}) => string; - choiceCrossedOutCorrect: ({letter}: {letter: string}) => string; - choiceCorrect: ({letter}: {letter: string}) => string; - choiceCheckedIncorrect: ({letter}: {letter: string}) => string; - choiceCrossedOutIncorrect: ({letter}: {letter: string}) => string; - choiceIncorrect: ({letter}: {letter: string}) => string; - choiceChecked: ({letter}: {letter: string}) => string; - choiceCrossedOut: ({letter}: {letter: string}) => string; - choice: ({letter}: {letter: string}) => string; - crossOut: string; - crossOutOption: string; - crossOutChoice: ({letter}: {letter: string}) => string; - bringBack: string; - openMenuForChoice: ({letter}: {letter: string}) => string; - letters: string; - rightArrow: string; - dontUnderstandUnits: string; - checkSigFigs: string; - answerNumericallyIncorrect: string; - checkUnits: string; - dontUnderstand: string; - loading: string; - videoTranscript: string; - somethingWrong: string; - videoWrapper: string; - mathInputTitle: string; - mathInputDescription: string; - sin: string; - cos: string; - tan: string; - simulationLoadFail: string; - simulationLocaleWarning: string; - addPoint: string; - removePoint: string; - graphKeyboardPrompt: string; -}`,signature:{properties:[{key:"closeKeypad",value:{name:"string",required:!0}},{key:"openKeypad",value:{name:"string",required:!0}},{key:"mathInputBox",value:{name:"string",required:!0}},{key:"removeHighlight",value:{name:"string",required:!0}},{key:"addHighlight",value:{name:"string",required:!0}},{key:"hintPos",value:{name:"signature",type:"function",raw:"({pos}: {pos: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{pos: number}",signature:{properties:[{key:"pos",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"errorRendering",value:{name:"signature",type:"function",raw:"({error}: {error: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{error: string}",signature:{properties:[{key:"error",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"APPROXIMATED_PI_ERROR",value:{name:"string",required:!0}},{key:"EXTRA_SYMBOLS_ERROR",value:{name:"string",required:!0}},{key:"NEEDS_TO_BE_SIMPLFIED_ERROR",value:{name:"string",required:!0}},{key:"MISSING_PERCENT_ERROR",value:{name:"string",required:!0}},{key:"MULTIPLICATION_SIGN_ERROR",value:{name:"string",required:!0}},{key:"WRONG_CASE_ERROR",value:{name:"string",required:!0}},{key:"WRONG_LETTER_ERROR",value:{name:"string",required:!0}},{key:"invalidSelection",value:{name:"string",required:!0}},{key:"ERROR_TITLE",value:{name:"string",required:!0}},{key:"ERROR_MESSAGE",value:{name:"string",required:!0}},{key:"hints",value:{name:"string",required:!0}},{key:"getAnotherHint",value:{name:"string",required:!0}},{key:"deprecatedStandin",value:{name:"string",required:!0}},{key:"keepTrying",value:{name:"string",required:!0}},{key:"tryAgain",value:{name:"string",required:!0}},{key:"check",value:{name:"string",required:!0}},{key:"correctExcited",value:{name:"string",required:!0}},{key:"nextQuestion",value:{name:"string",required:!0}},{key:"skipToTitle",value:{name:"signature",type:"function",raw:"({title}: {title: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{title: string}",signature:{properties:[{key:"title",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"current",value:{name:"string",required:!0}},{key:"correct",value:{name:"string",required:!0}},{key:"correctSelected",value:{name:"string",required:!0}},{key:"correctCrossedOut",value:{name:"string",required:!0}},{key:"incorrect",value:{name:"string",required:!0}},{key:"incorrectSelected",value:{name:"string",required:!0}},{key:"hideExplanation",value:{name:"string",required:!0}},{key:"explain",value:{name:"string",required:!0}},{key:"INVALID_MESSAGE_PREFIX",value:{name:"string",required:!0}},{key:"DEFAULT_INVALID_MESSAGE_1",value:{name:"string",required:!0}},{key:"DEFAULT_INVALID_MESSAGE_2",value:{name:"string",required:!0}},{key:"integerExample",value:{name:"string",required:!0}},{key:"properExample",value:{name:"string",required:!0}},{key:"simplifiedProperExample",value:{name:"string",required:!0}},{key:"improperExample",value:{name:"string",required:!0}},{key:"simplifiedImproperExample",value:{name:"string",required:!0}},{key:"mixedExample",value:{name:"string",required:!0}},{key:"decimalExample",value:{name:"string",required:!0}},{key:"percentExample",value:{name:"string",required:!0}},{key:"piExample",value:{name:"string",required:!0}},{key:"yourAnswer",value:{name:"string",required:!0}},{key:"yourAnswerLabel",value:{name:"string",required:!0}},{key:"addPoints",value:{name:"string",required:!0}},{key:"addVertices",value:{name:"string",required:!0}},{key:"tapMultiple",value:{name:"string",required:!0}},{key:"tapSingle",value:{name:"string",required:!0}},{key:"clickMultiple",value:{name:"string",required:!0}},{key:"clickSingle",value:{name:"string",required:!0}},{key:"choices",value:{name:"string",required:!0}},{key:"answers",value:{name:"signature",type:"function",raw:"({num}: {num: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{num: number}",signature:{properties:[{key:"num",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"hideAnswersToggleLabel",value:{name:"string",required:!0}},{key:"moves",value:{name:"signature",type:"function",raw:"({num}: {num: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{num: number}",signature:{properties:[{key:"num",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"clickTiles",value:{name:"string",required:!0}},{key:"turnOffLights",value:{name:"string",required:!0}},{key:"fillAllCells",value:{name:"string",required:!0}},{key:"molecularDrawing",value:{name:"signature",type:"function",raw:"({content}: {content: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{content: string}",signature:{properties:[{key:"content",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"switchDirection",value:{name:"string",required:!0}},{key:"circleOpen",value:{name:"string",required:!0}},{key:"circleFilled",value:{name:"string",required:!0}},{key:"numDivisions",value:{name:"string",required:!0}},{key:"divisions",value:{name:"signature",type:"function",raw:"({divRangeString}: {divRangeString: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{divRangeString: string}",signature:{properties:[{key:"divRangeString",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineRange",value:{name:"signature",type:"function",raw:"({lineRange}: {lineRange: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{lineRange: string}",signature:{properties:[{key:"lineRange",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineNumber",value:{name:"signature",type:"function",raw:"({lineNumber}: {lineNumber: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{lineNumber: string}",signature:{properties:[{key:"lineNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolPassage",value:{name:"signature",type:"function",raw:`({ - questionSymbol, - questionNumber, -}: { - questionSymbol: string; - questionNumber: string; -}) => string`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - questionSymbol: string; - questionNumber: string; -}`,signature:{properties:[{key:"questionSymbol",value:{name:"string",required:!0}},{key:"questionNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolQuestion",value:{name:"signature",type:"function",raw:"({sentenceSymbol}: {sentenceSymbol: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{sentenceSymbol: string}",signature:{properties:[{key:"sentenceSymbol",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineLabel",value:{name:"string",required:!0}},{key:"beginningPassage",value:{name:"string",required:!0}},{key:"beginningFootnotes",value:{name:"string",required:!0}},{key:"endPassage",value:{name:"string",required:!0}},{key:"questionMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"circleMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"sentenceMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"dragHandles",value:{name:"string",required:!0}},{key:"tapAddPoints",value:{name:"string",required:!0}},{key:"false",value:{name:"string",required:!0}},{key:"true",value:{name:"string",required:!0}},{key:"no",value:{name:"string",required:!0}},{key:"yes",value:{name:"string",required:!0}},{key:"chooseCorrectNum",value:{name:"string",required:!0}},{key:"notNoneOfTheAbove",value:{name:"string",required:!0}},{key:"noneOfTheAbove",value:{name:"string",required:!0}},{key:"chooseNumAnswers",value:{name:"signature",type:"function",raw:"({numCorrect}: {numCorrect: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{numCorrect: string}",signature:{properties:[{key:"numCorrect",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"chooseAllAnswers",value:{name:"string",required:!0}},{key:"chooseOneAnswer",value:{name:"string",required:!0}},{key:"choiceCheckedCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCheckedIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceChecked",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOut",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"crossOut",value:{name:"string",required:!0}},{key:"crossOutOption",value:{name:"string",required:!0}},{key:"crossOutChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"bringBack",value:{name:"string",required:!0}},{key:"openMenuForChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"letters",value:{name:"string",required:!0}},{key:"rightArrow",value:{name:"string",required:!0}},{key:"dontUnderstandUnits",value:{name:"string",required:!0}},{key:"checkSigFigs",value:{name:"string",required:!0}},{key:"answerNumericallyIncorrect",value:{name:"string",required:!0}},{key:"checkUnits",value:{name:"string",required:!0}},{key:"dontUnderstand",value:{name:"string",required:!0}},{key:"loading",value:{name:"string",required:!0}},{key:"videoTranscript",value:{name:"string",required:!0}},{key:"somethingWrong",value:{name:"string",required:!0}},{key:"videoWrapper",value:{name:"string",required:!0}},{key:"mathInputTitle",value:{name:"string",required:!0}},{key:"mathInputDescription",value:{name:"string",required:!0}},{key:"sin",value:{name:"string",required:!0}},{key:"cos",value:{name:"string",required:!0}},{key:"tan",value:{name:"string",required:!0}},{key:"simulationLoadFail",value:{name:"string",required:!0}},{key:"simulationLocaleWarning",value:{name:"string",required:!0}},{key:"addPoint",value:{name:"string",required:!0}},{key:"removePoint",value:{name:"string",required:!0}},{key:"graphKeyboardPrompt",value:{name:"string",required:!0}}]},alias:"PerseusStrings"}}],returns:{type:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"getUserInputFromProps",docblock:null,modifiers:["static"],params:[{name:"props",optional:!1,type:{name:"intersection",raw:`WidgetProps & { - values: ReadonlyArray; -}`,elements:[{name:"intersection",raw:`RenderProps & { - // provided by renderer.jsx#getWidgetProps() - widgetId: string; - alignment: string | null | undefined; - static: boolean | null | undefined; - problemNum: number | null | undefined; - apiOptions: APIOptionsWithDefaults; - keypadElement?: any; - questionCompleted?: boolean; - onFocus: (blurPath: FocusPath) => void; - onBlur: (blurPath: FocusPath) => void; - findWidgets: (arg1: FilterCriterion) => ReadonlyArray; - reviewModeRubric: Rubric; - onChange: ChangeHandler; - // This is slightly different from the \`trackInteraction\` function in - // APIOptions. This provides the widget an easy way to notify the renderer - // of an interaction. The Renderer then enriches the data provided with the - // widget's id and type before calling APIOptions.trackInteraction. - trackInteraction: (extraData?: TrackingExtraArgs) => void; - isLastUsedWidget: boolean; - // provided by widget-container.jsx#render() - linterContext: LinterContextProps; - containerSizeClass: SizeClass; -}`,elements:[{name:"signature",type:"object",raw:`{ - items: PerseusCategorizerWidgetOptions["items"]; - categories: PerseusCategorizerWidgetOptions["categories"]; - randomizeItems: PerseusCategorizerWidgetOptions["randomizeItems"]; - // Depends on whether the widget is in static mode - values?: PerseusCategorizerWidgetOptions["values"]; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",raw:'PerseusCategorizerWidgetOptions["items"]',required:!0}},{key:"categories",value:{name:"ReadonlyArray",raw:'PerseusCategorizerWidgetOptions["categories"]',required:!0}},{key:"randomizeItems",value:{name:"boolean",raw:'PerseusCategorizerWidgetOptions["randomizeItems"]',required:!0}},{key:"values",value:{name:"ReadonlyArray",raw:'PerseusCategorizerWidgetOptions["values"]',required:!1}}]}},{name:"signature",type:"object",raw:`{ - // provided by renderer.jsx#getWidgetProps() - widgetId: string; - alignment: string | null | undefined; - static: boolean | null | undefined; - problemNum: number | null | undefined; - apiOptions: APIOptionsWithDefaults; - keypadElement?: any; - questionCompleted?: boolean; - onFocus: (blurPath: FocusPath) => void; - onBlur: (blurPath: FocusPath) => void; - findWidgets: (arg1: FilterCriterion) => ReadonlyArray; - reviewModeRubric: Rubric; - onChange: ChangeHandler; - // This is slightly different from the \`trackInteraction\` function in - // APIOptions. This provides the widget an easy way to notify the renderer - // of an interaction. The Renderer then enriches the data provided with the - // widget's id and type before calling APIOptions.trackInteraction. - trackInteraction: (extraData?: TrackingExtraArgs) => void; - isLastUsedWidget: boolean; - // provided by widget-container.jsx#render() - linterContext: LinterContextProps; - containerSizeClass: SizeClass; -}`,signature:{properties:[{key:"widgetId",value:{name:"string",required:!0}},{key:"alignment",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"static",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!0}},{key:"problemNum",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"apiOptions",value:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -30972,7 +27212,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31016,7 +27256,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31060,7 +27300,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31104,7 +27344,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31148,7 +27388,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31192,7 +27432,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31236,7 +27476,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31280,7 +27520,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31324,7 +27564,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31368,7 +27608,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31412,7 +27652,221 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}}]}}],raw:"ReadonlyArray",required:!0}},{key:"hasNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"countChoices",value:{name:"boolean",required:!1}},{key:"randomize",value:{name:"boolean",required:!1}},{key:"multipleSelect",value:{name:"boolean",required:!1}},{key:"deselectEnabled",value:{name:"boolean",required:!1}},{key:"onePerLine",value:{name:"boolean",required:!1}},{key:"displayCount",value:{name:"any",required:!1}},{key:"noneOfTheAbove",value:{name:"literal",value:"false",required:!1}}]},alias:"PerseusRadioRubric"}},{name:"strings",optional:!1,type:{name:"signature",type:"object",raw:`{ + closeKeypad: string; + openKeypad: string; + mathInputBox: string; + removeHighlight: string; + addHighlight: string; + hintPos: ({pos}: {pos: number}) => string; + errorRendering: ({error}: {error: string}) => string; + APPROXIMATED_PI_ERROR: string; + EXTRA_SYMBOLS_ERROR: string; + NEEDS_TO_BE_SIMPLFIED_ERROR: string; + MISSING_PERCENT_ERROR: string; + MULTIPLICATION_SIGN_ERROR: string; + WRONG_CASE_ERROR: string; + WRONG_LETTER_ERROR: string; + invalidSelection: string; + ERROR_TITLE: string; + ERROR_MESSAGE: string; + hints: string; + getAnotherHint: string; + deprecatedStandin: string; + keepTrying: string; + tryAgain: string; + check: string; + correctExcited: string; + nextQuestion: string; + skipToTitle: ({title}: {title: string}) => string; + current: string; + correct: string; + correctSelected: string; + correctCrossedOut: string; + incorrect: string; + incorrectSelected: string; + hideExplanation: string; + explain: string; + INVALID_MESSAGE_PREFIX: string; + DEFAULT_INVALID_MESSAGE_1: string; + DEFAULT_INVALID_MESSAGE_2: string; + integerExample: string; + properExample: string; + simplifiedProperExample: string; + improperExample: string; + simplifiedImproperExample: string; + mixedExample: string; + decimalExample: string; + percentExample: string; + piExample: string; + yourAnswer: string; + yourAnswerLabel: string; + addPoints: string; + addVertices: string; + tapMultiple: string; + tapSingle: string; + clickMultiple: string; + clickSingle: string; + choices: string; + answers: ({num}: {num: number}) => string; + hideAnswersToggleLabel: string; + moves: ({num}: {num: number}) => string; + clickTiles: string; + turnOffLights: string; + fillAllCells: string; + molecularDrawing: ({content}: {content: string}) => string; + switchDirection: string; + circleOpen: string; + circleFilled: string; + numDivisions: string; + divisions: ({divRangeString}: {divRangeString: string}) => string; + lineRange: ({lineRange}: {lineRange: string}) => string; + lineNumber: ({lineNumber}: {lineNumber: string}) => string; + symbolPassage: ({ + questionSymbol, + questionNumber, + }: { + questionSymbol: string; + questionNumber: string; + }) => string; + symbolQuestion: ({sentenceSymbol}: {sentenceSymbol: string}) => string; + lineLabel: string; + beginningPassage: string; + beginningFootnotes: string; + endPassage: string; + questionMarker: ({number}: {number: string}) => string; + circleMarker: ({number}: {number: string}) => string; + sentenceMarker: ({number}: {number: string}) => string; + dragHandles: string; + tapAddPoints: string; + false: string; + true: string; + no: string; + yes: string; + chooseCorrectNum: string; + notNoneOfTheAbove: string; + noneOfTheAbove: string; + chooseNumAnswers: ({numCorrect}: {numCorrect: string}) => string; + chooseAllAnswers: string; + chooseOneAnswer: string; + choiceCheckedCorrect: ({letter}: {letter: string}) => string; + choiceCrossedOutCorrect: ({letter}: {letter: string}) => string; + choiceCorrect: ({letter}: {letter: string}) => string; + choiceCheckedIncorrect: ({letter}: {letter: string}) => string; + choiceCrossedOutIncorrect: ({letter}: {letter: string}) => string; + choiceIncorrect: ({letter}: {letter: string}) => string; + choiceChecked: ({letter}: {letter: string}) => string; + choiceCrossedOut: ({letter}: {letter: string}) => string; + choice: ({letter}: {letter: string}) => string; + crossOut: string; + crossOutOption: string; + crossOutChoice: ({letter}: {letter: string}) => string; + bringBack: string; + openMenuForChoice: ({letter}: {letter: string}) => string; + letters: string; + rightArrow: string; + dontUnderstandUnits: string; + checkSigFigs: string; + answerNumericallyIncorrect: string; + checkUnits: string; + dontUnderstand: string; + loading: string; + videoTranscript: string; + somethingWrong: string; + videoWrapper: string; + mathInputTitle: string; + mathInputDescription: string; + sin: string; + cos: string; + tan: string; + simulationLoadFail: string; + simulationLocaleWarning: string; + addPoint: string; + removePoint: string; + graphKeyboardPrompt: string; +}`,signature:{properties:[{key:"closeKeypad",value:{name:"string",required:!0}},{key:"openKeypad",value:{name:"string",required:!0}},{key:"mathInputBox",value:{name:"string",required:!0}},{key:"removeHighlight",value:{name:"string",required:!0}},{key:"addHighlight",value:{name:"string",required:!0}},{key:"hintPos",value:{name:"signature",type:"function",raw:"({pos}: {pos: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{pos: number}",signature:{properties:[{key:"pos",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"errorRendering",value:{name:"signature",type:"function",raw:"({error}: {error: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{error: string}",signature:{properties:[{key:"error",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"APPROXIMATED_PI_ERROR",value:{name:"string",required:!0}},{key:"EXTRA_SYMBOLS_ERROR",value:{name:"string",required:!0}},{key:"NEEDS_TO_BE_SIMPLFIED_ERROR",value:{name:"string",required:!0}},{key:"MISSING_PERCENT_ERROR",value:{name:"string",required:!0}},{key:"MULTIPLICATION_SIGN_ERROR",value:{name:"string",required:!0}},{key:"WRONG_CASE_ERROR",value:{name:"string",required:!0}},{key:"WRONG_LETTER_ERROR",value:{name:"string",required:!0}},{key:"invalidSelection",value:{name:"string",required:!0}},{key:"ERROR_TITLE",value:{name:"string",required:!0}},{key:"ERROR_MESSAGE",value:{name:"string",required:!0}},{key:"hints",value:{name:"string",required:!0}},{key:"getAnotherHint",value:{name:"string",required:!0}},{key:"deprecatedStandin",value:{name:"string",required:!0}},{key:"keepTrying",value:{name:"string",required:!0}},{key:"tryAgain",value:{name:"string",required:!0}},{key:"check",value:{name:"string",required:!0}},{key:"correctExcited",value:{name:"string",required:!0}},{key:"nextQuestion",value:{name:"string",required:!0}},{key:"skipToTitle",value:{name:"signature",type:"function",raw:"({title}: {title: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{title: string}",signature:{properties:[{key:"title",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"current",value:{name:"string",required:!0}},{key:"correct",value:{name:"string",required:!0}},{key:"correctSelected",value:{name:"string",required:!0}},{key:"correctCrossedOut",value:{name:"string",required:!0}},{key:"incorrect",value:{name:"string",required:!0}},{key:"incorrectSelected",value:{name:"string",required:!0}},{key:"hideExplanation",value:{name:"string",required:!0}},{key:"explain",value:{name:"string",required:!0}},{key:"INVALID_MESSAGE_PREFIX",value:{name:"string",required:!0}},{key:"DEFAULT_INVALID_MESSAGE_1",value:{name:"string",required:!0}},{key:"DEFAULT_INVALID_MESSAGE_2",value:{name:"string",required:!0}},{key:"integerExample",value:{name:"string",required:!0}},{key:"properExample",value:{name:"string",required:!0}},{key:"simplifiedProperExample",value:{name:"string",required:!0}},{key:"improperExample",value:{name:"string",required:!0}},{key:"simplifiedImproperExample",value:{name:"string",required:!0}},{key:"mixedExample",value:{name:"string",required:!0}},{key:"decimalExample",value:{name:"string",required:!0}},{key:"percentExample",value:{name:"string",required:!0}},{key:"piExample",value:{name:"string",required:!0}},{key:"yourAnswer",value:{name:"string",required:!0}},{key:"yourAnswerLabel",value:{name:"string",required:!0}},{key:"addPoints",value:{name:"string",required:!0}},{key:"addVertices",value:{name:"string",required:!0}},{key:"tapMultiple",value:{name:"string",required:!0}},{key:"tapSingle",value:{name:"string",required:!0}},{key:"clickMultiple",value:{name:"string",required:!0}},{key:"clickSingle",value:{name:"string",required:!0}},{key:"choices",value:{name:"string",required:!0}},{key:"answers",value:{name:"signature",type:"function",raw:"({num}: {num: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{num: number}",signature:{properties:[{key:"num",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"hideAnswersToggleLabel",value:{name:"string",required:!0}},{key:"moves",value:{name:"signature",type:"function",raw:"({num}: {num: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{num: number}",signature:{properties:[{key:"num",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"clickTiles",value:{name:"string",required:!0}},{key:"turnOffLights",value:{name:"string",required:!0}},{key:"fillAllCells",value:{name:"string",required:!0}},{key:"molecularDrawing",value:{name:"signature",type:"function",raw:"({content}: {content: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{content: string}",signature:{properties:[{key:"content",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"switchDirection",value:{name:"string",required:!0}},{key:"circleOpen",value:{name:"string",required:!0}},{key:"circleFilled",value:{name:"string",required:!0}},{key:"numDivisions",value:{name:"string",required:!0}},{key:"divisions",value:{name:"signature",type:"function",raw:"({divRangeString}: {divRangeString: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{divRangeString: string}",signature:{properties:[{key:"divRangeString",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineRange",value:{name:"signature",type:"function",raw:"({lineRange}: {lineRange: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{lineRange: string}",signature:{properties:[{key:"lineRange",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineNumber",value:{name:"signature",type:"function",raw:"({lineNumber}: {lineNumber: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{lineNumber: string}",signature:{properties:[{key:"lineNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolPassage",value:{name:"signature",type:"function",raw:`({ + questionSymbol, + questionNumber, +}: { + questionSymbol: string; + questionNumber: string; +}) => string`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + questionSymbol: string; + questionNumber: string; +}`,signature:{properties:[{key:"questionSymbol",value:{name:"string",required:!0}},{key:"questionNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolQuestion",value:{name:"signature",type:"function",raw:"({sentenceSymbol}: {sentenceSymbol: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{sentenceSymbol: string}",signature:{properties:[{key:"sentenceSymbol",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineLabel",value:{name:"string",required:!0}},{key:"beginningPassage",value:{name:"string",required:!0}},{key:"beginningFootnotes",value:{name:"string",required:!0}},{key:"endPassage",value:{name:"string",required:!0}},{key:"questionMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"circleMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"sentenceMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"dragHandles",value:{name:"string",required:!0}},{key:"tapAddPoints",value:{name:"string",required:!0}},{key:"false",value:{name:"string",required:!0}},{key:"true",value:{name:"string",required:!0}},{key:"no",value:{name:"string",required:!0}},{key:"yes",value:{name:"string",required:!0}},{key:"chooseCorrectNum",value:{name:"string",required:!0}},{key:"notNoneOfTheAbove",value:{name:"string",required:!0}},{key:"noneOfTheAbove",value:{name:"string",required:!0}},{key:"chooseNumAnswers",value:{name:"signature",type:"function",raw:"({numCorrect}: {numCorrect: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{numCorrect: string}",signature:{properties:[{key:"numCorrect",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"chooseAllAnswers",value:{name:"string",required:!0}},{key:"chooseOneAnswer",value:{name:"string",required:!0}},{key:"choiceCheckedCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCheckedIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceChecked",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOut",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"crossOut",value:{name:"string",required:!0}},{key:"crossOutOption",value:{name:"string",required:!0}},{key:"crossOutChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"bringBack",value:{name:"string",required:!0}},{key:"openMenuForChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"letters",value:{name:"string",required:!0}},{key:"rightArrow",value:{name:"string",required:!0}},{key:"dontUnderstandUnits",value:{name:"string",required:!0}},{key:"checkSigFigs",value:{name:"string",required:!0}},{key:"answerNumericallyIncorrect",value:{name:"string",required:!0}},{key:"checkUnits",value:{name:"string",required:!0}},{key:"dontUnderstand",value:{name:"string",required:!0}},{key:"loading",value:{name:"string",required:!0}},{key:"videoTranscript",value:{name:"string",required:!0}},{key:"somethingWrong",value:{name:"string",required:!0}},{key:"videoWrapper",value:{name:"string",required:!0}},{key:"mathInputTitle",value:{name:"string",required:!0}},{key:"mathInputDescription",value:{name:"string",required:!0}},{key:"sin",value:{name:"string",required:!0}},{key:"cos",value:{name:"string",required:!0}},{key:"tan",value:{name:"string",required:!0}},{key:"simulationLoadFail",value:{name:"string",required:!0}},{key:"simulationLocaleWarning",value:{name:"string",required:!0}},{key:"addPoint",value:{name:"string",required:!0}},{key:"removePoint",value:{name:"string",required:!0}},{key:"graphKeyboardPrompt",value:{name:"string",required:!0}}]},alias:"PerseusStrings"}}],returns:{type:{name:"union",raw:`| { + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; + } +| { + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; + }`,elements:[{name:"signature",type:"object",raw:`{ + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"getUserInputFromProps",docblock:null,modifiers:["static"],params:[{name:"props",optional:!1,type:{name:"intersection",raw:`RenderProps & { + // provided by renderer.jsx#getWidgetProps() + widgetId: string; + alignment: string | null | undefined; + static: boolean | null | undefined; + problemNum: number | null | undefined; + apiOptions: APIOptionsWithDefaults; + keypadElement?: any; + questionCompleted?: boolean; + onFocus: (blurPath: FocusPath) => void; + onBlur: (blurPath: FocusPath) => void; + findWidgets: (criterion: FilterCriterion) => ReadonlyArray; + reviewModeRubric: Rubric; + onChange: ChangeHandler; + // This is slightly different from the \`trackInteraction\` function in + // APIOptions. This provides the widget an easy way to notify the renderer + // of an interaction. The Renderer then enriches the data provided with the + // widget's id and type before calling APIOptions.trackInteraction. + trackInteraction: (extraData?: TrackingExtraArgs) => void; + isLastUsedWidget: boolean; + // provided by widget-container.jsx#render() + linterContext: LinterContextProps; + containerSizeClass: SizeClass; +}`,elements:[{name:"signature",type:"object",raw:`{ + numCorrect: number; + hasNoneOfTheAbove?: boolean; + multipleSelect?: boolean; + countChoices?: boolean; + deselectEnabled?: boolean; + choices: ReadonlyArray; + selectedChoices: ReadonlyArray; + showSolutions?: ShowSolutions; + choiceStates?: ReadonlyArray; + // Depreciated; support for legacy way of handling changes + // Adds proptype for prop that is used but was lacking type + values?: ReadonlyArray; +}`,signature:{properties:[{key:"numCorrect",value:{name:"number",required:!0}},{key:"hasNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"multipleSelect",value:{name:"boolean",required:!1}},{key:"countChoices",value:{name:"boolean",required:!1}},{key:"deselectEnabled",value:{name:"boolean",required:!1}},{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRadioChoice & { + originalIndex: number; + correct: boolean; +}`,elements:[{name:"signature",type:"object",raw:`{ + // Translatable Markdown; The label for this choice + content: string; + // Translatable Markdown; A clue to give the user when they get it wrong + // NOTE: perseus_data.go says this is required even though it isn't necessary. + clue?: string; + // Whether this option is a correct answer or not + // NOTE: perseus_data.go says this is required even though it isn't necessary. + correct?: boolean; + // If this is none of the above, override the content with "None of the above" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + isNoneOfTheAbove?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + widgets?: PerseusWidgetsMap; +}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"clue",value:{name:"string",required:!1}},{key:"correct",value:{name:"boolean",required:!1}},{key:"isNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31456,7 +27910,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31500,7 +27954,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31544,7 +27998,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31588,7 +28042,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31632,7 +28086,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31676,7 +28130,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31720,7 +28174,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31764,7 +28218,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31808,7 +28262,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31852,7 +28306,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31896,7 +28350,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31940,7 +28394,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -31984,7 +28438,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32028,7 +28482,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32072,7 +28526,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32116,7 +28570,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32160,7 +28614,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32204,7 +28658,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32248,7 +28702,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32292,7 +28746,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32336,7 +28790,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32380,186 +28834,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},{name:"signature",type:"object",raw:`{ - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< - APIOptions["setDrawingAreaAvailable"] ->`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< - APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; - } ->`,required:!0}},{key:"keypadElement",value:{name:"any",required:!1}},{key:"questionCompleted",value:{name:"boolean",required:!1}},{key:"onFocus",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"onBlur",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"findWidgets",value:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32603,105 +28878,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}],raw:"ReadonlyArray"}},required:!0}},{key:"reviewModeRubric",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"onChange",value:{name:"signature",type:"function",raw:`( - arg1: { - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; - }, - callback?: () => unknown | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; -}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; - }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32745,7 +28922,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32789,7 +28966,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32833,7 +29010,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32877,7 +29054,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32921,7 +29098,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -32965,7 +29142,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33009,7 +29186,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33053,7 +29230,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33097,7 +29274,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33141,7 +29318,294 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0}}]}},{name:"signature",type:"object",raw:`{ + originalIndex: number; + correct: boolean; +}`,signature:{properties:[{key:"originalIndex",value:{name:"number",required:!0}},{key:"correct",value:{name:"boolean",required:!0}}]}}]}],raw:"ReadonlyArray",required:!0}},{key:"selectedChoices",value:{name:"ReadonlyArray",elements:[{name:"boolean",raw:'PerseusRadioChoice["correct"]'}],raw:'ReadonlyArray',required:!0}},{key:"showSolutions",value:{name:"union",raw:'"all" | "selected" | "none"',elements:[{name:"literal",value:'"all"'},{name:"literal",value:'"selected"'},{name:"literal",value:'"none"'}],required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + selected: boolean; + crossedOut: boolean; + highlighted: boolean; + rationaleShown: boolean; + correctnessShown: boolean; + previouslyAnswered: boolean; + readOnly: boolean; +}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // provided by renderer.jsx#getWidgetProps() + widgetId: string; + alignment: string | null | undefined; + static: boolean | null | undefined; + problemNum: number | null | undefined; + apiOptions: APIOptionsWithDefaults; + keypadElement?: any; + questionCompleted?: boolean; + onFocus: (blurPath: FocusPath) => void; + onBlur: (blurPath: FocusPath) => void; + findWidgets: (criterion: FilterCriterion) => ReadonlyArray; + reviewModeRubric: Rubric; + onChange: ChangeHandler; + // This is slightly different from the \`trackInteraction\` function in + // APIOptions. This provides the widget an easy way to notify the renderer + // of an interaction. The Renderer then enriches the data provided with the + // widget's id and type before calling APIOptions.trackInteraction. + trackInteraction: (extraData?: TrackingExtraArgs) => void; + isLastUsedWidget: boolean; + // provided by widget-container.jsx#render() + linterContext: LinterContextProps; + containerSizeClass: SizeClass; +}`,signature:{properties:[{key:"widgetId",value:{name:"string",required:!0}},{key:"alignment",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"static",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!0}},{key:"problemNum",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"apiOptions",value:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; +}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, +) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been +answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at +0 and is incremented for each group widget), and the ID of the +group widget, then returns a react component that will be added +immediately above the renderer in the group widget. If the +function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead +of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead +of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; +}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same +interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM +DOM elements. For example, when provided, will be used +in place of . This allows clients to provide pre-styled +components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component +to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +} & Partial & + Partial`,elements:[{name:"signature",type:"object",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + status: "correct" | "incorrect" | "invalid"; +}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + visible: number; +}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It +also includes any extra parameters that the originating widget provided. +This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is +being used. For mobile web this will be the ProvidedKeypad +component. In this situation we use the MathInput component +from the math-input repo instead of the existing perseus math +input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance +of \`math-input\`'s keypad to the body. This is used by the native +apps so they can have the keypad be defined on the native side. +It is called with an function that, when called, blurs the input, +and is expected to return an object of the shape +keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the +drawing area (scratchpad) should be allowed/disallowed. + +Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the +page. For example, if this is enabled, the most recently used +radio widget will attempt to keep the "selected" answer in view +after entering review mode. + +Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio +widgets. This allows users to note which answers they believe to +be incorrect, to find the answer by process of elimination. + +We plan to roll this out to all call sites eventually, but for +now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content +in a editor is delayed before propagated to a prop. For example, +when text is typed in the text area of an Editor component, +there will be a delay equal to the value of \`editorChangeDelay\` +before the change is propagated. This is added for better +responsiveness of the editor when used in certain contexts such +as StructuredItem exercises where constant re-rendering for each +keystroke caused text typed in the text area to appear in it +only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); +}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false +| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. + +Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33185,7 +29649,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33229,7 +29693,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33273,7 +29737,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33317,7 +29781,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33361,7 +29825,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33405,7 +29869,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33449,7 +29913,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33493,7 +29957,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33537,7 +30001,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33581,7 +30045,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33625,7 +30089,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33669,7 +30133,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33713,7 +30177,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33757,7 +30221,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33801,7 +30265,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33845,7 +30309,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33889,7 +30353,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33933,7 +30397,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -33977,7 +30441,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -34021,7 +30485,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -34065,7 +30529,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -34109,7 +30573,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -34153,23 +30617,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -34213,46 +30661,51 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ // The major part of the version major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -34296,21 +30749,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -34354,229 +30793,115 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - selected: boolean; - crossedOut: boolean; - highlighted: boolean; - rationaleShown: boolean; - correctnessShown: boolean; - previouslyAnswered: boolean; - readOnly: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"Empty"},name:"extraData"}],return:{name:"void"}},required:!0}},{key:"isLastUsedWidget",value:{name:"boolean",required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}},{key:"containerSizeClass",value:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]",required:!0}}]}}]},{name:"signature",type:"object",raw:`{ - values: ReadonlyArray; -}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}}],alias:"Props"}}],returns:{type:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] values: ReadonlyArray; -}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}}}},{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"signature",type:"object",raw:`{ + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] values: ReadonlyArray; -}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}}}},{name:"onChange",docblock:null,modifiers:[],params:[{name:"itemNum",optional:!1,type:null},{name:"catNum",optional:!1,type:null}],returns:null},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] items: ReadonlyArray; // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] @@ -34595,69 +30920,175 @@ the available choices.`}]}}],raw:`Readonly<{ contentType: string; paths: ReadonlyArray; stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},alias:"PerseusCategorizerRubric"}}],returns:{type:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}}],displayName:"Categorizer",props:{widgetId:{required:!0,tsType:{name:"string"},description:""},alignment:{required:!0,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},problemNum:{required:!0,tsType:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},description:""},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +after they have been transformed by the widget's transform function. +This is useful for when we need to know how a widget has shuffled its +the available choices.`}]}}],raw:`Readonly<{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. */ imagePlaceholder?: React.ReactNode; /** @@ -34766,108 +31197,88 @@ the available choices.`}]}}],raw:`Readonly<{ * the available choices. */ onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - +}>`},{name:"signature",type:"object",raw:`{ + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; +}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< + APIOptions["setDrawingAreaAvailable"] +>`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< + APIOptions & { + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; + } +>`,required:!0}},{key:"keypadElement",value:{name:"any",required:!1}},{key:"questionCompleted",value:{name:"boolean",required:!1}},{key:"onFocus",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"onBlur",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"findWidgets",value:{name:"signature",type:"function",raw:"(criterion: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"Widget"}],raw:"ReadonlyArray"}},required:!0}},{key:"reviewModeRubric",value:{name:"signature",type:"object",raw:`{ + // The choices provided to the user. + choices: ReadonlyArray; + // Does this have a "none of the above" option? + // NOTE: perseus_data.go says this is required even though it isn't necessary. + hasNoneOfTheAbove?: boolean; + // If multipleSelect is enabled, Specify the number expected to be correct. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + countChoices?: boolean; + // Randomize the order of the options or keep them as defined + // NOTE: perseus_data.go says this is required even though it isn't necessary. + randomize?: boolean; + // Does this set allow for multiple selections to be correct? + // NOTE: perseus_data.go says this is required even though it isn't necessary. + multipleSelect?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + deselectEnabled?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + onePerLine?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + displayCount?: any; + // v0 props + // \`noneOfTheAbove\` is still in use (but only set to \`false\`). + noneOfTheAbove?: false; +}`,signature:{properties:[{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + // Translatable Markdown; The label for this choice + content: string; + // Translatable Markdown; A clue to give the user when they get it wrong + // NOTE: perseus_data.go says this is required even though it isn't necessary. + clue?: string; + // Whether this option is a correct answer or not + // NOTE: perseus_data.go says this is required even though it isn't necessary. correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // If this is none of the above, override the content with "None of the above" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + isNoneOfTheAbove?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + widgets?: PerseusWidgetsMap; +}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"clue",value:{name:"string",required:!1}},{key:"correct",value:{name:"boolean",required:!1}},{key:"isNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -36319,186 +32730,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},{name:"signature",type:"object",raw:`{ - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< - APIOptions["setDrawingAreaAvailable"] ->`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< - APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; - } ->`},description:""},keypadElement:{required:!1,tsType:{name:"any"},description:""},questionCompleted:{required:!1,tsType:{name:"boolean"},description:""},onFocus:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},onBlur:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},findWidgets:{required:!0,tsType:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray"}}},description:""},reviewModeRubric:{required:!0,tsType:{name:"Rubric"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`( +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"hasNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"countChoices",value:{name:"boolean",required:!1}},{key:"randomize",value:{name:"boolean",required:!1}},{key:"multipleSelect",value:{name:"boolean",required:!1}},{key:"deselectEnabled",value:{name:"boolean",required:!1}},{key:"onePerLine",value:{name:"boolean",required:!1}},{key:"displayCount",value:{name:"any",required:!1}},{key:"noneOfTheAbove",value:{name:"literal",value:"false",required:!1}}]},required:!0}},{key:"onChange",value:{name:"signature",type:"function",raw:`( arg1: { hints?: ReadonlyArray; replace?: boolean; @@ -36621,7 +32853,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -36665,7 +32897,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -36709,7 +32941,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -36753,7 +32985,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -36797,7 +33029,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -36841,7 +33073,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -36885,7 +33117,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -36929,7 +33161,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -36973,7 +33205,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37017,7 +33249,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37061,7 +33293,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37105,7 +33337,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37149,7 +33381,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37193,7 +33425,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37237,7 +33469,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37281,7 +33513,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37325,7 +33557,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37369,7 +33601,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37413,7 +33645,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37457,7 +33689,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37501,7 +33733,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37545,7 +33777,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37589,7 +33821,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37633,7 +33865,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37677,7 +33909,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37721,7 +33953,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37765,7 +33997,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37809,7 +34041,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37853,7 +34085,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37897,7 +34129,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37941,7 +34173,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -37985,7 +34217,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -38029,7 +34261,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ [key: string]: PerseusImageDetail; }`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ // The width of the image @@ -38044,8 +34276,41 @@ the available choices.`}]}}],raw:`Readonly<{ */ replace?: boolean; }`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -38089,46 +34354,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -38172,21 +34398,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -38230,471 +34442,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - selected: boolean; - crossedOut: boolean; - highlighted: boolean; - rationaleShown: boolean; - correctnessShown: boolean; - previouslyAnswered: boolean; - readOnly: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},trackInteraction:{required:!0,tsType:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"TrackingExtraArgs"},name:"extraData"}],return:{name:"void"}}},description:""},isLastUsedWidget:{required:!0,tsType:{name:"boolean"},description:""},linterContext:{required:!1,tsType:{name:"LinterContextProps"},description:"",defaultValue:{value:"linterContextDefault",computed:!0}},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},values:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[]",computed:!1}},items:{defaultValue:{value:"[]",computed:!1},required:!1},categories:{defaultValue:{value:"[]",computed:!1},required:!1}}};const od=t=>!!(t&&t.toLowerCase()==="file:");let Kt;const ld=()=>(Kt||(Kt=window.location),Kt),ud=t=>new URL(t,ld().origin),As=t=>ud(t).href;function ai(t){return t.status==="correct"?{type:"points",earned:1,total:1,message:t.message||null}:t.status==="incorrect"?{type:"points",earned:0,total:1,message:t.message||null}:{type:"invalid",message:"Keep going, you're not there yet!"}}const{updateQueryString:dd}=z;function yd(t){const{InitialRequestUrl:e}=Te(),r=`/computer-programming/program/${t}/embedded?embed=yes&author=no`;return od(e.protocol)?`https://khanacademy.org${r}`:As(r)}const ba=class ba extends k.Component{constructor(){super(...arguments),this.handleMessageEvent=e=>{let r={};try{r=JSON.parse(e.originalEvent.data)}catch{return}if(g.isUndefined(r.testsPassed))return;const n=r.testsPassed?"correct":"incorrect";this.change({status:n,message:r.message})},this.change=(...e)=>ne.apply(this,e)}static validate(e){return ai(e)}componentDidMount(){_(window).on("message",this.handleMessageEvent)}componentWillUnmount(){_(window).off("message",this.handleMessageEvent)}getUserInput(){return{status:this.props.status,message:this.props.message}}simpleValidate(){return ai(this.getUserInput())}render(){if(!this.props.programID)return d("div",{});let e=!1,r=yd(this.props.programID),n;const a={height:this.props.height,width:"100%"};if(this.props.showEditor?(r+="&editor=yes",n="perseus-scratchpad-editor"):(r+=`&editor=no&width=${ru}`,n="perseus-scratchpad",this.props.programType!=="webpage"&&(e=!0)),this.props.showButtons?(r+="&buttons=yes",a.height+=67):r+="&buttons=no",this.props.settings){const s={};g.each(this.props.settings,function(o){o.name&&o.value&&(s[o.name]=o.value)}),r=dd(r,"settings",JSON.stringify(s))}const i=["allow-popups","allow-same-origin","allow-scripts","allow-top-navigation"].join(" ");return d("div",{className:j.css(ii.widthOverride,e&&ii.container),children:d("iframe",{sandbox:i,src:r,style:a,className:n,allowFullScreen:!0})})}};ba.defaultProps={showEditor:!1,showButtons:!1,status:"incomplete",message:null};let ln=ba;const ii=j.StyleSheet.create({widthOverride:{width:820},container:{margin:"auto"}}),md={name:"cs-program",displayName:"CS Program",supportedAlignments:["block","full-width"],widget:ln,hidden:!0},Tt=class Tt extends k.Component{static validate(){return G()}getUserInput(){return{}}simpleValidate(){return G()}render(){return d(Il,{children:({activeDefinitionId:e,setActiveDefinitionId:r})=>d(nu,{content:d(au,{color:"white",style:gd.tooltipBody,closeButtonVisible:!0,children:d(H,{apiOptions:this.props.apiOptions,content:this.props.definition,widgets:this.props.widgets,strings:this.context.strings})}),opened:e===this.props.widgetId,onClose:()=>r(null),placement:"top",children:d(aa,{onClick:()=>{this.props.trackInteraction(),r(this.props.widgetId)},children:({hovered:n,focused:a,pressed:i})=>d("span",{style:{color:P.blue,borderBottom:n||a||i?`2px solid ${P.blue}`:"none"},children:this.props.togglePrompt})})})})}};Tt.contextType=M,Tt.defaultProps={togglePrompt:"define me",definition:"definition goes here"};let un=Tt;const gd={tooltipBody:{color:P.offBlack,fontSize:20,fontWeight:500,lineHeight:"30px"}},hd={name:"definition",displayName:"Definition",accessible:!0,defaultAlignment:"inline",widget:un,transform:t=>t},va=class va extends os.Component{static validate(){return G(1)}getUserInput(){return{}}simpleValidate(){return G(1)}render(){return d("div",{style:{paddingTop:8,paddingBottom:8},children:d(iu,{text:this.context.strings.deprecatedStandin,kind:"info",layout:"full-width"})})}};va.contextType=M;let dn=va;const pd={name:"deprecated-standin",displayName:"Deprecated Standin",widget:dn,hidden:!0};function si(t,e){const r=t.value;return r===0?{type:"invalid",message:null}:{type:"points",earned:e.choices[r-1].correct?1:0,total:1,message:null}}const fa=class fa extends k.Component{constructor(){super(...arguments),this.focus=()=>(V.findDOMNode(this).focus(),!0),this._handleChangeEvent=e=>{this._handleChange(parseInt(e.target.value))},this._handleChange=e=>{this.props.trackInteraction(),this.props.onChange({selected:e})}}static validate(e,r){return si(e,r)}getUserInput(){return{value:this.props.selected}}simpleValidate(e){return si(this.getUserInput(),e)}render(){const e=[d(Ua,{value:"0",disabled:!0,label:this.props.placeholder},"placeholder"),...this.props.choices.map((r,n)=>d(Ua,{value:String(n+1),label:r},String(n+1)))];return d("div",{onClick:r=>{r.stopPropagation()},onTouchStart:r=>{r.stopPropagation()},children:d(pu,{placeholder:"",onChange:r=>this._handleChange(parseInt(r)),selectedValue:String(this.props.selected),disabled:this.props.apiOptions.readOnly,children:e})})}};fa.defaultProps={choices:[],selected:0,placeholder:"",apiOptions:ge.defaults};let yn=fa;const cd=t=>({placeholder:t.placeholder,choices:t.choices.map(e=>e.content)}),bd={name:"dropdown",displayName:"Drop down",defaultAlignment:"inline-block",accessible:!0,widget:yn,transform:cd},vd=""+new URL("caret-down-p-qg5kuR.svg",import.meta.url).href,fd=""+new URL("caret-up-GYuL-R7P.svg",import.meta.url).href;function wd(t){return typeof window.matchMedia!="function"?!1:window.matchMedia(t).matches}const At=class At extends k.Component{constructor(){super(...arguments),this.state={expanded:!1},this._mounted=!1,this.change=(...e)=>ne.apply(this,e),this._onClick=()=>{this.setState({expanded:!this.state.expanded}),this.props.trackInteraction()}}static validate(){return G()}componentDidMount(){this._mounted=!0}componentWillUnmount(){this._mounted=!1}getUserInput(){return{}}simpleValidate(){return G()}render(){const e=this.state.expanded?this.props.hidePrompt:this.props.showPrompt,r=this.state.expanded?fd:vd,n=this._mounted&&wd("(prefers-reduced-motion: no-preference)"),a={height:"auto",lineHeight:"inherit",marginLeft:"-2px",marginRight:"2px",paddingLeft:"2px"},i={fontSize:"18px",lineHeight:"inherit","text-align":"left",marginRight:"-6px","white-space":"normal"},s=[er.content,this.state.expanded?er.contentExpanded:er.contentCollapsed,n&&(this.state.expanded?er.transitionExpanded:er.transitionCollapsed)];return d(Pl,{mockOnFirstRender:!0,scope:"explanation-widget",children:o=>q(U,{children:[d(Xe,{"aria-expanded":this.state.expanded,"aria-controls":o.get("content"),endIcon:r,kind:"tertiary",labelStyle:i,onClick:this._onClick,size:"small",style:a,children:e}),d(K,{id:o.get("content"),style:s,"aria-hidden":!this.state.expanded,testId:"content-container",children:d(K,{style:er.contentWrapper,children:d(H,{apiOptions:this.props.apiOptions,content:this.props.explanation,widgets:this.props.widgets,linterContext:this.props.linterContext,strings:this.context.strings})})})]})})}};At.contextType=M,At.defaultProps={showPrompt:"Explain",hidePrompt:"Hide explanation",explanation:`explanation goes here - -more explanation`,widgets:{},linterContext:B};let mn=At;const oi=23,kd=10,li=14,er=j.StyleSheet.create({content:{borderLeft:"0px solid #ccc",display:"inline-grid",position:"relative"},contentCollapsed:{gridTemplateColumns:"0fr",gridTemplateRows:"0fr",marginBottom:0,marginTop:0,minWidth:"0",paddingBottom:0,visibility:"hidden"},contentExpanded:{borderLeftWidth:"5px",gridTemplateColumns:"1fr",gridTemplateRows:"1fr",marginLeft:-oi,minWidth:"100%",paddingLeft:oi,paddingBottom:kd,visibility:"visible",marginBottom:li,marginTop:li},contentWrapper:{overflow:"hidden"},transitionCollapsed:{transition:"all 0.25s step-end, grid-template-rows 0.25s, margin-top 0.25s, margin-bottom 0.25s, padding-bottom 0.25s"},transitionExpanded:{transition:"grid-template-rows 0.5s, margin-top 0.5s, margin-bottom 0.5s, padding-bottom 0.5s"}}),qd={name:"explanation",displayName:"Explanation",accessible:!0,defaultAlignment:"inline",widget:mn,transform:g.identity,isLintable:!0},wa=class wa extends k.Component{render(){const{apiOptions:e,answerBarState:r,onCheckAnswer:n,onNextQuestion:a}=this.props,{keepTrying:i,tryAgain:s,check:o,correctExcited:l,nextQuestion:u}=this.context.strings,y={...$r.answerBar,backgroundColor:r==="CORRECT"?P.offWhite:"white",justifyContent:r==="CORRECT"&&!a?"center":"space-between"},m=r==="INCORRECT"?q("span",{style:$r.text,children:[d("span",{style:$r.tryAgainIcon,children:d(or,{...Ql})}),d("span",{style:{marginLeft:8},children:i})]}):d("span",{});if(r!=="CORRECT"){const h=r==="INCORRECT"?s:o;return q("div",{style:y,children:[m,d(Xe,{disabled:e.readOnly||r!=="ACTIVE",onClick:n,children:h})]})}return q("div",{style:y,children:[q("span",{style:$r.text,children:[d("span",{style:{fontSize:28,color:P.green},children:d(or,{...Jl,style:{marginBottom:5}})}),d("span",{role:"alert","aria-label":l,style:{marginLeft:8},children:l})]}),a&&d(Xe,{onClick:a,children:u})]})}};wa.contextType=M;let dt=wa;const Td=17,$r={answerBar:{display:"flex",alignItems:"center",height:68,marginLeft:Ge,marginRight:Ge,marginBottom:Ge,marginTop:Le,paddingLeft:Le,paddingRight:10,borderTop:`1px solid ${P.offBlack50}`},tryAgainIcon:{fontSize:28,color:"#63D9EA",transform:"scale(-1,1) rotate(-268deg)"},text:{display:"flex",flexDirection:"row",alignItems:"center",fontWeight:"bold",fontSize:Td}};dt.__docgenInfo={description:"",methods:[],displayName:"GradedGroupAnswerBar",props:{answerBarState:{required:!0,tsType:{name:"union",raw:`| "HIDDEN" // The 'Check' button is disabled and there is no message. This occurs when -// some of the widgets haven't been filled in after the has already become -// visible. -| "ACTIVE" // This happens immediately after clicking 'Check' with a wrong answer. -// The 'Check' button is disabled and the 'Try Again' message is displayed. -| "INACTIVE" // Final state. This occurs after the user submits the correct answer. -// The widgets in this grade-group are disabled. -| "INCORRECT" -| "CORRECT"`,elements:[{name:"literal",value:'"HIDDEN"'},{name:"literal",value:'"ACTIVE"'},{name:"literal",value:'"INACTIVE"'},{name:"literal",value:'"INCORRECT"'},{name:"literal",value:'"CORRECT"'}]},description:""},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -38738,7 +34486,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -38782,7 +34530,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -38826,7 +34574,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -38870,7 +34618,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -38914,7 +34662,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -38958,7 +34706,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39002,7 +34750,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39046,7 +34794,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39090,7 +34838,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39134,7 +34882,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39178,7 +34926,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39222,7 +34970,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39266,7 +35014,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39310,7 +35058,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39354,7 +35102,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39398,7 +35146,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39442,7 +35190,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39486,7 +35234,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39530,7 +35278,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39574,7 +35322,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39618,7 +35366,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39662,7 +35410,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39706,7 +35454,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39750,7 +35498,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39794,7 +35542,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39838,7 +35586,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39882,7 +35630,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39926,7 +35674,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -39970,7 +35718,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40014,7 +35762,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40058,7 +35806,79 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ + _multi: ItemTree; +}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40102,7 +35922,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40146,400 +35966,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},description:""},onCheckAnswer:{required:!0,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},onNextQuestion:{required:!1,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""}}};const Ae={ungraded:"ungraded",correct:"correct",incorrect:"incorrect",invalid:"invalid"},Ad=(t,e)=>{switch(t){case"HIDDEN":return e?"ACTIVE":t;case"ACTIVE":return e?t:"INACTIVE";case"INACTIVE":return e?"ACTIVE":t;case"INCORRECT":return e?"ACTIVE":"INACTIVE";default:return t}},Rt=class Rt extends k.Component{constructor(){super(...arguments),this.state={status:Ae.ungraded,showHint:!1,message:"",answerBarState:"HIDDEN"},this.change=(...e)=>ne.apply(this,e),this._onInteractWithWidget=e=>{if(this.setState({status:Ae.ungraded,message:""}),this.refs.renderer){this.change("widgets",this.props.widgets);const n=this.refs.renderer.emptyWidgets().length===0,a=this.state.answerBarState;this.setState({answerBarState:Ad(a,n)})}},this._checkAnswer=()=>{this.refs.renderer.showRationalesForCurrentlySelectedChoices();const e=this.refs.renderer.score(),{INVALID_MESSAGE_PREFIX:r,DEFAULT_INVALID_MESSAGE_1:n,DEFAULT_INVALID_MESSAGE_2:a}=this.context.strings,i=e.type==="points"?e.total===e.earned?Ae.correct:Ae.incorrect:Ae.invalid,s=e.type==="points"?e.message||"":e.message?`${r} ${e.message}`:`${r} ${n}${a}`;this.setState({status:i,message:s,answerBarState:i==="correct"?"CORRECT":"INCORRECT"}),this.props.trackInteraction({status:i})},this.getInputPaths=()=>this.refs.renderer.getInputPaths(),this.setInputValue=(e,r,n)=>this.refs.renderer.setInputValue(e,r,n),this.focus=()=>this.refs.renderer.focus(),this.focusInputPath=e=>{this.refs.renderer.focusPath(e)},this.blurInputPath=e=>{this.refs.renderer.blurPath(e)}}shouldComponentUpdate(e,r){return e!==this.props||r!==this.state}render(){const e=g.extend({},ge.defaults,this.props.apiOptions,{onFocusChange:(u,y)=>{y&&this.props.onBlur(y),u&&this.props.onFocus(u)}});let r=null,n=null;this.state.status===Ae.correct?(n=d(or,{...Zl,style:{color:"#526f03"}}),r=this.context.strings.correct):this.state.status===Ae.incorrect&&(n=d(or,{...eu,style:{color:"#ff5454"}}),r=this.context.strings.incorrect);const a=this.props.inGradedGroupSet?j.css(kr.gradedGroupInSet):j.css(kr.gradedGroup),i=We({[a]:e.isMobile,"perseus-graded-group":!0,"answer-correct":e.isMobile?!1:this.state.status===Ae.correct,"answer-incorrect":e.isMobile?!1:this.state.status===Ae.incorrect}),{answerBarState:s}=this.state,o=s==="CORRECT",l=e.readOnly||e.isMobile&&o;return q("div",{className:i,children:[!!this.props.title&&d("div",{className:j.css(kr.title),children:this.props.title}),d(H,{...this.props,ref:"renderer",apiOptions:{...e,readOnly:l},onInteractWithWidget:this._onInteractWithWidget,linterContext:this.props.linterContext,strings:this.context.strings}),!e.isMobile&&n&&d("div",{className:"group-icon",children:n}),!e.isMobile&&r&&d("div",{className:j.css(St.srOnly),role:"alert","aria-label":r,children:r}),!e.isMobile&&d("p",{role:"status","aria-live":"polite",children:this.state.message}),!e.isMobile&&d(Xe,{kind:"secondary",disabled:this.props.apiOptions.readOnly,onClick:this._checkAnswer,children:this.context.strings.check}),!e.isMobile&&o&&this.props.onNextQuestion&&d(Xe,{kind:"secondary",disabled:this.props.apiOptions.readOnly,onClick:this.props.onNextQuestion,style:{marginLeft:5},children:this.context.strings.nextQuestion}),this.props.hint&&this.props.hint.content&&(this.state.showHint?q("div",{children:[d("button",{tabIndex:"0",className:j.css(kr.explanationTitle),onClick:()=>this.setState({showHint:!1}),onKeyPress:u=>{u.preventDefault(),this.setState({showHint:!1})},children:this.context.strings.hideExplanation}),d(H,{...this.props.hint,ref:"hints-renderer",apiOptions:e,linterContext:this.props.linterContext,strings:this.context.strings})]}):d("button",{tabIndex:"0",onClick:()=>this.setState({showHint:!0}),onKeyPress:u=>{u.preventDefault(),this.setState({showHint:!0})},className:j.css(kr.showHintLink),children:this.context.strings.explain})),e.isMobile&&s!=="HIDDEN"&&d(dt,{apiOptions:e,answerBarState:s,onCheckAnswer:this._checkAnswer,onNextQuestion:this.props.onNextQuestion})]})}};Rt.contextType=M,Rt.defaultProps={title:"",content:"",widgets:{},images:{},hint:null,hasHint:!1,linterContext:B};let ur=Rt;const Rd=function(t,e){return g.extend({},t,e(t))},kr=j.StyleSheet.create({gradedGroupInSet:{marginLeft:0,paddingLeft:0},gradedGroup:{borderTop:`1px solid ${it}`,borderBottom:`1px solid ${it}`,backgroundColor:ms,marginLeft:Ge,marginRight:Ge,paddingBottom:Le,paddingLeft:Le,paddingRight:Le,paddingTop:10,width:"auto"},showHintLink:{backgroundColor:"unset",fontSize:14,padding:0,border:"none",marginTop:20,color:P.blue,cursor:"pointer",display:"block",clear:"both"},explanationTitle:{backgroundColor:"unset",marginTop:20,color:P.blue,marginBottom:10,cursor:"pointer",fontSize:14,padding:0,border:"none",display:"block",clear:"both"},title:{fontSize:12,color:tu,textTransform:"uppercase",marginBottom:11,letterSpacing:.8}}),Od={name:"graded-group",displayName:"Graded group (articles only)",widget:ur,traverseChildWidgets:Rd,hidden:!1,tracking:"all",isLintable:!0};ur.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"_onInteractWithWidget",docblock:null,modifiers:[],params:[{name:"id",optional:!1,type:null}],returns:null},{name:"_checkAnswer",docblock:null,modifiers:[],params:[],returns:null},{name:"getInputPaths",docblock:null,modifiers:[],params:[],returns:null},{name:"setInputValue",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:null},{name:"newValue",optional:!1,type:null},{name:"cb",optional:!1,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"focusInputPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:null}],returns:null},{name:"blurInputPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:null}],returns:null}],displayName:"GradedGroup",props:{widgetId:{required:!0,tsType:{name:"string"},description:""},alignment:{required:!0,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},problemNum:{required:!0,tsType:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},description:""},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40583,7 +36010,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40627,7 +36054,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40671,7 +36098,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40715,7 +36142,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40759,7 +36186,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40803,7 +36230,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40847,7 +36274,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40891,7 +36318,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40935,7 +36362,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -40979,7 +36406,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41023,7 +36450,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41067,7 +36494,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41111,7 +36538,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41155,7 +36582,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41199,7 +36626,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41243,7 +36670,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41287,7 +36714,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41331,7 +36758,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41375,7 +36802,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41419,7 +36846,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41463,7 +36890,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41507,7 +36934,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41551,7 +36978,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41595,7 +37022,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41639,7 +37066,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41683,7 +37110,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41727,7 +37154,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41771,7 +37198,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41815,7 +37242,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41859,7 +37286,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41903,7 +37330,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41947,7 +37374,54 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -41991,265 +37465,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},{name:"signature",type:"object",raw:`{ - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< - APIOptions["setDrawingAreaAvailable"] ->`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< - APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; - } ->`},description:""},keypadElement:{required:!1,tsType:{name:"any"},description:""},questionCompleted:{required:!1,tsType:{name:"boolean"},description:""},onFocus:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},onBlur:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},findWidgets:{required:!0,tsType:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray"}}},description:""},reviewModeRubric:{required:!0,tsType:{name:"Rubric"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`( - arg1: { - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; - }, - callback?: () => unknown | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; -}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; - }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42293,7 +37509,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42337,7 +37553,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42381,7 +37597,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42425,7 +37641,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42469,7 +37685,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42513,7 +37729,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42557,7 +37773,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42601,7 +37817,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42645,7 +37861,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42689,7 +37905,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42733,7 +37949,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42777,7 +37993,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42821,7 +38037,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42865,7 +38081,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42909,7 +38125,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42953,7 +38169,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -42997,7 +38213,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43041,7 +38257,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43085,7 +38301,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43129,7 +38345,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43173,7 +38389,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43217,7 +38433,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43261,7 +38477,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43305,7 +38521,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43349,7 +38565,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43393,7 +38609,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43437,7 +38653,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43481,7 +38697,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43525,7 +38741,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43569,7 +38785,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43613,7 +38829,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43657,7 +38873,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43701,23 +38917,279 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + selected: boolean; + crossedOut: boolean; + highlighted: boolean; + rationaleShown: boolean; + correctnessShown: boolean; + previouslyAnswered: boolean; + readOnly: boolean; +}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle +| PerseusGraphTypeCircle +| PerseusGraphTypeLinear +| PerseusGraphTypeLinearSystem +| PerseusGraphTypeNone +| PerseusGraphTypePoint +| PerseusGraphTypePolygon +| PerseusGraphTypeQuadratic +| PerseusGraphTypeRay +| PerseusGraphTypeSegment +| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ + type: "angle"; + // Whether to show the angle measurements. default: false + showAngles?: boolean; + // Allow Reflex Angles if an "angle" type. default: true + allowReflexAngles?: boolean; + // The angle offset in degrees if an "angle" type. default: 0 + angleOffsetDeg?: number; + // Snap to degree increments if an "angle" type. default: 1 + snapDegrees?: number; + // How to match the answer. If missing, defaults to exact matching. + match?: "congruent"; + // must have 3 coords - ie [Coord, Coord, Coord] + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ + type: "circle"; + center?: Coord; + radius?: number; + // The initial coordinates the graph renders with. + startCoords?: { + center: Coord; + radius: number; + }; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "circle"; + center?: Coord; + radius?: number; + // The initial coordinates the graph renders with. + startCoords?: { + center: Coord; + radius: number; + }; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ + center: Coord; + radius: number; +}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "linear"; + // expects 2 coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "linear"; + // expects 2 coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "linear-system"; + // expects 2 sets of 2 coords + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "linear-system"; + // expects 2 sets of 2 coords + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ + type: "none"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ + type: "point"; + // The number of points if a "point" type. default: 1. "unlimited" if no limit + numPoints?: number | "unlimited"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "point"; + // The number of points if a "point" type. default: 1. "unlimited" if no limit + numPoints?: number | "unlimited"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "polygon"; + // The number of sides. default: 3. "unlimited" if no limit + numSides?: number | "unlimited"; + // Whether to the angle measurements. default: false + showAngles?: boolean; + // Whether to show side measurements. default: false + showSides?: boolean; + // How to snap points. e.g. "grid", "angles", or "sides". default: grid + snapTo?: "grid" | "angles" | "sides"; + // How to match the answer. If missing, defaults to exact matching. + match?: "similar" | "congruent" | "approx"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "polygon"; + // The number of sides. default: 3. "unlimited" if no limit + numSides?: number | "unlimited"; + // Whether to the angle measurements. default: false + showAngles?: boolean; + // Whether to show side measurements. default: false + showSides?: boolean; + // How to snap points. e.g. "grid", "angles", or "sides". default: grid + snapTo?: "grid" | "angles" | "sides"; + // How to match the answer. If missing, defaults to exact matching. + match?: "similar" | "congruent" | "approx"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "quadratic"; + // expects a list of 3 coords + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "quadratic"; + // expects a list of 3 coords + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "ray"; + // Expects a list of 2 Coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "ray"; + // Expects a list of 2 Coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "segment"; + // The number of segments if a "segment" type. default: 1. Max: 6 + numSegments?: number; + // Expects a list of Coord tuples. Length should match the \`numSegments\` value. + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "segment"; + // The number of segments if a "segment" type. default: 1. Max: 6 + numSegments?: number; + // Expects a list of Coord tuples. Length should match the \`numSegments\` value. + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "sinusoid"; + // Expects a list of 2 Coords + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "sinusoid"; + // Expects a list of 2 Coords + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"Empty"},name:"extraData"}],return:{name:"void"}},required:!0}},{key:"isLastUsedWidget",value:{name:"boolean",required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}},{key:"containerSizeClass",value:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]",required:!0}}]}}],alias:"Props"}}],returns:{type:{name:"signature",type:"object",raw:`{ + countChoices?: boolean; + choicesSelected: ReadonlyArray; + numCorrect?: number; + noneOfTheAboveIndex?: number | null | undefined; + noneOfTheAboveSelected?: boolean; +}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]}}}},{name:"_renderRenderer",docblock:null,modifiers:[],params:[{name:"content",optional:!0,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!0,type:{name:"union",raw:"number | null",elements:[{name:"number"},{name:"null"}]}}],returns:{type:{name:"boolean"}}},{name:"registerFocusFunction",docblock:null,modifiers:[],params:[{name:"fun",optional:!1,type:{name:"signature",type:"function",raw:`( + choiceIndex?: number | null | undefined, +) => boolean`,signature:{arguments:[{type:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},name:"choiceIndex"}],return:{name:"boolean"}},alias:"FocusFunction"}}],returns:{type:{name:"void"}}},{name:"updateChoices",docblock:null,modifiers:[],params:[{name:"newValueLists",optional:!1,type:null}],returns:null},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"signature",type:"object",raw:`{ + countChoices?: boolean; + choicesSelected: ReadonlyArray; + numCorrect?: number; + noneOfTheAboveIndex?: number | null | undefined; + noneOfTheAboveSelected?: boolean; +}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]}}}},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // The choices provided to the user. + choices: ReadonlyArray; + // Does this have a "none of the above" option? + // NOTE: perseus_data.go says this is required even though it isn't necessary. + hasNoneOfTheAbove?: boolean; + // If multipleSelect is enabled, Specify the number expected to be correct. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + countChoices?: boolean; + // Randomize the order of the options or keep them as defined + // NOTE: perseus_data.go says this is required even though it isn't necessary. + randomize?: boolean; + // Does this set allow for multiple selections to be correct? + // NOTE: perseus_data.go says this is required even though it isn't necessary. + multipleSelect?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + deselectEnabled?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + onePerLine?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + displayCount?: any; + // v0 props + // \`noneOfTheAbove\` is still in use (but only set to \`false\`). + noneOfTheAbove?: false; +}`,signature:{properties:[{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + // Translatable Markdown; The label for this choice + content: string; + // Translatable Markdown; A clue to give the user when they get it wrong + // NOTE: perseus_data.go says this is required even though it isn't necessary. + clue?: string; + // Whether this option is a correct answer or not + // NOTE: perseus_data.go says this is required even though it isn't necessary. + correct?: boolean; + // If this is none of the above, override the content with "None of the above" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + isNoneOfTheAbove?: boolean; + // deprecated + // NOTE: perseus_data.go says this is required even though it isn't necessary. + widgets?: PerseusWidgetsMap; +}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"clue",value:{name:"string",required:!1}},{key:"correct",value:{name:"boolean",required:!1}},{key:"isNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43761,46 +39233,51 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ // The major part of the version major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43844,21 +39321,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -43902,445 +39365,20241 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - selected: boolean; - crossedOut: boolean; - highlighted: boolean; - rationaleShown: boolean; - correctnessShown: boolean; - previouslyAnswered: boolean; - readOnly: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},trackInteraction:{required:!0,tsType:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"TrackingExtraArgs"},name:"extraData"}],return:{name:"void"}}},description:""},isLastUsedWidget:{required:!0,tsType:{name:"boolean"},description:""},linterContext:{required:!1,tsType:{name:"LinterContextProps"},description:"",defaultValue:{value:"linterContextDefault",computed:!0}},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},inGradedGroupSet:{required:!1,tsType:{name:"boolean"},description:""},onNextQuestion:{required:!1,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},title:{defaultValue:{value:'""',computed:!1},required:!1},content:{defaultValue:{value:'""',computed:!1},required:!1},widgets:{defaultValue:{value:"{}",computed:!1},required:!1},images:{defaultValue:{value:"{}",computed:!1},required:!1},hint:{defaultValue:{value:"null",computed:!1},required:!1},hasHint:{defaultValue:{value:"false",computed:!1},required:!1}}};const ka=class ka extends k.Component{constructor(){super(...arguments),this.handleKeyDown=(e,r)=>{(e.key==="Enter"||e.key===" ")&&this.props.onChangeCurrentGroup(r)}}render(){return d("ul",{className:We(j.css(ce.indicatorContainer),"indicatorContainer"),children:this.props.gradedGroups.map(({title:e},r)=>d("li",{className:j.css(ce.indicator),children:d(aa,{role:"button","aria-label":this.context.strings.skipToTitle({title:e}),style:ce.indicatorButton,onClick:()=>this.props.onChangeCurrentGroup(r),onKeyDown:n=>this.handleKeyDown(n,r),children:({hovered:n,focused:a,pressed:i})=>d(K,{style:[ce.indicatorDot,(n||a||i)&&ce.indicatorDotFocused],children:r===this.props.currentGroup&&d(K,{style:ce.indicatorDotActive,children:d("span",{className:j.css(St.srOnly),children:this.context.strings.current})})})})},e))})}};ka.contextType=M;let gn=ka;const qa=class qa extends k.Component{constructor(){super(...arguments),this.state={currentGroup:0},this.change=(...e)=>ne.apply(this,e),this.getInputPaths=()=>this._childGroup.getInputPaths(),this.setInputValue=(e,r,n)=>this._childGroup.setInputValue(e,r,n),this.focus=()=>this._childGroup.focus(),this.focusInputPath=e=>{this._childGroup.focusInputPath(e)},this.blurInputPath=e=>{this._childGroup.blurInputPath(e)},this.handleNextQuestion=()=>{const{currentGroup:e}=this.state,r=this.props.gradedGroups.length;e1)return d("div",{className:j.css(ce.container),children:this.props.gradedGroups.map((i,s)=>d(ur,{...this.props,...i,inGradedGroupSet:!1,linterContext:this.props.linterContext},s))});const r=this.props.gradedGroups[this.state.currentGroup];if(!r)return d("span",{children:"No current group..."});const n=this.props.gradedGroups.length,a=this.state.currentGroupthis.setState({currentGroup:i})})]}),d(ur,{ref:i=>this._childGroup=i,...this.props,...r,inGradedGroupSet:!0,title:null,onNextQuestion:a,linterContext:this.props.linterContext},this.state.currentGroup)]})}};qa.defaultProps={gradedGroups:[],linterContext:B};let hn=qa;const xd=function(t,e){return{groups:t.gradedGroups.map(e)}},jd={name:"graded-group-set",displayName:"Graded group set (articles only)",widget:hn,traverseChildWidgets:xd,hidden:!1,tracking:"all",isLintable:!0},ce=j.StyleSheet.create({top:{display:"flex",flexDirection:"row"},spacer:{flex:1},title:{fontSize:12,color:P.offBlack64,textTransform:"uppercase",marginBottom:11,letterSpacing:.8},indicatorContainer:{display:"flex",flexDirection:"row",listStyle:"none",margin:"unset",paddingInlineStart:"unset",flexWrap:"wrap"},indicator:{width:24,height:24},indicatorButton:{width:"100%",height:"100%",display:"flex",flexWrap:"wrap",placeContent:"center",cursor:"pointer",":focus":{outline:"none"}},indicatorDot:{boxSizing:"content-box",width:10,height:10,borderRadius:"100%",borderWidth:2,borderColor:P.blue,borderStyle:"solid"},indicatorDotFocused:{borderWidth:5,borderStyle:"double"},indicatorDotActive:{backgroundColor:P.blue,width:"100%",height:"100%"},container:{borderTop:`1px solid ${it}`,borderBottom:`1px solid ${it}`,backgroundColor:ms,marginLeft:Ge,marginRight:Ge,paddingBottom:Le,paddingLeft:Le,paddingRight:Le,paddingTop:10,width:"auto"}}),Wd=Y.Plot,Rs={url:null};function ui(t){let e=t[0],r=t[1],n=t[2];const a=t[3];e<0&&(e*=-1,r*=-1,n*=-1);const i=2*Math.PI;for(r<0&&(r*=-1,n*=-1,n+=i/2);n>0;)n-=i;for(;n<0;)n+=i;return[e,r,n,a]}function di(t){let e=t[0],r=t[1],n=t[2];const a=t[3];e<0&&(e*=-1,r*=-1,n*=-1);const i=Math.PI;for(r<0&&(r*=-1,n*=-1,n+=i/2);n>0;)n-=i;for(;n<0;)n+=i;return[e,r,n,a]}const Je={areEqual:function(t,e){return z.deepEq(t,e)},Movable:Wd,getPropsForCoeffs:function(t){return{fn:g.partial(this.getFunctionForCoeffs,t)}}},Cd=g.extend({},Je,{url:"https://ka-perseus-graphie.s3.amazonaws.com/67aaf581e6d9ef9038c10558a1f70ac21c11c9f8.png",defaultCoords:[[.25,.75],[.75,.75]],getCoefficients:function(t){const e=t[0],r=t[1],n=r[0]-e[0],a=r[1]-e[1];if(n===0)return;const i=a/n,s=r[1]-i*r[0];return[i,s]},getFunctionForCoeffs:function(t,e){const r=t[0],n=t[1];return r*e+n},getEquationString:function(t){const e=this.getCoefficients(t),r=e[0],n=e[1];return"y = "+r.toFixed(3)+"x + "+n.toFixed(3)}}),Id=g.extend({},Je,{url:"https://ka-perseus-graphie.s3.amazonaws.com/e23d36e6fc29ee37174e92c9daba2a66677128ab.png",defaultCoords:[[.5,.5],[.75,.75]],Movable:Y.Parabola,getCoefficients:function(t){const e=t[0],r=t[1],n=e[0],a=e[1],i=(r[1]-a)/((r[0]-n)*(r[0]-n)),s=-2*n*i,o=i*n*n+a;return[i,s,o]},getFunctionForCoeffs:function(t,e){const r=t[0],n=t[1],a=t[2];return(r*e+n)*e+a},getPropsForCoeffs:function(t){return{a:t[0],b:t[1],c:t[2]}},getEquationString:function(t){const e=this.getCoefficients(t),r=e[0],n=e[1],a=e[2];return"y = "+r.toFixed(3)+"x^2 + "+n.toFixed(3)+"x + "+a.toFixed(3)}}),Nd=g.extend({},Je,{url:"https://ka-perseus-graphie.s3.amazonaws.com/3d68e7718498475f53b206c2ab285626baf8857e.png",defaultCoords:[[.5,.5],[.6,.6]],Movable:Y.Sinusoid,getCoefficients:function(t){const e=t[0],r=t[1],n=r[1]-e[1],a=Math.PI/(2*(r[0]-e[0])),i=e[0]*a,s=e[1];return[n,a,i,s]},getFunctionForCoeffs:function(t,e){const r=t[0],n=t[1],a=t[2],i=t[3];return r*Math.sin(n*e-a)+i},getPropsForCoeffs:function(t){return{a:t[0],b:t[1],c:t[2],d:t[3]}},getEquationString:function(t){const e=this.getCoefficients(t),r=e[0],n=e[1],a=e[2],i=e[3];return"y = "+r.toFixed(3)+" sin("+n.toFixed(3)+"x - "+a.toFixed(3)+") + "+i.toFixed(3)},areEqual:function(t,e){return z.deepEq(ui(t),ui(e))}}),Ed=g.extend({},Je,{url:"https://ka-perseus-graphie.s3.amazonaws.com/7db80d23c35214f98659fe1cf0765811c1bbfbba.png",defaultCoords:[[.5,.5],[.75,.75]],getCoefficients:function(t){const e=t[0],r=t[1],n=r[1]-e[1],a=Math.PI/(4*(r[0]-e[0])),i=e[0]*a,s=e[1];return[n,a,i,s]},getFunctionForCoeffs:function(t,e){const r=t[0],n=t[1],a=t[2],i=t[3];return r*Math.tan(n*e-a)+i},getEquationString:function(t){const e=this.getCoefficients(t),r=e[0],n=e[1],a=e[2],i=e[3];return"y = "+r.toFixed(3)+" sin("+n.toFixed(3)+"x - "+a.toFixed(3)+") + "+i.toFixed(3)},areEqual:function(t,e){return z.deepEq(di(t),di(e))}}),Os=g.extend({},Je,{url:"https://ka-perseus-graphie.s3.amazonaws.com/9cbfad55525e3ce755a31a631b074670a5dad611.png",defaultCoords:[[.5,.55],[.75,.75]],defaultAsymptote:[[0,.5],[1,.5]],extraCoordConstraint:function(t,e,r,n,a){const i=g.head(n)[1];return g.all(r,s=>s[1]!==i)},extraAsymptoteConstraint:function(t,e,r,n,a){const i=t[1];if(g.all(r,y=>y[1]>i)||g.all(r,y=>y[1]y[1]>o)){const y=g.min(g.map(r,m=>m[1]));return[e[0],y-a.snapStep[1]]}const u=g.max(g.map(r,y=>y[1]));return[e[0],u+a.snapStep[1]]},allowReflectOverAsymptote:!0,getCoefficients:function(t,e){const r=t[0],n=t[1],a=g.head(e)[1],i=Math.log((r[1]-a)/(n[1]-a))/(r[0]-n[0]);return[(r[1]-a)/Math.exp(i*r[0]),i,a]},getFunctionForCoeffs:function(t,e){const r=t[0],n=t[1],a=t[2];return r*Math.exp(n*e)+a},getEquationString:function(t,e){if(!e)return null;const r=this.getCoefficients(t,e),n=r[0],a=r[1],i=r[2];return"y = "+n.toFixed(3)+"e^("+a.toFixed(3)+"x) + "+i.toFixed(3)}}),Pd=g.extend({},Je,{url:"https://ka-perseus-graphie.s3.amazonaws.com/f6491e99d34af34d924bfe0231728ad912068dc3.png",defaultCoords:[[.55,.5],[.75,.75]],defaultAsymptote:[[.5,0],[.5,1]],extraCoordConstraint:function(t,e,r,n,a){const i=g.head(n)[0];return g.all(r,s=>s[0]!==i)&&r[0][1]!==r[1][1]},extraAsymptoteConstraint:function(t,e,r,n,a){const i=t[0];if(g.all(r,y=>y[0]>i)||g.all(r,y=>y[0]y[0]>o)?[g.min(g.map(r,m=>m[0]))-a.snapStep[0],e[1]]:[g.max(g.map(r,y=>y[0]))+a.snapStep[0],e[1]]},allowReflectOverAsymptote:!0,getCoefficients:function(t,e){const r=o=>[o[1],o[0]],n=Os.getCoefficients(g.map(t,r),g.map(e,r)),a=-n[2]/n[0],i=1/n[0];return[1/n[1],i,a]},getFunctionForCoeffs:function(t,e,r){const n=t[0],a=t[1],i=t[2];return n*Math.log(a*e+i)},getEquationString:function(t,e){if(!e)return null;const r=this.getCoefficients(t,e),n=r[0],a=r[1],i=r[2];return"y = ln("+n.toFixed(3)+"x + "+a.toFixed(3)+") + "+i.toFixed(3)}}),zd=g.extend({},Je,{url:"https://ka-perseus-graphie.s3.amazonaws.com/8256a630175a0cb1d11de223d6de0266daf98721.png",defaultCoords:[[.5,.5],[.75,.75]],getCoefficients:function(t){const e=t[0],r=t[1],n=r[0]-e[0],a=r[1]-e[1];if(n===0)return;let i=Math.abs(a/n);r[1]{const e=t.plot;return e.type&&e.coords&&fr(e.type).getEquationString(e.coords,e.asymptote)||""},js=(t,e,r,n)=>{const a=function(i,s){return Math.floor((i[1]-i[0])/s)};return t.map(i=>{const s=i.map((o,l)=>{const u=e[l],y=r[l],m=a(u,y),h=Math.round(o*m);return u[0]+y*h});return Fl(s,n)})},oa=(t,e,r,n)=>t&&js(t,e,r,n),$t=(t,e)=>{const r=fr(t),n=[1,1],a=z.snapStepFromGridStep(n);return{type:t,asymptote:oa(r.defaultAsymptote,e.range,e.step,a),coords:null}},Ws=g.first,pn=(t,e)=>{const r=t.gridStep||z.getGridStep(t.range,t.step,e),n=t.snapStep||z.snapStepFromGridStep(r);return{gridStep:r,snapStep:n}},Cs={labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],backgroundImage:Rs,markings:"graph",rulerLabel:"",rulerTicks:10,valid:!0,showTooltips:!1},yi=$t("linear",Cs),Is={graph:Cs,plot:yi,availableTypes:[yi.type]},Ns=t=>{const e=t.charAt(0).toUpperCase()+t.substring(1),r=Te().staticUrl;return{value:t,title:e,content:d("img",{src:r(fr(t).url),alt:e})}},Nc=Object.freeze(Object.defineProperty({__proto__:null,DEFAULT_BACKGROUND_IMAGE:Rs,DEFAULT_GRAPHER_PROPS:Is,allTypes:Ld,chooseType:Ws,defaultPlotProps:$t,functionForType:fr,getEquationString:_d,getGridAndSnapSteps:pn,maybePointsFromNormalized:oa,pointsFromNormalized:js,typeToButton:Ns},Symbol.toStringTag,{value:"Module"}));function mi(t,e){if(t.type!==e.correct.type)return{type:"points",earned:0,total:1,message:null};if(t.coords==null)return{type:"invalid",message:null};const r=fr(t.type),n=r.getCoefficients(t.coords,t.asymptote),a=r.getCoefficients(e.correct.coords,e.correct.asymptote);return n==null||a==null?{type:"invalid",message:null}:r.areEqual(n,a)?{type:"points",earned:1,total:1,message:null}:{type:"points",earned:0,total:1,message:null}}const gi=Y.MovablePoint,Fd=Y.MovableLine;function Sd(t,e,r){const n=(a,i,s)=>(i[0]-a[0])*(s[1]-a[1])-(s[0]-a[0])*(i[1]-a[1]);return n(r[0],r[1],e)>0!=n(r[0],r[1],t)>0}const Md={padding:"5px 5px"},Ta=class Ta extends k.Component{constructor(){super(...arguments),this._coords=()=>{const e=this.props,r=e.graph,n=e.model&&oa(e.model.defaultCoords,r.range,r.step,r.snapStep);return e.coords||n||null},this._asymptote=()=>this.props.asymptote,this.change=(...e)=>ne.apply(this,e),this.renderPlot=()=>{const e=this.props.model,r=this.props.graph.range[0],n={stroke:this.props.isMobile?I.BLUE_C:I.DYNAMIC,...this.props.isMobile?{"stroke-width":3}:{}},a=e.getCoefficients(this._coords(),this._asymptote());if(!a)return;const i=e.getPropsForCoeffs(a,r);return k.createElement(e.Movable,{...i,key:this.props.model.url,range:r,style:n})},this.renderAsymptote=()=>{const e=this.props.model,r=this.props.graph,n=this._asymptote(),a={strokeDasharray:"- "};return n&&d(Fd,{onMove:(i,s)=>{const o=_a(i,s),l=g.map(this._asymptote(),u=>Ir(u,o));this.props.onChange({asymptote:l})},constraints:[E.MovableLine.constraints.bound(),E.MovableLine.constraints.snap(),(i,s)=>{const o=_a(i,s),l=g.map(this._asymptote(),u=>Ir(u,o));return e.extraAsymptoteConstraint?e.extraAsymptoteConstraint(i,s,this._coords(),l,r):!0}],normalStyle:a,highlightStyle:a,children:g.map(n,(i,s)=>d(gi,{coord:i,static:!0,draw:null,extendLine:!0,showHairlines:this.props.showHairlines,hideHairlines:this.props.hideHairlines,showTooltips:this.props.showTooltips,isMobile:this.props.isMobile},`asymptoteCoord-${s}`))})}}render(){const e=(s,o)=>d(gi,{coord:s,static:this.props.static,constraints:[E.MovablePoint.constraints.bound(),E.MovablePoint.constraints.snap(),l=>{const u=g.all(this._coords(),(y,m)=>o===m||!y||!Qn(l[0],y[0]));if(!u)return!1;if(this.props.model&&this.props.model.extraCoordConstraint){const y=this.props.model.extraCoordConstraint,m=g.clone(this._coords()),h=g.clone(m[o]);return m[o]=l,y(l,h,m,this._asymptote(),this.props.graph)}return u}],onMove:(l,u)=>{let y;const m=this._asymptote();m&&this.props.model.allowReflectOverAsymptote&&Sd(l,u,m)?y=g.map(this._coords(),h=>Sl(h,m)):y=g.clone(this._coords()),y[o]=l,this.props.onChange({coords:y})},showHairlines:this.props.showHairlines,hideHairlines:this.props.hideHairlines,showTooltips:this.props.showTooltips,isMobile:this.props.isMobile},o),r=g.map(this._coords(),e),n=this.props.graph.box,a=this.props.graph.backgroundImage;let i=null;if(a.url){const s=n[0]/gs.defaultBoxSize;i=d(_r,{src:a.url,width:a.width,height:a.height,scale:s})}return d("div",{className:"perseus-widget perseus-widget-grapher",style:{width:n[0],height:n[1],boxSizing:"initial"},children:q("div",{className:"graphie-container above-scratchpad",style:{width:n[0],height:n[1]},children:[i,q(Y,{...this.props.graph,setDrawingAreaAvailable:this.props.setDrawingAreaAvailable,children:[this.props.model&&this.renderPlot(),this.props.model&&this.renderAsymptote(),this.props.model&&r]})]})})}};Ta.defaultProps={graph:{range:[[-10,10],[-10,10]],step:[1,1]},coords:null,asymptote:null,isMobile:!1};let cn=Ta;const Ot=class Ot extends k.Component{constructor(){super(...arguments),this.handlePlotChanges=e=>{const r=g.extend({},this.props.plot,e);this.props.onChange({plot:r}),this.props.trackInteraction()},this.handleActiveTypeChange=e=>{const r=this.props.graph,n=g.extend({},this.props.plot,$t(e,r));this.props.onChange({plot:n})},this._setupGraphie=(e,r)=>{const n=this.props.apiOptions.isMobile;if(r.markings==="graph"?(e.graphInit({range:r.range,scale:g.pluck(r.gridConfig,"scale"),axisArrows:"<->",labelFormat:function(a){return"\\small{"+a+"}"},gridStep:r.gridStep,snapStep:r.snapStep,tickStep:n?this._calculateMobileTickStep(r.gridStep,r.step,r.range):g.pluck(r.gridConfig,"tickStep"),labelStep:1,unityLabels:g.pluck(r.gridConfig,"unityLabel"),isMobile:n}),e.label([0,r.range[1][1]],r.labels[1],n?"below right":"above"),e.label([r.range[0][1],0],r.labels[0],n?"above left":"right")):r.markings==="grid"?e.graphInit({range:r.range,scale:g.pluck(r.gridConfig,"scale"),gridStep:r.gridStep,axes:!1,ticks:!1,labels:!1,isMobile:n}):r.markings==="none"&&e.init({range:r.range,scale:g.pluck(r.gridConfig,"scale")}),this.props.apiOptions.isMobile){const a={normalStyle:{strokeWidth:1}};this.horizHairline=new Nr(e,[0,0],[0,0],a),this.horizHairline.attr({stroke:I.INTERACTIVE}),this.horizHairline.hide(),this.vertHairline=new Nr(e,[0,0],[0,0],a),this.vertHairline.attr({stroke:I.INTERACTIVE}),this.vertHairline.hide()}},this.showHairlines=e=>{this.props.apiOptions.isMobile&&this.props.markings!=="none"&&(this.horizHairline.moveTo([this.props.graph.range[0][0],e[1]],[this.props.graph.range[0][1],e[1]]),this.horizHairline.show(),this.vertHairline.moveTo([e[0],this.props.graph.range[1][0]],[e[0],this.props.graph.range[1][1]]),this.vertHairline.show())},this.hideHairlines=()=>{this.props.apiOptions.isMobile&&(this.horizHairline.hide(),this.vertHairline.hide())}}static validate(e,r){return mi(e,r)}static getUserInputFromProps(e){return e.plot}_getGridConfig(e){return e.step.map((r,n)=>z.gridDimensionConfig(r,e.range[n],e.box[n],e.gridStep[n]))}_calculateMobileTickStep(e,r,n){const a=z.constrainedTickStepsFromTickSteps(r,n);return a[0]=a[0]/e[0],a[1]=a[1]/e[1],a}simpleValidate(e){return mi(this.getUserInput(),e)}getUserInput(){return Ot.getUserInputFromProps(this.props)}focus(){}render(){const e=this.props.plot.type,r=this.props.plot.coords,n=this.props.plot.asymptote,a=d("div",{style:Md,className:"above-scratchpad",children:d(bu,{value:e,allowEmpty:!0,buttons:g.map(this.props.availableTypes,Ns),onChange:this.handleActiveTypeChange})}),i=Jn(this.props.containerSizeClass),s={...this.props.graph,...pn(this.props.graph,i[0]),gridConfig:this._getGridConfig({...this.props.graph,box:i,...pn(this.props.graph,i[0])})},o={graph:{box:i,range:s.range,step:s.step,snapStep:s.snapStep,backgroundImage:s.backgroundImage,options:s,setup:this._setupGraphie},onChange:this.handlePlotChanges,model:e&&fr(e),coords:r,asymptote:n,static:this.props.static,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable,isMobile:this.props.apiOptions.isMobile,showTooltips:this.props.graph.showTooltips,showHairlines:this.showHairlines,hideHairlines:this.hideHairlines};return q("div",{children:[d(cn,{...o}),this.props.availableTypes.length>1&&a]})}};Ot.defaultProps=Is;let bn=Ot;const Es=t=>{const e={availableTypes:t.availableTypes,graph:t.graph};if(e.availableTypes.length===1){const r=e.graph,n=Ws(e.availableTypes);e.plot=$t(n,r)}return e},$d=t=>({...Es(t),availableTypes:[t.correct.type],plot:t.correct}),Dd={name:"grapher",displayName:"Grapher",hidden:!0,widget:bn,transform:Es,staticTransform:$d},xt=class xt extends k.Component{constructor(){super(...arguments),this.change=(...e)=>ne.apply(this,e),this.getSerializedState=()=>{var e;return(e=this.rendererRef)==null?void 0:e.getSerializedState()},this.restoreSerializedState=(e,r)=>{var n;return(n=this.rendererRef)==null||n.restoreSerializedState(e,r),null},this.getInputPaths=()=>{var e;return(e=this.rendererRef)==null?void 0:e.getInputPaths()},this.setInputValue=(e,r,n)=>{var a;return(a=this.rendererRef)==null?void 0:a.setInputValue(e,r,n)},this.focus=()=>{var e;return(e=this.rendererRef)==null?void 0:e.focus()},this.focusInputPath=e=>{var r;(r=this.rendererRef)==null||r.focusPath(e)},this.blurInputPath=e=>{var r;(r=this.rendererRef)==null||r.blurPath(e)},this.showRationalesForCurrentlySelectedChoices=()=>{var e;(e=this.rendererRef)==null||e.showRationalesForCurrentlySelectedChoices()}}componentDidMount(){this.forceUpdate()}getUserInput(){var e;return(e=this.rendererRef)==null?void 0:e.getUserInput()}simpleValidate(){var e;return(e=this.rendererRef)==null?void 0:e.score()}render(){var u;const e={...ge.defaults,...this.props.apiOptions,onFocusChange:(y,m)=>{m&&this.props.onBlur(m),y&&this.props.onFocus(y)}},n=this.props.findWidgets("group").indexOf(this),a=this.props.apiOptions.groupAnnotator(n,this.props.widgetId),i=y=>{this.rendererRef&&this.change("widgets",this.rendererRef.props.widgets)},s=(u=this.rendererRef)==null?void 0:u.score(),o=s&&s.type!=="invalid",l=s&&s.type==="invalid";return q("div",{className:We({"perseus-group":!0,"perseus-group-valid-answer":o,"perseus-group-invalid-answer":l}),children:[a,d(H,{content:this.props.content,widgets:this.props.widgets,images:this.props.images,ref:y=>this.rendererRef=y,apiOptions:e,findExternalWidgets:this.props.findWidgets,reviewMode:!!this.props.reviewModeRubric,onInteractWithWidget:i,linterContext:this.props.linterContext,strings:this.context.strings}),this.props.icon&&d("div",{className:"group-icon",children:this.props.icon})]})}};xt.contextType=M,xt.defaultProps={content:"",widgets:{},images:{},linterContext:B};let vn=xt;const Ud=function(t,e){return{...t,...e(t)}},Vd={name:"group",displayName:"Group (SAT only)",widget:vn,traverseChildWidgets:Ud,hidden:!0,isLintable:!0};function hi(t){return t.status==="correct"?{type:"points",earned:1,total:1,message:t.message||null}:t.status==="incorrect"?{type:"points",earned:0,total:1,message:t.message||null}:{type:"invalid",message:"Keep going, you're not there yet!"}}const{updateQueryString:Dr}=z,Aa=class Aa extends k.Component{constructor(){super(...arguments),this.handleMessageEvent=e=>{let r={};try{r=JSON.parse(e.originalEvent.data)}catch{return}if(g.isUndefined(r.testsPassed))return;const n=r.testsPassed?"correct":"incorrect";this.change({status:n,message:r.message})},this.change=(...e)=>ne.apply(this,e)}static validate(e){return hi(e)}componentDidMount(){_(window).on("message",this.handleMessageEvent)}componentWillUnmount(){_(window).off("message",this.handleMessageEvent)}getUserInput(){return{status:this.props.status,message:this.props.message}}simpleValidate(){return hi(this.getUserInput())}render(){const e={width:String(this.props.width),height:String(this.props.height)},{InitialRequestUrl:r}=Te();Object.entries(e).forEach(([i,s])=>{!s.endsWith("%")&&!s.endsWith("px")&&(e[i]=s+"px")});let n=this.props.url;if(n&&n.length&&n.indexOf("http")!==0&&(n="https://www.khanacademy.org/computer-programming/program/"+n+"/embedded?buttons=no&embed=yes&editor=no&author=no",n=Dr(n,"width",this.props.width),n=Dr(n,"height",this.props.height),n=Dr(n,"origin",r.origin)),this.props.settings){const i={};g.each(this.props.settings,function(s){s.name&&s.value&&(i[s.name]=s.value)}),n=Dr(n,"settings",JSON.stringify(i))}let a="allow-same-origin allow-scripts";return a+=" allow-top-navigation",d("iframe",{sandbox:a,style:e,src:n,allowFullScreen:this.props.allowFullScreen})}};Aa.defaultProps={status:"incomplete",message:null,allowFullScreen:!1,allowTopNavigation:!1};let fn=Aa;const Hd={name:"iframe",displayName:"Iframe (deprecated)",widget:fn,hidden:!0},pi=400,ci=[0,10],Gd={url:null,width:0,height:0},Kd=["block","full-width"],Ps="block",jt=class jt extends k.Component{constructor(){super(...arguments),this.change=(...e)=>ne.apply(this,e),this.focus=()=>{}}static validate(){return G()}getUserInput(){return null}simpleValidate(){return G()}render(){let e;const r=this.props.caption===this.props.alt?"":this.props.alt,{apiOptions:n}=this.props,a=this.props.backgroundImage;if(a.url){const o=a.url;e=d(ia.Consumer,{children:({setAssetStatus:l})=>d(_r,{src:o,alt:r,width:a.width,height:a.height,preloader:n.imagePreloader,extraGraphie:{box:this.props.box,range:this.props.range,labels:this.props.labels},trackInteraction:this.props.trackInteraction,zoomToFullSizeOnMobile:n.isMobile,constrainHeight:n.isMobile,allowFullBleed:n.isMobile,setAssetStatus:l})})}if(n.isMobile){let o;if(this.props.title||this.props.caption){let l=this.props.title;l&&(this.props.caption&&!/[.?!"']\s*$/.test(l)&&(l+="."),l=`**${l}** `);const u=We({"perseus-image-caption":!0,"has-title":!!l}),y=this.props.alignment,h=y==="block"||y==="full-width"?null:"0 !important";o=d("figcaption",{className:u,style:{maxWidth:a.width},children:d("div",{style:{minWidth:h},children:d(H,{content:l+this.props.caption,apiOptions:n,linterContext:this.props.linterContext,strings:this.context.strings})})})}return q("figure",{className:"perseus-image-widget",style:{maxWidth:a.width},children:[e,o]})}let i,s;return this.props.title&&(i=d("div",{className:"perseus-image-title",children:d(H,{content:this.props.title,apiOptions:n,linterContext:this.props.linterContext,strings:this.context.strings})})),this.props.caption&&(s=d("figcaption",{className:"perseus-image-caption",style:{maxWidth:a.width},children:d(H,{content:this.props.caption,apiOptions:n,linterContext:this.props.linterContext,strings:this.context.strings})})),q("figure",{className:"perseus-image-widget",style:{maxWidth:a.width},children:[i,e,s]})}};jt.contextType=M,jt.defaultProps={alignment:Ps,title:"",range:[ci,ci],box:[pi,pi],backgroundImage:Gd,labels:[],alt:"",caption:"",linterContext:B};let wn=jt;const Bd={name:"image",accessible:t=>{const e=t.backgroundImage;return!(e&&e.url&&!t.alt)},defaultAlignment:Ps,supportedAlignments:Kd,displayName:"Image",widget:wn,isLintable:!0},Bt=Y.Label,Yd=Y.Line,qr=Y.MovablePoint,Xd=Y.MovableLine,Qd=Y.Plot,Jd=Y.PlotParametric,Zd=Y.Point,ey=Y.Rect,{unescapeMathMode:ry}=z,zs=(t,e)=>{e=e||{};let r=t+"||"+e.decimal_separator+"||";const n=e.functions,a=n?n.length:0;for(let i=0;i{const r=zs(t,e);let n=bi[r];return n||(n=br(t,e),bi[r]=n,n)},vi=Object.create(null),fi=(t,e)=>{const r=zs(t,e);let n=vi[r];if(n)return n;const a=br(t,e).expr;return n=a?a.compile():function(){return 0},vi[r]=n,n},Ra=class Ra extends k.Component{constructor(){super(...arguments),this.state={variables:wi(this.props.elements),functions:ki(this.props.elements)},this._setupGraphie=(e,r)=>{e.graphInit(g.extend({},r,{grid:g.contains(["graph","grid"],this.props.graph.markings),axes:g.contains(["graph"],this.props.graph.markings),ticks:g.contains(["graph"],this.props.graph.markings),labels:g.contains(["graph"],this.props.graph.markings),labelFormat:function(n){return"\\small{"+n+"}"},axisArrows:"<->",unityLabels:!1}))},this._updatePointLocation=(e,r)=>{const n=g.clone(this.state.variables);n["x_"+e]=r[0],n["y_"+e]=r[1],this.setState({variables:n}),this.props.trackInteraction()},this._updateLineLocation=(e,r)=>{const n=this._eval("("+e.endX+")-("+e.startX+")"),a=this._eval("("+e.endY+")-("+e.startY+")"),i=Ir(r,[n,a]),s=g.clone(this.state.variables);s["x_"+e.startSubscript]=r[0],s["y_"+e.startSubscript]=r[1],s["x_"+e.endSubscript]=i[0],s["y_"+e.endSubscript]=i[1],this.setState({variables:s}),this.props.trackInteraction()},this._eval=(e,r)=>{const n=fi(e,{functions:this.state.functions}),a=g.extend({},this.state.variables,r);return g.each(g.keys(a),i=>{if(g.isString(a[i])){const s=fi(a[i],{functions:this.state.functions});a[i]=function(o){return s(g.extend({},a,{x:o}))}}}),n(a)||0},this._extractVars=e=>{if(e==null)return[];let r=[];return g.each(e.args(),function(n){n&&n.constructor.name==="Expr"&&(r=r.concat(this._extractVars(n)))},this),e.name()==="Var"&&r.push(e.prettyPrint()),r},this.change=(...e)=>ne.apply(this,e)}static validate(){return G()}UNSAFE_componentWillReceiveProps(e){g.isEqual(this.props.elements,e.elements)||this.setState({variables:wi(e.elements),functions:ki(e.elements)})}getUserInput(){return{}}simpleValidate(){return G()}render(){const e=this.props.graph.range;let r=this.props.graph.labels;return this.props.graph.markings==="graph"&&(r=this.props.graph.labels.map(n=>n.startsWith("$")&&n.endsWith("$")?n.slice(1,-1):n)),q(Y,{box:this.props.graph.box,range:this.props.graph.range,options:this.props.graph,setup:this._setupGraphie,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable,children:[this.props.graph.markings==="graph"&&d(Bt,{coord:[0,e[1][1]],text:r[1],direction:"above"}),this.props.graph.markings==="graph"&&d(Bt,{coord:[e[0][1],0],text:r[0],direction:"right"}),g.map(this.props.elements,function(n,a){if(n.type==="point")return d(Zd,{coord:[this._eval(n.options.coordX),this._eval(n.options.coordY)],color:n.options.color},n.key);if(n.type==="line"){const i=[this._eval(n.options.startX),this._eval(n.options.startY)],s=[this._eval(n.options.endX),this._eval(n.options.endY)];return d(Yd,{start:i,end:s,style:{stroke:n.options.color,strokeWidth:n.options.strokeWidth,strokeDasharray:n.options.strokeDasharray,arrows:n.options.arrows}},n.key)}if(n.type==="movable-point"){const i=[s=>{const o=Math.max(this._eval(n.options.constraintXMin),Math.min(this._eval(n.options.constraintXMax),s[0])),l=Math.max(this._eval(n.options.constraintYMin),Math.min(this._eval(n.options.constraintYMax),s[1]));return[o,l]}];return n.options.constraint==="snap"?i.push(qr.constraints.snap(n.options.snap)):n.options.constraint==="x"?i.push(s=>[this._eval(n.options.constraintFn,{y:s[1]}),s[1]]):n.options.constraint==="y"&&i.push(s=>[s[0],this._eval(n.options.constraintFn,{x:s[0]})]),d(qr,{coord:[this.state.variables["x_"+n.options.varSubscript],this.state.variables["y_"+n.options.varSubscript]],constraints:i,foo_x:n.options.constraint,foo_y:n.options.constraintFn,foo_z:n.options.snap,onMove:g.partial(this._updatePointLocation,n.options.varSubscript)},n.key)}if(n.type==="movable-line"){const i=[l=>{const u=Math.max(this._eval(n.options.constraintXMin),Math.min(this._eval(n.options.constraintXMax),l[0])),y=Math.max(this._eval(n.options.constraintYMin),Math.min(this._eval(n.options.constraintYMax),l[1]));return[u,y]}];n.options.constraint==="snap"?i.push(qr.constraints.snap(n.options.snap)):n.options.constraint==="x"?i.push(l=>[this._eval(n.options.constraintFn,{y:l[1]}),l[1]]):n.options.constraint==="y"&&i.push(l=>[l[0],this._eval(n.options.constraintFn,{x:l[0]})]);const s=[this.state.variables["x_"+n.options.startSubscript],this.state.variables["y_"+n.options.startSubscript]],o=[this.state.variables["x_"+n.options.endSubscript],this.state.variables["y_"+n.options.endSubscript]];return q(Xd,{constraints:i,onMove:g.bind(this._updateLineLocation,this,n.options),foo_x:n.options.constraint,foo_y:n.options.constraintFn,foo_z:n.options.snap,children:[d(qr,{coord:s,static:!0,normalStyle:{stroke:"none",fill:"none"}}),d(qr,{coord:o,static:!0,normalStyle:{stroke:"none",fill:"none"}})]},n.key)}if(n.type==="function"){const i=u=>this._eval(n.options.value,{x:u}),s=g.without(this._extractVars(Re(n.options.value).expr),"x"),o=g.object(s,g.map(s,u=>this.state.variables[u])),l=[this._eval(n.options.rangeMin,this.state.variables),this._eval(n.options.rangeMax,this.state.variables)];return d(Qd,{fn:i,foo_fn:n.options.value,foo_varvalues:o,range:l,style:{stroke:n.options.color,strokeWidth:n.options.strokeWidth,strokeDasharray:n.options.strokeDasharray,plotPoints:100}},n.key)}if(n.type==="parametric"){const i=u=>[this._eval(n.options.x,{t:u}),this._eval(n.options.y,{t:u})],s=g.without(this._extractVars(Re(n.options.x).expr).concat(this._extractVars(Re(n.options.y).expr)),"t"),o=g.object(s,g.map(s,u=>this.state.variables[u])),l=[this._eval(n.options.rangeMin,this.state.variables),this._eval(n.options.rangeMax,this.state.variables)];return d(Jd,{fn:i,foo_fnx:n.options.x,foo_fny:n.options.y,foo_varvalues:o,range:l,style:{stroke:n.options.color,strokeWidth:n.options.strokeWidth,strokeDasharray:n.options.strokeDasharray,plotPoints:100}},n.key)}if(n.type==="label"){const i=[this._eval(n.options.coordX),this._eval(n.options.coordY)];return d(Bt,{coord:i,text:ry(n.options.label),style:{color:n.options.color}},a+1)}if(n.type==="rectangle")return d(ey,{x:this._eval(n.options.coordX),y:this._eval(n.options.coordY),width:g.max([this._eval(n.options.width),0]),height:g.max([this._eval(n.options.height),0]),style:{stroke:"none",fill:n.options.color}},a+1)},this)]})}};Ra.defaultProps={graph:{box:[400,400],labels:["x","y"],range:[[-10,10],[-10,10]],tickStep:[1,1],gridStep:[1,1],markings:"graph"},elements:[]};let kn=Ra;const wi=t=>{const e={};return g.each(g.where(t,{type:"movable-point"}),r=>{const n=r.options.varSubscript,a=Re(r.options.startX||"0").expr,i=Re(r.options.startY||"0").expr;let s=0,o=0;a&&(s=a.eval({})||0),i&&(o=i.eval({})||0),e["x_"+n]=s,e["y_"+n]=o}),g.each(g.where(t,{type:"movable-line"}),r=>{const n=r.options.startSubscript,a=r.options.endSubscript,i=Re(r.options.startX||"0").expr,s=Re(r.options.startY||"0").expr,o=Re(r.options.endX||"0").expr,l=Re(r.options.endY||"0").expr;let u=0,y=0,m=0,h=0;i&&(u=i.eval({})||0),s&&(y=s.eval({})||0),o&&(m=o.eval({})||0),l&&(h=l.eval({})||0),e["x_"+n]=u,e["y_"+n]=y,e["x_"+a]=m,e["y_"+a]=h}),g.each(g.where(t,{type:"function"}),r=>{e[r.options.funcName]=r.options.value}),e},ki=t=>g.map(g.where(t,{type:"function"}),e=>e.options.funcName),ty={name:"interaction",displayName:"Interaction",widget:kn,transform:g.identity,hidden:!0};var ny="Expected a function",qi=NaN,ay="[object Symbol]",iy=/^\s+|\s+$/g,sy=/^[-+]0x[0-9a-f]+$/i,oy=/^0b[01]+$/i,ly=/^0o[0-7]+$/i,uy=parseInt,dy=typeof Mr=="object"&&Mr&&Mr.Object===Object&&Mr,yy=typeof self=="object"&&self&&self.Object===Object&&self,my=dy||yy||Function("return this")(),gy=Object.prototype,hy=gy.toString,py=Math.max,cy=Math.min,Yt=function(){return my.Date.now()};function by(t,e,r){var n,a,i,s,o,l,u=0,y=!1,m=!1,h=!0;if(typeof t!="function")throw new TypeError(ny);e=Ti(e)||0,qn(r)&&(y=!!r.leading,m="maxWait"in r,i=m?py(Ti(r.maxWait)||0,e):i,h="trailing"in r?!!r.trailing:h);function p(w){var C=n,W=a;return n=a=void 0,u=w,s=t.apply(W,C),s}function c(w){return u=w,o=setTimeout(R,e),y?p(w):s}function b(w){var C=w-l,W=w-u,F=e-C;return m?cy(F,i-W):F}function T(w){var C=w-l,W=w-u;return l===void 0||C>=e||C<0||m&&W>=i}function R(){var w=Yt();if(T(w))return A(w);o=setTimeout(R,b(w))}function A(w){return o=void 0,h&&n?p(w):(n=a=void 0,s)}function O(){o!==void 0&&clearTimeout(o),u=0,n=l=a=o=void 0}function f(){return o===void 0?s:A(Yt())}function v(){var w=Yt(),C=T(w);if(n=arguments,a=this,l=w,C){if(o===void 0)return c(l);if(m)return o=setTimeout(R,e),p(l)}return o===void 0&&(o=setTimeout(R,e)),s}return v.cancel=O,v.flush=f,v}function qn(t){var e=typeof t;return!!t&&(e=="object"||e=="function")}function vy(t){return!!t&&typeof t=="object"}function fy(t){return typeof t=="symbol"||vy(t)&&hy.call(t)==ay}function Ti(t){if(typeof t=="number")return t;if(fy(t))return qi;if(qn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=qn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=t.replace(iy,"");var r=oy.test(t);return r||ly.test(t)?uy(t.slice(2),r?2:8):sy.test(t)?qi:+t}var wy=by;const ky=hs(wy);function Tn(){return new qy}class qy{constructor(){this.path=[],this.scaleFactor=1}build(){return this.path.map(Ay(this.scaleFactor)).map(Ty).join("")}move(e,r){return this.path.push({action:"M",args:[e,r]}),this}line(e,r){return this.path.push({action:"L",args:[e,r]}),this}circularArc(e,r,n,{sweep:a=!1,largeArc:i=!1}={}){return this.path.push({action:"A",args:[e,e,0,i?1:0,a?1:0,r,n]}),this}curve(e,r,n,a,i,s){return this.path.push({action:"C",args:[e,r,n,a,i,s]}),this}scale(e){return this.scaleFactor*=e,this}}function Ty(t){return`${t.action}${t.args.join(" ")}`}function Ay(t){return e=>{switch(e.action){case"A":return{...e,args:[e.args[0]*t,e.args[1]*t,e.args[2],e.args[3],e.args[4],e.args[5]*t,e.args[6]*t]};default:return{...e,args:e.args.map(r=>r*t)}}}}function dr(t,e,r){return tr?r:t}function te(t,e){const[r,n]=e,[a,i]=t;return[Math.round(r/a)*a,Math.round(n/i)*i]}const N=0,L=1,ke=0,fe=1;function yr([t,e]){return e-t}function Ai(t,e){if(t*2>yr(e)){const r=Ry(...e);return[r,r]}return[e[ke]+t,e[fe]-t]}function Ry(t,e){return(t+e)/2}function Ls(t,e){return[dr(e[N],...t[N]),dr(e[L],...t[L])]}function la(t,e){return[Ai(t[N],e[N]),Ai(t[L],e[L])]}function Ri(t,e,r){return(e-t)*dr(r,0,1)+t}const Oy=([[t,e],[r,n]],[[a,i],[s,o]])=>{const l=(r-t)*(o-i)-(s-a)*(n-e);if(l===0)return!1;{const u=((o-i)*(s-t)+(a-s)*(o-e))/l,y=((e-n)*(s-t)+(r-t)*(o-e))/l;return 0=1)return;const m=[t,e],h=x.sub([r,n],m);return x.add(m,x.scale(h,u))}}function xy(t){return t/180*Math.PI}function Pr([t,e]){return Math.atan2(e,t)*180/Math.PI}function zr(t,e){return typeof t=="number"&&(t=[t,t]),e=e*Math.PI/180,[t[0]*Math.cos(e),t[1]*Math.sin(e)]}const je=(t,e,r)=>{if(r===void 0){const n=t[0]-e[0],a=t[1]-e[1];return!n&&!a?0:(180+Math.atan2(-a,-n)*180/Math.PI+360)%360}return je(t,r)-je(e,r)},jy={range:[[0,1],[0,1]],tickStep:[1,1],gridStep:[1,1],snapStep:[1,1],markings:"none",showTooltips:!1,graphDimensionsInPixels:[1,1],width:0,height:0,labels:[],disableKeyboardInteraction:!1},_s=k.createContext(jy);function ee(){return os.useContext(_s)}const Fs=x.matrixBuilder;function Ss(t,e,r=[0,0]){const{range:n,width:a,height:i}=e,[[s,o],[l,u]]=n,y=Fs().translate(...r).scale(a/(o-s),-i/(u-l)).get();return t.map(m=>x.transform(m,y))}function Wy(t,e){const{range:r,width:n,height:a}=e,[[i,s],[o,l]]=r,u=Fs().scale(n/(s-i),a/(l-o)).get();return t.map(y=>x.transform(y,u))}function An(t,e){const[[r],[,n]]=e.range,[a,i]=[-r,-n];return Ss([t],e,[a,i])[0]}const J=(...t)=>{const e=ee();return Ss(t,e)},Ms=(...t)=>{const e=ee();return Wy(t,e)};function Cy(t,e){const[[r,n],[a,i]]=e.range,{width:s,height:o}=e,l=n-r,u=i-a;return t.map(y=>{const m=y[N]/s*l+r,h=i-y[L]/o*u;return[m,h]})}const Iy=Tn().move(-3,4).curve(-2.75,2.5,0,.25,.75,0).curve(0,-.25,-2.75,-2.5,-3,-4).scale(1.4).build();function ze(t){const[e]=J(t.tip);return d("g",{className:"interactive-graph-arrowhead",transform:`translate(${e[N]} ${e[L]}) rotate(${t.angle})`,children:d("g",{transform:"translate(-1.5)",children:d("path",{d:Iy,fill:"none",style:{stroke:t.color??"inherit"},strokeLinejoin:"round",strokeLinecap:"round",strokeWidth:"2px"})})})}ze.__docgenInfo={description:"",methods:[],displayName:"Arrowhead",props:{tip:{required:!0,tsType:{name:"vec.Vector2"},description:""},angle:{required:!0,tsType:{name:"number"},description:""},color:{required:!1,tsType:{name:"string"},description:""}}};function $s(){const{range:[[t,e],[r,n]]}=ee(),a="var(--mafs-fg)";return q(U,{children:[!(r>0||n<0)&&q(U,{children:[d(ze,{color:a,tip:[t,0],angle:180}),d(ze,{color:a,tip:[e,0],angle:0})]}),!(t>0||e<0)&&q(U,{children:[d(ze,{color:a,tip:[0,r],angle:90}),d(ze,{color:a,tip:[0,n],angle:270})]})]})}$s.__docgenInfo={description:"",methods:[],displayName:"AxisArrows"};function Ds(){const{range:t,labels:e,width:r,height:n}=ee(),a=[0,t[L][fe]],i=[t[N][fe],0],[s,o]=e,l={range:t,width:r,height:n},[u,y]=An(i,l),[m,h]=x.add(An(a,l),[0,-24]),{TeX:p}=Te();return q(U,{children:[d("span",{style:{position:"absolute",left:u,top:y,fontSize:"14px",transform:"translate(7px, -50%)"},children:d(p,{children:s})}),d("span",{style:{position:"absolute",left:m,top:h,fontSize:"14px",transform:"translate(-50%, 0px)"},children:d(p,{children:o})})]})}Ds.__docgenInfo={description:"",methods:[],displayName:"AxisLabels"};const yt=10,$e=14,Ny=({y:t,range:e,tickStep:r})=>{let n=0;e[N][ke]>0&&(n=e[N][ke]),e[N][fe]<0&&(n=e[N][fe]);const a=[n,t],[[i,s]]=J(a),o=i-yt/2,l=s,u=i+yt/2,y=s,m=e[N][fe]<=0?$e*1.5:-$e*1.1,h=i+m,p=s+$e*.25,c=Py(t,e,r);return q("g",{className:"tick","aria-hidden":!0,children:[d("line",{x1:o,y1:l,x2:u,y2:y,className:"axis-tick"}),c&&d("text",{className:"axis-tick-label",style:{fontSize:$e},textAnchor:"end",x:h,y:p,children:t.toString()})]})},Ey=({x:t,range:e})=>{let r=0;e[L][ke]>0&&(r=e[L][ke]),e[L][fe]<0&&(r=e[L][fe]);const n=[t,r],[[a,i]]=J(n),s=a,o=i+yt/2,l=a,u=i-yt/2,y=e[L][fe]<0?-$e:$e*1.75,m=t<0?-2:0,h=a+m,p=i+y;return q("g",{className:"tick","aria-hidden":!0,children:[d("line",{x1:s,y1:o,x2:l,y2:u,className:"axis-tick"}),d("text",{className:"axis-tick-label",style:{fontSize:$e},textAnchor:"middle",x:h,y:p,children:t.toString()})]})},Py=(t,e,r)=>{let n=!0;return e[N][ke]<-r&&e[N][fe]>0&&t===-r&&(n=!1),n};function Oi(t,e,r){const n=[],a=Math.max(e,0);for(let s=a+t;se;i-=t)n.push(i);return n}const Us=()=>{const{tickStep:t,range:e}=ee(),[[r,n],[a,i]]=e,[s,o]=t,l=Oi(o,a,i),u=Oi(s,r,n);return q("g",{className:"axis-ticks",role:"presentation",children:[d("g",{className:"y-axis-ticks",children:l.map(y=>d(Ny,{y,range:e,tickStep:t[L]},`y-grid-tick-${y}`))}),d("g",{className:"x-axis-ticks",children:u.map(y=>d(Ey,{x:y,range:e},`x-grid-tick-${y}`))})]})};Us.__docgenInfo={description:"",methods:[],displayName:"AxisTicks"};const xi=(t,e)=>({axis:t.markings==="graph",lines:t.gridStep[e],labels:!1}),Vs=t=>t.markings==="none"?null:d(fu.Cartesian,{xAxis:xi(t,N),yAxis:xi(t,L)});Vs.__docgenInfo={description:"",methods:[],displayName:"Grid",props:{gridStep:{required:!0,tsType:{name:"vec.Vector2"},description:""},range:{required:!0,tsType:{name:"tuple",raw:`[ - x: [min: number, max: number], - y: [min: number, max: number], -]`,elements:[{name:"unknown"},{name:"unknown"}]},description:""},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},markings:{required:!0,tsType:{name:"union",raw:'"graph" | "grid" | "none"',elements:[{name:"literal",value:'"graph"'},{name:"literal",value:'"grid"'},{name:"literal",value:'"none"'}]},description:""},width:{required:!0,tsType:{name:"number"},description:""},height:{required:!0,tsType:{name:"number"},description:""}}};const Hs=({box:t,backgroundImage:e})=>{const{url:r,width:n,height:a}=e??{};if(r&&typeof r=="string"){const i=t[N]/gs.defaultBoxSize;return d(K,{style:{position:"absolute",bottom:0,left:0},children:d(ia.Consumer,{children:({setAssetStatus:s})=>d(_r,{src:r,width:n,height:a,scale:i,responsive:!1,setAssetStatus:s,alt:""})})})}return null};Hs.__docgenInfo={description:"If a graphie URL is provided in `backgroundImage`, will return the rendered graphie background.\nOtherwise, returns `null`.",methods:[],displayName:"LegacyGrid",props:{box:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},backgroundImage:{required:!1,tsType:{name:"signature",type:"object",raw:`{ - // The URL of the image - url: string | null | undefined; - // The width of the image - width?: number; - // The height of the image - height?: number; - // The top offset of the image - // NOTE: perseus_data.go says this is required, but nullable, even though - // it isn't necessary at all. - top?: number; - // The left offset of the image - // NOTE: perseus_data.go says this is required, but nullable, even though - // it isn't necessary at all. - left?: number; - // The scale of the image - // NOTE: perseus_data.go says this is required, but nullable, even though - // it isn't necessary at all. - // Yikes, production data as this as both a number (1) and string ("1") - scale?: number | string; - // The bottom offset of the image - // NOTE: perseus_data.go says this is required, but nullable, even though - // it isn't necessary at all. - bottom?: number; -}`,signature:{properties:[{key:"url",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}},{key:"top",value:{name:"number",required:!1}},{key:"left",value:{name:"number",required:!1}},{key:"scale",value:{name:"union",raw:"number | string",elements:[{name:"number"},{name:"string"}],required:!1}},{key:"bottom",value:{name:"number",required:!1}}]}},description:""}}};const Ec=["calculator","chi2Table","financialCalculatorMonthlyPayment","financialCalculatorTotalAmount","financialCalculatorTimeToPayOff","periodicTable","periodicTableWithKey","tTable","zTable"],Pc=["correct","wrong","ungraded"],Q={blue:"#3D7586",green:"#447A53",grayH:"#3B3D45",purple:"#594094",pink:"#B25071",red:"#D92916",orange:"#946700"},Gs={none:0,white:1,translucent:.4,solid:1},zc=["bar","line","pic","histogram","dotplot"];function Rr(t){const{coord:e,text:r,color:n,size:a}=t,[i,s]=An(e,ee()),{TeX:o}=Te();return d("span",{className:"locked-label",style:{position:"absolute",left:i,top:s,color:Q[n],fontSize:Gl.size[a],backgroundColor:"rgba(255, 255, 255, 0.8)"},"aria-hidden":!0,children:d(o,{children:r})})}Rr.__docgenInfo={description:"",methods:[],displayName:"LockedLabel",props:{type:{required:!0,tsType:{name:"literal",value:'"label"'},description:""},coord:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},text:{required:!0,tsType:{name:"string"},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},size:{required:!0,tsType:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}]},description:""}}};function zy(t){const{flags:e,lockedFigures:r}=t;return r.map((n,a)=>{var i,s,o,l,u,y,m,h,p;return n.type==="label"?d(Rr,{...n},`label-${a}`):(i=e==null?void 0:e.mafs)!=null&&i["locked-point-labels"]&&n.type==="point"||(s=e==null?void 0:e.mafs)!=null&&s["locked-line-labels"]&&n.type==="line"||(o=e==null?void 0:e.mafs)!=null&&o["locked-vector-labels"]&&n.type==="vector"||(l=e==null?void 0:e.mafs)!=null&&l["locked-ellipse-labels"]&&n.type==="ellipse"||(u=e==null?void 0:e.mafs)!=null&&u["locked-polygon-labels"]&&n.type==="polygon"||(y=e==null?void 0:e.mafs)!=null&&y["locked-function-labels"]&&n.type==="function"?q(k.Fragment,{children:[(m=n.labels)==null?void 0:m.map((c,b)=>d(Rr,{...c},`${a}-label-${b}`)),n.type==="line"&&q(U,{children:[(h=n.points[0].labels)==null?void 0:h.map((c,b)=>d(Rr,{...c},`locked-figure-${a}-point-1-label-${b}`)),(p=n.points[1].labels)==null?void 0:p.map((c,b)=>d(Rr,{...c},`locked-figure-${a}-point-2-label-${b}`))]})]},a):null})}const Ks=t=>{var y;const{center:e,radius:r,angle:n,color:a,fillStyle:i,strokeStyle:s,ariaLabel:o,flags:l}=t,u=o&&((y=l==null?void 0:l.mafs)==null?void 0:y["locked-figures-aria"]);return d("g",{className:"locked-ellipse","aria-label":u?o:void 0,"aria-hidden":!u,children:d(wu,{center:e,radius:r,angle:n,fillOpacity:Gs[i],strokeStyle:s,color:Q[a],svgEllipseProps:{style:{fill:i==="white"?P.white:Q[a]}}})})};Ks.__docgenInfo={description:"",methods:[],displayName:"LockedEllipse",props:{type:{required:!0,tsType:{name:"literal",value:'"ellipse"'},description:""},center:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},radius:{required:!0,tsType:{name:"tuple",raw:"[x: number, y: number]",elements:[{name:"unknown"},{name:"unknown"}]},description:""},angle:{required:!0,tsType:{name:"number"},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},fillStyle:{required:!0,tsType:{name:"union",raw:'"none" | "white" | "translucent" | "solid"',elements:[{name:"literal",value:'"none"'},{name:"literal",value:'"white"'},{name:"literal",value:'"translucent"'},{name:"literal",value:'"solid"'}]},description:""},strokeStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""},labels:{required:!1,tsType:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]"},description:""},ariaLabel:{required:!1,tsType:{name:"string"},description:""},flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""}}};const Bs=t=>{var u,y;const[e,r]=k.useState(),{color:n,strokeStyle:a,directionalAxis:i,domain:s}=t,o={color:Q[n],style:a,domain:s},l=t.ariaLabel&&((y=(u=t.flags)==null?void 0:u.mafs)==null?void 0:y["locked-figures-aria"]);return k.useEffect(()=>{r(br(t.equation).expr)},[t.equation]),typeof e>"u"?null:q("g",{className:"locked-function","aria-label":l?t.ariaLabel:void 0,"aria-hidden":!l,children:[i==="x"&&d(st.OfX,{y:m=>e.eval({x:m}),...o}),i==="y"&&d(st.OfY,{x:m=>e.eval({y:m}),...o})]})};Bs.__docgenInfo={description:"",methods:[],displayName:"LockedFunction",props:{type:{required:!0,tsType:{name:"literal",value:'"function"'},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},strokeStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""},equation:{required:!0,tsType:{name:"string"},description:""},directionalAxis:{required:!0,tsType:{name:"union",raw:'"x" | "y"',elements:[{name:"literal",value:'"x"'},{name:"literal",value:'"y"'}]},description:""},domain:{required:!1,tsType:{name:"Interval"},description:""},labels:{required:!1,tsType:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]"},description:""},ariaLabel:{required:!1,tsType:{name:"string"},description:""},flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""}}};function De(t){const{start:e,end:r,style:n,className:a,testId:i}=t;return d("line",{x1:e[N],y1:e[L],x2:r[N],y2:r[L],style:n,className:a,"data-testid":i})}De.__docgenInfo={description:"",methods:[],displayName:"SVGLine",props:{start:{required:!0,tsType:{name:"vec.Vector2"},description:""},end:{required:!0,tsType:{name:"vec.Vector2"},description:""},style:{required:!1,tsType:{name:'SVGProps["style"]',raw:'SVGProps["style"]'},description:""},className:{required:!1,tsType:{name:"string"},description:""},testId:{required:!1,tsType:{name:"string"},description:""}}};function mr(t){const{tail:e,tip:r,color:n,style:a}=t,[i,s]=J(e,r),o=x.sub(s,i),l=Pr(o);return q("g",{style:{stroke:n,strokeWidth:2},children:[d(De,{start:i,end:s,style:a}),d(ze,{angle:l,tip:r,color:n})]})}mr.__docgenInfo={description:"",methods:[],displayName:"Vector",props:{tail:{required:!0,tsType:{name:"vec.Vector2"},description:""},tip:{required:!0,tsType:{name:"vec.Vector2"},description:""},color:{required:!0,tsType:{name:"string"},description:""},style:{required:!1,tsType:{name:'ReactSVGProps["style"]',raw:'React.SVGProps["style"]'},description:""}}};const Ke=(t,e,r)=>{const[[n,a],[i,s]]=r,[o,l]=t,[u,y]=e,m=y-l,h=u-o,p=m/h,c=1/p,b=h<0?n:a,T=m<0?i:s,R=l+(b-o)*p,A=o+(T-l)*c;switch(!0){case ji(R,i,s):return[b,R];case ji(A,n,a):return[A,T];default:return[b,T]}};function ji(t,e,r){return t>=e&&t<=r}const Ys=t=>{var c;const{color:e,lineStyle:r,kind:n,points:a,showPoint1:i,showPoint2:s,ariaLabel:o,flags:l,range:u}=t,[y,m]=a,h=o&&((c=l==null?void 0:l.mafs)==null?void 0:c["locked-figures-aria"]);let p;if(n==="ray"){const b=Ke(y.coord,m.coord,u);p=d(mr,{tail:y.coord,tip:b,color:Q[e],style:{strokeDasharray:r==="dashed"?"var(--mafs-line-stroke-dash-style)":void 0}})}else{const b=n==="segment"?Va.Segment:Va.ThroughPoints;let T=n==="segment"?m.coord:Ke(y.coord,m.coord,u);const[R,A]=J(m.coord,y.coord),O=x.sub(R,A);let f=Pr(O);const v=n!=="segment"&&d(ze,{angle:f,tip:T,color:Q[e]});T=n==="segment"?y.coord:Ke(m.coord,y.coord,u),f=f>180?f-180:f+180;const w=n!=="segment"&&d(ze,{angle:f,tip:T,color:Q[e]});p=q(U,{children:[v,d(b,{point1:y.coord,point2:m.coord,color:Q[e],style:r}),w]})}return q("g",{className:n==="ray"?"locked-ray":"locked-line","aria-label":h?o:void 0,"aria-hidden":!h,children:[p,i&&d(ot,{x:y.coord[N],y:y.coord[L],svgCircleProps:{style:{fill:y.filled?Q[y.color]:P.white,stroke:Q[y.color],strokeWidth:me.xxxxSmall_2}}}),s&&d(ot,{x:m.coord[N],y:m.coord[L],svgCircleProps:{style:{fill:m.filled?Q[m.color]:P.white,stroke:Q[m.color],strokeWidth:me.xxxxSmall_2}}})]})};Ys.__docgenInfo={description:"",methods:[],displayName:"LockedLine",props:{type:{required:!0,tsType:{name:"literal",value:'"line"'},description:""},kind:{required:!0,tsType:{name:"union",raw:'"line" | "ray" | "segment"',elements:[{name:"literal",value:'"line"'},{name:"literal",value:'"ray"'},{name:"literal",value:'"segment"'}]},description:""},points:{required:!0,tsType:{name:"tuple",raw:"[point1: LockedPointType, point2: LockedPointType]",elements:[{name:"unknown"},{name:"unknown"}]},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},lineStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""},showPoint1:{required:!0,tsType:{name:"boolean"},description:""},showPoint2:{required:!0,tsType:{name:"boolean"},description:""},labels:{required:!1,tsType:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]"},description:""},ariaLabel:{required:!1,tsType:{name:"string"},description:""},flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""},range:{required:!0,tsType:{name:"tuple",raw:"[Interval, Interval]",elements:[{name:"Interval"},{name:"Interval"}]},description:""}}};const Xs=t=>{var u;const{flags:e,color:r,coord:n,filled:a,ariaLabel:i}=t,[s,o]=n,l=i&&((u=e==null?void 0:e.mafs)==null?void 0:u["locked-figures-aria"]);return d("g",{className:"locked-point","aria-label":l?i:void 0,"aria-hidden":!l,children:d(ot,{x:s,y:o,svgCircleProps:{style:{fill:a?Q[r]:P.white,stroke:Q[r],strokeWidth:me.xxxxSmall_2}}})})};Xs.__docgenInfo={description:"",methods:[],displayName:"LockedPoint",props:{type:{required:!0,tsType:{name:"literal",value:'"point"'},description:""},coord:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},filled:{required:!0,tsType:{name:"boolean"},description:""},labels:{required:!1,tsType:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]"},description:""},ariaLabel:{required:!1,tsType:{name:"string"},description:""},flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""}}};const Qs=t=>{var o,l;const{points:e,color:r,showVertices:n,fillStyle:a,strokeStyle:i}=t,s=t.ariaLabel&&((l=(o=t.flags)==null?void 0:o.mafs)==null?void 0:l["locked-figures-aria"]);return q("g",{className:"locked-polygon","aria-label":s?t.ariaLabel:void 0,"aria-hidden":!s,children:[d(tn,{points:[...e],fillOpacity:Gs[a],strokeStyle:i,color:Q[r],svgPolygonProps:{style:{fill:a==="white"?P.white:Q[r]}}}),n&&e.map((u,y)=>d(ot,{x:u[N],y:u[L],color:Q[r]},`locked-polygon-point-${y}`))]})};Qs.__docgenInfo={description:"",methods:[],displayName:"LockedPolygon",props:{type:{required:!0,tsType:{name:"literal",value:'"polygon"'},description:""},points:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]}],raw:"ReadonlyArray"},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},showVertices:{required:!0,tsType:{name:"boolean"},description:""},fillStyle:{required:!0,tsType:{name:"union",raw:'"none" | "white" | "translucent" | "solid"',elements:[{name:"literal",value:'"none"'},{name:"literal",value:'"white"'},{name:"literal",value:'"translucent"'},{name:"literal",value:'"solid"'}]},description:""},strokeStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""},labels:{required:!1,tsType:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]"},description:""},ariaLabel:{required:!1,tsType:{name:"string"},description:""},flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""}}};const Js=t=>{var l;const{color:e,points:r,ariaLabel:n,flags:a}=t,[i,s]=r,o=n&&((l=a==null?void 0:a.mafs)==null?void 0:l["locked-figures-aria"]);return d("g",{className:"locked-vector","aria-label":o?n:void 0,"aria-hidden":!o,children:d(mr,{tail:i,tip:s,color:Q[e]})})};Js.__docgenInfo={description:"",methods:[],displayName:"LockedVector",props:{type:{required:!0,tsType:{name:"literal",value:'"vector"'},description:""},points:{required:!0,tsType:{name:"tuple",raw:"[tail: Coord, tip: Coord]",elements:[{name:"unknown"},{name:"unknown"}]},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},labels:{required:!1,tsType:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]"},description:""},ariaLabel:{required:!1,tsType:{name:"string"},description:""},flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""}}};const Zs=t=>{const{flags:e,lockedFigures:r}=t;return d(U,{children:r.map((n,a)=>{switch(n.type){case"point":return d(Xs,{...n,flags:e},`point-${a}`);case"line":return d(Ys,{range:t.range,...n,flags:e},`line-${a}`);case"vector":return d(Js,{...n,flags:e},`vector-${a}`);case"ellipse":return d(Ks,{...n,flags:e},`ellipse-${a}`);case"polygon":return d(Qs,{...n,flags:e},`polygon-${a}`);case"function":return d(Bs,{...n,flags:e},`function-${a}`);case"label":return null;default:throw new vr(n)}})})};Zs.__docgenInfo={description:"",methods:[],displayName:"GraphLockedLayer",props:{flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""},lockedFigures:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"union",raw:`| LockedPointType -| LockedLineType -| LockedVectorType -| LockedEllipseType -| LockedPolygonType -| LockedFunctionType -| LockedLabelType`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - coord: Coord; - color: LockedFigureColor; - filled: boolean; - labels?: LockedLabelType[]; - ariaLabel?: string; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"filled",value:{name:"boolean",required:!0}},{key:"labels",value:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]",required:!1}},{key:"ariaLabel",value:{name:"string",required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "line"; - kind: "line" | "ray" | "segment"; - points: [point1: LockedPointType, point2: LockedPointType]; - color: LockedFigureColor; - lineStyle: LockedLineStyle; - showPoint1: boolean; - showPoint2: boolean; - labels?: LockedLabelType[]; - ariaLabel?: string; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"line"',required:!0}},{key:"kind",value:{name:"union",raw:'"line" | "ray" | "segment"',elements:[{name:"literal",value:'"line"'},{name:"literal",value:'"ray"'},{name:"literal",value:'"segment"'}],required:!0}},{key:"points",value:{name:"tuple",raw:"[point1: LockedPointType, point2: LockedPointType]",elements:[{name:"unknown"},{name:"unknown"}],required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"lineStyle",value:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}],required:!0}},{key:"showPoint1",value:{name:"boolean",required:!0}},{key:"showPoint2",value:{name:"boolean",required:!0}},{key:"labels",value:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]",required:!1}},{key:"ariaLabel",value:{name:"string",required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "vector"; - points: [tail: Coord, tip: Coord]; - color: LockedFigureColor; - labels?: LockedLabelType[]; - ariaLabel?: string; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"vector"',required:!0}},{key:"points",value:{name:"tuple",raw:"[tail: Coord, tip: Coord]",elements:[{name:"unknown"},{name:"unknown"}],required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"labels",value:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]",required:!1}},{key:"ariaLabel",value:{name:"string",required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "ellipse"; - center: Coord; - radius: [x: number, y: number]; - angle: number; - color: LockedFigureColor; - fillStyle: LockedFigureFillType; - strokeStyle: LockedLineStyle; - labels?: LockedLabelType[]; - ariaLabel?: string; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ellipse"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"radius",value:{name:"tuple",raw:"[x: number, y: number]",elements:[{name:"unknown"},{name:"unknown"}],required:!0}},{key:"angle",value:{name:"number",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"fillStyle",value:{name:"union",raw:'"none" | "white" | "translucent" | "solid"',elements:[{name:"literal",value:'"none"'},{name:"literal",value:'"white"'},{name:"literal",value:'"translucent"'},{name:"literal",value:'"solid"'}],required:!0}},{key:"strokeStyle",value:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}],required:!0}},{key:"labels",value:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]",required:!1}},{key:"ariaLabel",value:{name:"string",required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "polygon"; - points: ReadonlyArray; - color: LockedFigureColor; - showVertices: boolean; - fillStyle: LockedFigureFillType; - strokeStyle: LockedLineStyle; - labels?: LockedLabelType[]; - ariaLabel?: string; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"points",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}],raw:"ReadonlyArray",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"showVertices",value:{name:"boolean",required:!0}},{key:"fillStyle",value:{name:"union",raw:'"none" | "white" | "translucent" | "solid"',elements:[{name:"literal",value:'"none"'},{name:"literal",value:'"white"'},{name:"literal",value:'"translucent"'},{name:"literal",value:'"solid"'}],required:!0}},{key:"strokeStyle",value:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}],required:!0}},{key:"labels",value:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]",required:!1}},{key:"ariaLabel",value:{name:"string",required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "function"; - color: LockedFigureColor; - strokeStyle: LockedLineStyle; - equation: string; // This is the user-defined equation (as it was typed) - directionalAxis: "x" | "y"; - domain?: Interval; - labels?: LockedLabelType[]; - ariaLabel?: string; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"function"',required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"strokeStyle",value:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}],required:!0}},{key:"equation",value:{name:"string",required:!0}},{key:"directionalAxis",value:{name:"union",raw:'"x" | "y"',elements:[{name:"literal",value:'"x"'},{name:"literal",value:'"y"'}],required:!0}},{key:"domain",value:{name:"Interval",required:!1}},{key:"labels",value:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]",required:!1}},{key:"ariaLabel",value:{name:"string",required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "label"; - coord: Coord; - // TeX-supported string - text: string; - color: LockedFigureColor; - size: "small" | "medium" | "large"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}]}],raw:"ReadonlyArray"},description:""},range:{required:!0,tsType:{name:"tuple",raw:"[x: Interval, y: Interval]",elements:[{name:"unknown"},{name:"unknown"}]},description:""}}};const S={global:{deleteIntent:Ly,changeInteractionMode:Dy,changeKeyboardInvitationVisibility:Uy},angle:{movePoint:Tr},circle:{moveCenter:Hy,moveRadiusPoint:Gy},linear:{moveLine:t=>Ur(0,t),movePoint:(t,e)=>Vr(0,t,e)},linearSystem:{moveLine:Ur,movePointInFigure:Vr},pointGraph:{movePoint:Tr,addPoint:_y,removePoint:Fy,focusPoint:Sy,blurPoint:My,clickPoint:$y},polygon:{movePoint:Tr,moveAll:Vy},quadratic:{movePoint:Tr},ray:{moveRay:t=>Ur(0,t),movePoint:(t,e)=>Vr(0,t,e)},segment:{movePointInFigure:Vr,moveLine:Ur},sinusoid:{movePoint:Tr}},eo="delete-intent";function Ly(){return{type:eo}}const ro="move-line";function Ur(t,e){return{type:ro,itemIndex:t,delta:e}}const to="add-point";function _y(t){return{type:to,location:t}}const no="remove-point";function Fy(t){return{type:no,index:t}}const ao="focus-point";function Sy(t){return{type:ao,index:t}}const io="blur-point";function My(){return{type:io}}const so="click-point";function $y(t){return{type:so,index:t}}const oo="point-change-interaction-mode";function Dy(t){return{type:oo,mode:t}}const lo="change-keyboard-interaction-invitation-visibility";function Uy(t){return{type:lo,shouldShow:t}}const uo="move-all";function Vy(t){return{type:uo,delta:t}}const yo="move-point";function Tr(t,e){return{type:yo,index:t,destination:e}}const mo="move-point-in-figure";function Vr(t,e,r){return{type:mo,figureIndex:t,pointIndex:e,destination:r}}const go="move-center";function Hy(t){return{type:go,destination:t}}const ho="MOVE_RADIUS_POINT";function Gy(t){return{type:ho,destination:t}}const po="change-snap-step";function Ky(t){return{type:po,snapStep:t}}const co="change-range";function By(t){return{type:co,range:t}}const bo="reinitialize";function Yy(t){return{type:bo,params:t}}const ua=44,Fe=(t,e,r,n)=>r.map(a=>a.map((i,s)=>{const o=t[s];if(n)return o[ke]+yr(o)*i;const l=e[s],u=Math.floor(yr(o)/l),y=Math.round(i*u);return o[ke]+l*y})),da=(t,e)=>t.map(r=>r.map((n,a)=>(n+e[a][1])/yr(e[a])));function Ze({snapStep:t,range:e,point:r}){const n=la(t,e);return Ls(n,r)}function Qe(t){const{gestureTarget:e,onMove:r,point:n,constrainKeyboardMovement:a}=t,[i,s]=k.useState(!1),{xSpan:o,ySpan:l}=Jy(),{viewTransform:u,userTransform:y}=ku(),m=x.matrixInvert(u);ie(m);const h=k.useMemo(()=>Qy(y),[y]),p=k.useRef([0,0]);return ps(c=>{const{type:b,event:T}=c;if(T==null||T.stopPropagation(),b.includes("key")){if(ie(T instanceof KeyboardEvent),T==null||T.preventDefault(),b==="keyup")return;if(typeof a=="object"){const ue=a[Xy[T.key]];r(ue??n);return}const{direction:A,altKey:O,metaKey:f,shiftKey:v}=c,w=[A[N],-A[L]],C=Math.abs(w[N])?o:l;let W=50;(O||f)&&(W=200),v&&(W=10);const F=C/(W*2),X=Zy(C/W,C/2,C/W);for(const ue of X){const de=x.scale(w,ue),ae=a(x.transform(x.add(x.transform(n,y),de),h));if(x.dist(ae,n)>F){r(ae);break}}}else{const{last:A,movement:O,first:f}=c;if(s(!A),f&&(p.current=x.transform(n,y)),x.mag(O)===0)return;const v=x.transform(O,m);r(x.transform(x.add(p.current,v),h))}},{target:e,eventOptions:{passive:!1}}),{dragging:i}}const Xy={ArrowLeft:"left",ArrowRight:"right",ArrowUp:"up",ArrowDown:"down"};function Qy(t){const e=x.matrixInvert(t);return ie(e!==null),e}function Jy(){const{range:[[t,e],[r,n]]}=ee(),a=e-t,i=n-r;return{xSpan:a,ySpan:i}}function Zy(t,e,r=1){const n=[];for(let i=t;i{var ae;const{range:r,markings:n,showTooltips:a,disableKeyboardInteraction:i}=ee(),{point:s,color:o=P.blue,dragging:l,focusBehavior:u,cursor:y,onClick:m=()=>{}}=t,h=((ae=Object.entries(P).find(([ye,Ce])=>Ce===o))==null?void 0:ae[0])??"blue",p=`movable-point ${l?"movable-point--dragging":""} ${rm(u)}`,[[c,b]]=J(s),[[T,R],[A,O]]=r,[[f]]=J([T,0]),[[v]]=J([R,0]),[[w,C]]=J([0,A]),[[W,F]]=J([0,O]),X=l&&n!=="none",ue=q("g",{children:[d("line",{x1:f,y1:b,x2:v,y2:b,stroke:o}),d("line",{x1:c,y1:C,x2:c,y2:F,stroke:o})]}),de=q("g",{ref:e,className:p,style:{"--movable-point-color":o,cursor:y},"data-testid":"movable-point",tabIndex:i?-1:tm(u),onFocus:ye=>{const Ce=Wi(u);Ce&&Ce(ye,!0)},onBlur:ye=>{const Ce=Wi(u);Ce&&Ce(ye,!1)},onClick:m,children:[d("circle",{className:"movable-point-hitbox",r:em/2,cx:c,cy:b}),d("circle",{className:"movable-point-halo",cx:c,cy:b}),d("circle",{className:"movable-point-ring",cx:c,cy:b}),d("circle",{className:"movable-point-focus-outline",cx:c,cy:b}),d("circle",{className:"movable-point-center",cx:c,cy:b,style:{fill:o},"data-testid":"movable-point__center"})]});return q(U,{children:[X&&ue,a?d(Zn,{autoUpdate:!0,backgroundColor:h,content:`(${s[N]}, ${s[L]})`,contentStyle:{color:"white"},children:de}):de]})});function rm(t){return t.type==="controlled"&&t.showFocusRing?"movable-point--focus":""}function tm(t){if(t.type==="uncontrolled")return t.tabIndex}function Wi(t){return t.type==="uncontrolled"?t.onFocusChange:()=>{}}ya.__docgenInfo={description:"",methods:[],displayName:"MovablePointView",props:{point:{required:!0,tsType:{name:"vec.Vector2"},description:""},color:{required:!1,tsType:{name:"union",raw:"string | undefined",elements:[{name:"string"},{name:"undefined"}]},description:""},dragging:{required:!0,tsType:{name:"boolean"},description:""},focusBehavior:{required:!0,tsType:{name:"union",raw:"ControlledFocusBehavior | UncontrolledFocusBehavior",elements:[{name:"signature",type:"object",raw:'{type: "controlled"; showFocusRing: boolean}',signature:{properties:[{key:"type",value:{name:"literal",value:'"controlled"',required:!0}},{key:"showFocusRing",value:{name:"boolean",required:!0}}]}},{name:"signature",type:"object",raw:`{ - type: "uncontrolled"; - tabIndex: number; - onFocusChange?: (event: React.FocusEvent, isFocused: boolean) => unknown; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"uncontrolled"',required:!0}},{key:"tabIndex",value:{name:"number",required:!0}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:"(event: React.FocusEvent, isFocused: boolean) => unknown",signature:{arguments:[{type:{name:"ReactFocusEvent",raw:"React.FocusEvent"},name:"event"},{type:{name:"boolean"},name:"isFocused"}],return:{name:"unknown"}},required:!1}}]}}]},description:""},cursor:{required:!1,tsType:{name:"union",raw:"CSSCursor | undefined",elements:[{name:"union",raw:'"move" | "ew-resize"',elements:[{name:"literal",value:'"move"'},{name:"literal",value:'"ew-resize"'}]},{name:"undefined"}]},description:""},onClick:{required:!1,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""}}};const Sr=t=>{const{onMoveLine:e=()=>{},onMovePoint:r=()=>{},color:n,points:[a,i],extend:s}=t,{visiblePoint:o,focusableHandle:l}=Ci(a,n,h=>r(0,h)),{visiblePoint:u,focusableHandle:y}=Ci(i,n,h=>r(1,h));return q(U,{children:[l,d(vo,{start:a,end:i,stroke:n,extend:s,onMove:e}),y,o,u]})};function Ci(t,e,r){const{snapStep:n,disableKeyboardInteraction:a}=ee(),[i,s]=k.useState(!1),o=k.useRef(null);Qe({gestureTarget:o,point:t,onMove:r,constrainKeyboardMovement:h=>te(n,h)});const l=k.useRef(null),{dragging:u}=Qe({gestureTarget:l,point:t,onMove:r,constrainKeyboardMovement:h=>te(n,h)});return{focusableHandle:d("g",{"data-testid":"movable-point__focusable-handle",className:"movable-point__focusable-handle",tabIndex:a?-1:0,ref:o,onFocus:()=>s(!0),onBlur:()=>s(!1)}),visiblePoint:d(ya,{point:t,dragging:u,color:e,ref:l,focusBehavior:{type:"controlled",showFocusRing:i}})}}const nm="var(--movable-line-stroke-color)",vo=t=>{const{start:e,end:r,onMove:n,extend:a,stroke:i=nm}=t,[s,o]=J(e,r),{range:l,graphDimensionsInPixels:u,snapStep:y,disableKeyboardInteraction:m}=ee();let h,p;if(a){const T=fo(l,u);h=a.start?Ke(r,e,T):void 0,p=a.end?Ke(e,r,T):void 0}const c=k.useRef(null),{dragging:b}=Qe({gestureTarget:c,point:e,onMove:T=>{n(x.sub(T,e))},constrainKeyboardMovement:T=>te(y,T)});return q(U,{children:[q("g",{ref:c,tabIndex:m?-1:0,className:"movable-line","data-testid":"movable-line",style:{cursor:b?"grabbing":"grab"},children:[d(De,{start:s,end:o,style:{stroke:"transparent",strokeWidth:ua}}),d(De,{start:s,end:o,className:"movable-line-focus-outline",style:{}}),d(De,{start:s,end:o,className:"movable-line-focus-outline-gap",style:{}}),d(De,{start:s,end:o,style:{stroke:i,strokeWidth:"var(--movable-line-stroke-weight)"},className:b?"movable-dragging":"",testId:"movable-line__line"})]}),h&&d(mr,{tail:e,tip:h,color:i}),p&&d(mr,{tail:r,tip:p,color:i})]})};function fo(t,e){const[n,a]=t,[i,s]=e,o=yr(n)/i,l=yr(a)/s,u=4*o,y=4*l;return la([u,y],t)}Sr.__docgenInfo={description:"",methods:[],displayName:"MovableLine",props:{points:{required:!0,tsType:{name:"Readonly",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}]}],raw:"Readonly<[vec.Vector2, vec.Vector2]>"},description:""},onMovePoint:{required:!1,tsType:{name:"signature",type:"function",raw:"(endpointIndex: number, destination: vec.Vector2) => unknown",signature:{arguments:[{type:{name:"number"},name:"endpointIndex"},{type:{name:"vec.Vector2"},name:"destination"}],return:{name:"unknown"}}},description:""},onMoveLine:{required:!1,tsType:{name:"signature",type:"function",raw:"(delta: vec.Vector2) => unknown",signature:{arguments:[{type:{name:"vec.Vector2"},name:"delta"}],return:{name:"unknown"}}},description:""},color:{required:!1,tsType:{name:"string"},description:""},extend:{required:!1,tsType:{name:"signature",type:"object",raw:`{ - start: boolean; - end: boolean; -}`,signature:{properties:[{key:"start",value:{name:"boolean",required:!0}},{key:"end",value:{name:"boolean",required:!0}}]}},description:""}}};vo.__docgenInfo={description:"",methods:[],displayName:"Line",props:{start:{required:!0,tsType:{name:"vec.Vector2"},description:""},end:{required:!0,tsType:{name:"vec.Vector2"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(delta: vec.Vector2) => unknown",signature:{arguments:[{type:{name:"vec.Vector2"},name:"delta"}],return:{name:"unknown"}}},description:""},stroke:{required:!1,tsType:{name:"union",raw:"string | undefined",elements:[{name:"string"},{name:"undefined"}]},description:""},extend:{required:!1,tsType:{name:"union",raw:`| undefined -| { - start: boolean; - end: boolean; - }`,elements:[{name:"undefined"},{name:"signature",type:"object",raw:`{ - start: boolean; - end: boolean; -}`,signature:{properties:[{key:"start",value:{name:"boolean",required:!0}},{key:"end",value:{name:"boolean",required:!0}}]}}]},description:""}}};const wo=t=>{const{dispatch:e}=t,{coords:r}=t.graphState;return d(U,{children:r==null?void 0:r.map((n,a)=>d(Sr,{points:n,onMoveLine:i=>{e(S.segment.moveLine(a,i))},onMovePoint:(i,s)=>{e(S.segment.movePointInFigure(a,i,s))}},a))})};wo.__docgenInfo={description:"",methods:[],displayName:"SegmentGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize -| MovePointInFigure -| MoveLine -| MoveAll -| MovePoint -| MoveCenter -| MoveRadiusPoint -| ChangeSnapStep -| ChangeRange -| AddPoint -| RemovePoint -| FocusPoint -| BlurPoint -| DeleteIntent -| ClickPoint -| ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};const ko=(t,e)=>{const{dispatch:r}=t,{coords:n}=t.graphState;return d(Sr,{points:n,onMoveLine:a=>{r(S.linear.moveLine(a))},extend:{start:!0,end:!0},onMovePoint:(a,i)=>r(S.linear.movePoint(a,i)),color:"var(--movable-line-stroke-color)"},0)};ko.__docgenInfo={description:"",methods:[],displayName:"LinearGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize -| MovePointInFigure -| MoveLine -| MoveAll -| MovePoint -| MoveCenter -| MoveRadiusPoint -| ChangeSnapStep -| ChangeRange -| AddPoint -| RemovePoint -| FocusPoint -| BlurPoint -| DeleteIntent -| ClickPoint -| ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};const qo=t=>{const{dispatch:e}=t,{coords:r}=t.graphState;return q(U,{children:[r==null?void 0:r.map((n,a)=>d(Sr,{points:n,onMoveLine:i=>{e(S.linearSystem.moveLine(a,i))},extend:{start:!0,end:!0},onMovePoint:(i,s)=>e(S.linearSystem.movePointInFigure(a,i,s)),color:"var(--movable-line-stroke-color)"},a)),";"]})};qo.__docgenInfo={description:"",methods:[],displayName:"LinearSystemGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize -| MovePointInFigure +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}}]}}],raw:"ReadonlyArray",required:!0}},{key:"hasNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"countChoices",value:{name:"boolean",required:!1}},{key:"randomize",value:{name:"boolean",required:!1}},{key:"multipleSelect",value:{name:"boolean",required:!1}},{key:"deselectEnabled",value:{name:"boolean",required:!1}},{key:"onePerLine",value:{name:"boolean",required:!1}},{key:"displayCount",value:{name:"any",required:!1}},{key:"noneOfTheAbove",value:{name:"literal",value:"false",required:!1}}]},alias:"PerseusRadioRubric"}}],returns:{type:{name:"union",raw:`| { + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; + } +| { + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; + }`,elements:[{name:"signature",type:"object",raw:`{ + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"showRationalesForCurrentlySelectedChoices",docblock:`Turn on rationale display for the currently selected choices. Note that +this leaves rationales on for choices that are already showing +rationales. +@deprecated Internal only. Use \`showSolutions\` prop instead.`,modifiers:[],params:[{name:"rubric",optional:!1}],returns:null,description:`Turn on rationale display for the currently selected choices. Note that +this leaves rationales on for choices that are already showing +rationales.`},{name:"deselectIncorrectSelectedChoices",docblock:"Deselects any currently-selected choices that are not correct choices.",modifiers:[],params:[],returns:null,description:"Deselects any currently-selected choices that are not correct choices."}],displayName:"Radio",props:{widgetId:{required:!0,tsType:{name:"string"},description:""},alignment:{required:!0,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},problemNum:{required:!0,tsType:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},description:""},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; +}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, +) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been +answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at +0 and is incremented for each group widget), and the ID of the +group widget, then returns a react component that will be added +immediately above the renderer in the group widget. If the +function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead +of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead +of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; +}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same +interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM +DOM elements. For example, when provided, will be used +in place of . This allows clients to provide pre-styled +components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component +to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +} & Partial & + Partial`,elements:[{name:"signature",type:"object",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + status: "correct" | "incorrect" | "invalid"; +}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + visible: number; +}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It +also includes any extra parameters that the originating widget provided. +This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is +being used. For mobile web this will be the ProvidedKeypad +component. In this situation we use the MathInput component +from the math-input repo instead of the existing perseus math +input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance +of \`math-input\`'s keypad to the body. This is used by the native +apps so they can have the keypad be defined on the native side. +It is called with an function that, when called, blurs the input, +and is expected to return an object of the shape +keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the +drawing area (scratchpad) should be allowed/disallowed. + +Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the +page. For example, if this is enabled, the most recently used +radio widget will attempt to keep the "selected" answer in view +after entering review mode. + +Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio +widgets. This allows users to note which answers they believe to +be incorrect, to find the answer by process of elimination. + +We plan to roll this out to all call sites eventually, but for +now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content +in a editor is delayed before propagated to a prop. For example, +when text is typed in the text area of an Editor component, +there will be a delay equal to the value of \`editorChangeDelay\` +before the change is propagated. This is added for better +responsiveness of the editor when used in certain contexts such +as StructuredItem exercises where constant re-rendering for each +keystroke caused text typed in the text area to appear in it +only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); +}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false +| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. + +Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +after they have been transformed by the widget's transform function. +This is useful for when we need to know how a widget has shuffled its +the available choices.`}]}}],raw:`Readonly<{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}>`},{name:"signature",type:"object",raw:`{ + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; +}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< + APIOptions["setDrawingAreaAvailable"] +>`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< + APIOptions & { + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; + } +>`},description:""},keypadElement:{required:!1,tsType:{name:"any"},description:""},questionCompleted:{required:!1,tsType:{name:"boolean"},description:""},onFocus:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},onBlur:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},findWidgets:{required:!0,tsType:{name:"signature",type:"function",raw:"(criterion: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"Widget"}],raw:"ReadonlyArray"}}},description:""},reviewModeRubric:{required:!0,tsType:{name:"Rubric"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`( + arg1: { + hints?: ReadonlyArray; + replace?: boolean; + content?: string; + widgets?: WidgetDict; + images?: ImageDict; + // used only in EditorPage + question?: any; + answerArea?: PerseusAnswerArea | null; + itemDataVersion?: Version; + // used in MutirenderEditor + item?: Item; + editorMode?: EditorMode; + jsonMode?: boolean; + // perseus-all-package/widgets/unit.jsx + value?: any; + // widgets/radio/widget.jsx + choiceStates?: ReadonlyArray; + // widgets/numeric-input.jsx + currentValue?: string; + // perseus-all-package/widgets/dropdown.jsx + selected?: number; + // perseus-all-package/widgets/grapher.jsx + plot?: any; + // Interactive Graph callback (see legacy: interactive-graph.tsx) + graph?: PerseusGraphType; + }, + callback?: () => unknown | null | undefined, + silent?: boolean, +) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + hints?: ReadonlyArray; + replace?: boolean; + content?: string; + widgets?: WidgetDict; + images?: ImageDict; + // used only in EditorPage + question?: any; + answerArea?: PerseusAnswerArea | null; + itemDataVersion?: Version; + // used in MutirenderEditor + item?: Item; + editorMode?: EditorMode; + jsonMode?: boolean; + // perseus-all-package/widgets/unit.jsx + value?: any; + // widgets/radio/widget.jsx + choiceStates?: ReadonlyArray; + // widgets/numeric-input.jsx + currentValue?: string; + // perseus-all-package/widgets/dropdown.jsx + selected?: number; + // perseus-all-package/widgets/grapher.jsx + plot?: any; + // Interactive Graph callback (see legacy: interactive-graph.tsx) + graph?: PerseusGraphType; +}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { + /** + * When \`true\`, causes the previous hint to be replaced with this hint when + * displayed. When \`false\`, the previous hint remains visible when this one + * is displayed. This allows for hints that build upon each other. + */ + replace?: boolean; +}`,elements:[{name:"signature",type:"object",raw:`{ + // Translatable Markdown content to be rendered. May include references to + // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). + // For each image found in this content, there can be an entry in the + // \`images\` dict (below) with the key being the image's url which defines + // additional attributes for the image. + content: string; + // A dictionary of {[widgetName]: Widget} to be referenced from the content field + widgets: PerseusWidgetsMap; + // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + metadata?: ReadonlyArray; + // A dictionary of {[imageUrl]: PerseusImageDetail}. + images: { + [key: string]: PerseusImageDetail; + }; +}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [key: string]: PerseusImageDetail; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // The width of the image + width: number; + // the height of the image + height: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ + /** + * When \`true\`, causes the previous hint to be replaced with this hint when + * displayed. When \`false\`, the previous hint remains visible when this one + * is displayed. This allows for hints that build upon each other. + */ + replace?: boolean; +}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ + _multi: ItemTree; +}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + selected: boolean; + crossedOut: boolean; + highlighted: boolean; + rationaleShown: boolean; + correctnessShown: boolean; + previouslyAnswered: boolean; + readOnly: boolean; +}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle +| PerseusGraphTypeCircle +| PerseusGraphTypeLinear +| PerseusGraphTypeLinearSystem +| PerseusGraphTypeNone +| PerseusGraphTypePoint +| PerseusGraphTypePolygon +| PerseusGraphTypeQuadratic +| PerseusGraphTypeRay +| PerseusGraphTypeSegment +| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ + type: "angle"; + // Whether to show the angle measurements. default: false + showAngles?: boolean; + // Allow Reflex Angles if an "angle" type. default: true + allowReflexAngles?: boolean; + // The angle offset in degrees if an "angle" type. default: 0 + angleOffsetDeg?: number; + // Snap to degree increments if an "angle" type. default: 1 + snapDegrees?: number; + // How to match the answer. If missing, defaults to exact matching. + match?: "congruent"; + // must have 3 coords - ie [Coord, Coord, Coord] + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ + type: "circle"; + center?: Coord; + radius?: number; + // The initial coordinates the graph renders with. + startCoords?: { + center: Coord; + radius: number; + }; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "circle"; + center?: Coord; + radius?: number; + // The initial coordinates the graph renders with. + startCoords?: { + center: Coord; + radius: number; + }; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ + center: Coord; + radius: number; +}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "linear"; + // expects 2 coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "linear"; + // expects 2 coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "linear-system"; + // expects 2 sets of 2 coords + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "linear-system"; + // expects 2 sets of 2 coords + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ + type: "none"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ + type: "point"; + // The number of points if a "point" type. default: 1. "unlimited" if no limit + numPoints?: number | "unlimited"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "point"; + // The number of points if a "point" type. default: 1. "unlimited" if no limit + numPoints?: number | "unlimited"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "polygon"; + // The number of sides. default: 3. "unlimited" if no limit + numSides?: number | "unlimited"; + // Whether to the angle measurements. default: false + showAngles?: boolean; + // Whether to show side measurements. default: false + showSides?: boolean; + // How to snap points. e.g. "grid", "angles", or "sides". default: grid + snapTo?: "grid" | "angles" | "sides"; + // How to match the answer. If missing, defaults to exact matching. + match?: "similar" | "congruent" | "approx"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "polygon"; + // The number of sides. default: 3. "unlimited" if no limit + numSides?: number | "unlimited"; + // Whether to the angle measurements. default: false + showAngles?: boolean; + // Whether to show side measurements. default: false + showSides?: boolean; + // How to snap points. e.g. "grid", "angles", or "sides". default: grid + snapTo?: "grid" | "angles" | "sides"; + // How to match the answer. If missing, defaults to exact matching. + match?: "similar" | "congruent" | "approx"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "quadratic"; + // expects a list of 3 coords + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "quadratic"; + // expects a list of 3 coords + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "ray"; + // Expects a list of 2 Coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "ray"; + // Expects a list of 2 Coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "segment"; + // The number of segments if a "segment" type. default: 1. Max: 6 + numSegments?: number; + // Expects a list of Coord tuples. Length should match the \`numSegments\` value. + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "segment"; + // The number of segments if a "segment" type. default: 1. Max: 6 + numSegments?: number; + // Expects a list of Coord tuples. Length should match the \`numSegments\` value. + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "sinusoid"; + // Expects a list of 2 Coords + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "sinusoid"; + // Expects a list of 2 Coords + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},trackInteraction:{required:!0,tsType:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"TrackingExtraArgs"},name:"extraData"}],return:{name:"void"}}},description:""},isLastUsedWidget:{required:!0,tsType:{name:"boolean"},description:""},linterContext:{required:!1,tsType:{name:"LinterContextProps"},description:"",defaultValue:{value:"linterContextDefault",computed:!0}},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},choices:{defaultValue:{value:"[]",computed:!1},required:!1},multipleSelect:{defaultValue:{value:"false",computed:!1},required:!1},countChoices:{defaultValue:{value:"false",computed:!1},required:!1},deselectEnabled:{defaultValue:{value:"false",computed:!1},required:!1},showSolutions:{defaultValue:{value:'"none"',computed:!1},required:!1}}};const{shuffle:vd,random:fd}=z,wd=(t,e,r)=>{const n=function(o){const l=r===void 0?fd:r;return t.randomize?vd(o,l??0):o},a=function(o){let l=null;const u=o.filter((y,m)=>y.isNoneOfTheAbove?(l=y,!1):!0);return l&&u.push(l),u},i=o=>{const l=[[e.false,e.true],[e.no,e.yes]],u=o.map(y=>y.content);return l.some(y=>g.isEqual(u,y))?[o[1],o[0]]:o},s=t.choices.map((o,l)=>({...o,originalIndex:l,correct:!!o.correct}));return a(i(n(s)))},ti=(t,e,r)=>{const n=wd(t,e,r),a=g.reduce(t.choices,function(u,y){return y.correct?u+1:u},0),{hasNoneOfTheAbove:i,multipleSelect:s,countChoices:o,deselectEnabled:l}=t;return{numCorrect:a,hasNoneOfTheAbove:i,multipleSelect:s,countChoices:o,deselectEnabled:l,choices:n,selectedChoices:g.pluck(n,"correct")}},kd={1:t=>{let e,r;if(!t.noneOfTheAbove)e=t.choices,r=!1;else throw new Error("radio widget v0 no longer supports auto noneOfTheAbove");return g.extend(g.omit(t,"noneOfTheAbove"),{choices:e,hasNoneOfTheAbove:r})}},qd={name:"radio",displayName:"Radio / Multiple choice",accessible:!0,widget:js,transform:ti,staticTransform:ti,version:{major:1,minor:0},propUpgrades:kd,isLintable:!0},Td=[qd,$u,Xu,Pu];function ni(t,e,r){let n=!0,a=!0;return e.values.forEach((i,s)=>{t.values[s]==null&&(n=!1),t.values[s]!==i&&(a=!1)}),n?{type:"points",earned:a?1:0,total:1,message:null}:{type:"invalid",message:r.invalidSelection}}const jr=class jr extends v.Component{constructor(){super(...arguments),this.state={uniqueId:g.uniqueId("perseus_radio_")},this.change=(...e)=>re.apply(this,e)}static validate(e,r,n){return ni(e,r,n)}static getUserInputFromProps(e){return{values:e.values}}getUserInput(){return jr.getUserInputFromProps(this.props)}onChange(e,r){const n=[...this.props.values];n[e]=r,this.change("values",n),this.props.trackInteraction()}simpleValidate(e){return ni(this.getUserInput(),e,this.context.strings)}render(){const e=this,r=this.props.apiOptions.isMobile;let n=this.props.items.map((o,l)=>[o,l]);this.props.randomizeItems&&(n=z.shuffle(n,this.props.problemNum));const a=f("table",{className:"categorizer-table "+x.css(We.mobileTable),children:[d("thead",{children:f("tr",{children:[d("td",{className:x.css(We.emptyHeaderCell)}),this.props.categories.map((o,l)=>d("th",{className:x.css(We.header),children:d($,{content:o,linterContext:this.props.linterContext,strings:this.context.strings})},l))]})}),d("tbody",{children:n.map(o=>{const l=o[0],u=o[1],y=e.state.uniqueId+"_"+u;return f("tr",{children:[d("td",{children:d($,{content:l,linterContext:this.props.linterContext,strings:this.context.strings})}),e.props.categories.map((m,h)=>{const p=e.props.values[u]===h;return d("td",{className:"category "+x.css(We.cell),children:f("div",{className:ze.INTERACTIVE,role:"button","aria-label":m,onClick:()=>this.onChange(u,h),children:[r&&d("input",{type:"radio",name:y,className:x.css(Ma.responsiveInput,Ma.responsiveRadioInput),checked:p,onChange:()=>this.onChange(u,h),onClick:c=>c.stopPropagation()}),!r&&d("span",{className:x.css(We.radioSpan,p&&We.checkedRadioSpan,this.props.static&&p&&We.staticCheckedRadioSpan),children:p?d(ir,{...Hl}):d(ir,{...Gl})})]})},h)})]},u)})})]}),i=Re({"categorizer-container":!0,"static-mode":this.props.static}),s=this.props.apiOptions.isMobile?[We.fullBleedContainer]:[];return d("div",{className:i+" "+x.css(...s),children:a})}};jr.contextType=S,jr.defaultProps={items:[],categories:[],values:[],linterContext:B};let ut=jr;const ai=16,We=x.StyleSheet.create({mobileTable:{[Ir.smOrSmaller]:{minWidth:"auto"}},fullBleedContainer:{[Ir.mdOrSmaller]:{marginLeft:-ai,marginRight:-ai,overflowX:"auto"}},header:{textAlign:"center",verticalAlign:"bottom"},cell:{textAlign:"center",padding:0,color:"#ccc",verticalAlign:"middle"},emptyHeaderCell:{backgroundColor:"inherit",borderBottom:"2px solid #ccc"},radioSpan:{fontSize:30,paddingRight:3,":hover":{color:"#999"}},checkedRadioSpan:{color:"#333"},staticCheckedRadioSpan:{color:"#888"}}),Ad={name:"categorizer",displayName:"Categorizer",hidden:!0,widget:ut,transform:t=>g.pick(t,"items","categories","randomizeItems"),staticTransform:t=>g.pick(t,"items","categories","values","randomizeItems"),isLintable:!0};ut.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[{name:"userInput",optional:!1,type:{name:"signature",type:"object",raw:`{ + values: ReadonlyArray; +}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]},alias:"PerseusCategorizerUserInput"}},{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},alias:"PerseusCategorizerRubric"}},{name:"strings",optional:!1,type:{name:"signature",type:"object",raw:`{ + closeKeypad: string; + openKeypad: string; + mathInputBox: string; + removeHighlight: string; + addHighlight: string; + hintPos: ({pos}: {pos: number}) => string; + errorRendering: ({error}: {error: string}) => string; + APPROXIMATED_PI_ERROR: string; + EXTRA_SYMBOLS_ERROR: string; + NEEDS_TO_BE_SIMPLFIED_ERROR: string; + MISSING_PERCENT_ERROR: string; + MULTIPLICATION_SIGN_ERROR: string; + WRONG_CASE_ERROR: string; + WRONG_LETTER_ERROR: string; + invalidSelection: string; + ERROR_TITLE: string; + ERROR_MESSAGE: string; + hints: string; + getAnotherHint: string; + deprecatedStandin: string; + keepTrying: string; + tryAgain: string; + check: string; + correctExcited: string; + nextQuestion: string; + skipToTitle: ({title}: {title: string}) => string; + current: string; + correct: string; + correctSelected: string; + correctCrossedOut: string; + incorrect: string; + incorrectSelected: string; + hideExplanation: string; + explain: string; + INVALID_MESSAGE_PREFIX: string; + DEFAULT_INVALID_MESSAGE_1: string; + DEFAULT_INVALID_MESSAGE_2: string; + integerExample: string; + properExample: string; + simplifiedProperExample: string; + improperExample: string; + simplifiedImproperExample: string; + mixedExample: string; + decimalExample: string; + percentExample: string; + piExample: string; + yourAnswer: string; + yourAnswerLabel: string; + addPoints: string; + addVertices: string; + tapMultiple: string; + tapSingle: string; + clickMultiple: string; + clickSingle: string; + choices: string; + answers: ({num}: {num: number}) => string; + hideAnswersToggleLabel: string; + moves: ({num}: {num: number}) => string; + clickTiles: string; + turnOffLights: string; + fillAllCells: string; + molecularDrawing: ({content}: {content: string}) => string; + switchDirection: string; + circleOpen: string; + circleFilled: string; + numDivisions: string; + divisions: ({divRangeString}: {divRangeString: string}) => string; + lineRange: ({lineRange}: {lineRange: string}) => string; + lineNumber: ({lineNumber}: {lineNumber: string}) => string; + symbolPassage: ({ + questionSymbol, + questionNumber, + }: { + questionSymbol: string; + questionNumber: string; + }) => string; + symbolQuestion: ({sentenceSymbol}: {sentenceSymbol: string}) => string; + lineLabel: string; + beginningPassage: string; + beginningFootnotes: string; + endPassage: string; + questionMarker: ({number}: {number: string}) => string; + circleMarker: ({number}: {number: string}) => string; + sentenceMarker: ({number}: {number: string}) => string; + dragHandles: string; + tapAddPoints: string; + false: string; + true: string; + no: string; + yes: string; + chooseCorrectNum: string; + notNoneOfTheAbove: string; + noneOfTheAbove: string; + chooseNumAnswers: ({numCorrect}: {numCorrect: string}) => string; + chooseAllAnswers: string; + chooseOneAnswer: string; + choiceCheckedCorrect: ({letter}: {letter: string}) => string; + choiceCrossedOutCorrect: ({letter}: {letter: string}) => string; + choiceCorrect: ({letter}: {letter: string}) => string; + choiceCheckedIncorrect: ({letter}: {letter: string}) => string; + choiceCrossedOutIncorrect: ({letter}: {letter: string}) => string; + choiceIncorrect: ({letter}: {letter: string}) => string; + choiceChecked: ({letter}: {letter: string}) => string; + choiceCrossedOut: ({letter}: {letter: string}) => string; + choice: ({letter}: {letter: string}) => string; + crossOut: string; + crossOutOption: string; + crossOutChoice: ({letter}: {letter: string}) => string; + bringBack: string; + openMenuForChoice: ({letter}: {letter: string}) => string; + letters: string; + rightArrow: string; + dontUnderstandUnits: string; + checkSigFigs: string; + answerNumericallyIncorrect: string; + checkUnits: string; + dontUnderstand: string; + loading: string; + videoTranscript: string; + somethingWrong: string; + videoWrapper: string; + mathInputTitle: string; + mathInputDescription: string; + sin: string; + cos: string; + tan: string; + simulationLoadFail: string; + simulationLocaleWarning: string; + addPoint: string; + removePoint: string; + graphKeyboardPrompt: string; +}`,signature:{properties:[{key:"closeKeypad",value:{name:"string",required:!0}},{key:"openKeypad",value:{name:"string",required:!0}},{key:"mathInputBox",value:{name:"string",required:!0}},{key:"removeHighlight",value:{name:"string",required:!0}},{key:"addHighlight",value:{name:"string",required:!0}},{key:"hintPos",value:{name:"signature",type:"function",raw:"({pos}: {pos: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{pos: number}",signature:{properties:[{key:"pos",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"errorRendering",value:{name:"signature",type:"function",raw:"({error}: {error: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{error: string}",signature:{properties:[{key:"error",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"APPROXIMATED_PI_ERROR",value:{name:"string",required:!0}},{key:"EXTRA_SYMBOLS_ERROR",value:{name:"string",required:!0}},{key:"NEEDS_TO_BE_SIMPLFIED_ERROR",value:{name:"string",required:!0}},{key:"MISSING_PERCENT_ERROR",value:{name:"string",required:!0}},{key:"MULTIPLICATION_SIGN_ERROR",value:{name:"string",required:!0}},{key:"WRONG_CASE_ERROR",value:{name:"string",required:!0}},{key:"WRONG_LETTER_ERROR",value:{name:"string",required:!0}},{key:"invalidSelection",value:{name:"string",required:!0}},{key:"ERROR_TITLE",value:{name:"string",required:!0}},{key:"ERROR_MESSAGE",value:{name:"string",required:!0}},{key:"hints",value:{name:"string",required:!0}},{key:"getAnotherHint",value:{name:"string",required:!0}},{key:"deprecatedStandin",value:{name:"string",required:!0}},{key:"keepTrying",value:{name:"string",required:!0}},{key:"tryAgain",value:{name:"string",required:!0}},{key:"check",value:{name:"string",required:!0}},{key:"correctExcited",value:{name:"string",required:!0}},{key:"nextQuestion",value:{name:"string",required:!0}},{key:"skipToTitle",value:{name:"signature",type:"function",raw:"({title}: {title: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{title: string}",signature:{properties:[{key:"title",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"current",value:{name:"string",required:!0}},{key:"correct",value:{name:"string",required:!0}},{key:"correctSelected",value:{name:"string",required:!0}},{key:"correctCrossedOut",value:{name:"string",required:!0}},{key:"incorrect",value:{name:"string",required:!0}},{key:"incorrectSelected",value:{name:"string",required:!0}},{key:"hideExplanation",value:{name:"string",required:!0}},{key:"explain",value:{name:"string",required:!0}},{key:"INVALID_MESSAGE_PREFIX",value:{name:"string",required:!0}},{key:"DEFAULT_INVALID_MESSAGE_1",value:{name:"string",required:!0}},{key:"DEFAULT_INVALID_MESSAGE_2",value:{name:"string",required:!0}},{key:"integerExample",value:{name:"string",required:!0}},{key:"properExample",value:{name:"string",required:!0}},{key:"simplifiedProperExample",value:{name:"string",required:!0}},{key:"improperExample",value:{name:"string",required:!0}},{key:"simplifiedImproperExample",value:{name:"string",required:!0}},{key:"mixedExample",value:{name:"string",required:!0}},{key:"decimalExample",value:{name:"string",required:!0}},{key:"percentExample",value:{name:"string",required:!0}},{key:"piExample",value:{name:"string",required:!0}},{key:"yourAnswer",value:{name:"string",required:!0}},{key:"yourAnswerLabel",value:{name:"string",required:!0}},{key:"addPoints",value:{name:"string",required:!0}},{key:"addVertices",value:{name:"string",required:!0}},{key:"tapMultiple",value:{name:"string",required:!0}},{key:"tapSingle",value:{name:"string",required:!0}},{key:"clickMultiple",value:{name:"string",required:!0}},{key:"clickSingle",value:{name:"string",required:!0}},{key:"choices",value:{name:"string",required:!0}},{key:"answers",value:{name:"signature",type:"function",raw:"({num}: {num: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{num: number}",signature:{properties:[{key:"num",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"hideAnswersToggleLabel",value:{name:"string",required:!0}},{key:"moves",value:{name:"signature",type:"function",raw:"({num}: {num: number}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{num: number}",signature:{properties:[{key:"num",value:{name:"number",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"clickTiles",value:{name:"string",required:!0}},{key:"turnOffLights",value:{name:"string",required:!0}},{key:"fillAllCells",value:{name:"string",required:!0}},{key:"molecularDrawing",value:{name:"signature",type:"function",raw:"({content}: {content: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{content: string}",signature:{properties:[{key:"content",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"switchDirection",value:{name:"string",required:!0}},{key:"circleOpen",value:{name:"string",required:!0}},{key:"circleFilled",value:{name:"string",required:!0}},{key:"numDivisions",value:{name:"string",required:!0}},{key:"divisions",value:{name:"signature",type:"function",raw:"({divRangeString}: {divRangeString: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{divRangeString: string}",signature:{properties:[{key:"divRangeString",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineRange",value:{name:"signature",type:"function",raw:"({lineRange}: {lineRange: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{lineRange: string}",signature:{properties:[{key:"lineRange",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineNumber",value:{name:"signature",type:"function",raw:"({lineNumber}: {lineNumber: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{lineNumber: string}",signature:{properties:[{key:"lineNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolPassage",value:{name:"signature",type:"function",raw:`({ + questionSymbol, + questionNumber, +}: { + questionSymbol: string; + questionNumber: string; +}) => string`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + questionSymbol: string; + questionNumber: string; +}`,signature:{properties:[{key:"questionSymbol",value:{name:"string",required:!0}},{key:"questionNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolQuestion",value:{name:"signature",type:"function",raw:"({sentenceSymbol}: {sentenceSymbol: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{sentenceSymbol: string}",signature:{properties:[{key:"sentenceSymbol",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineLabel",value:{name:"string",required:!0}},{key:"beginningPassage",value:{name:"string",required:!0}},{key:"beginningFootnotes",value:{name:"string",required:!0}},{key:"endPassage",value:{name:"string",required:!0}},{key:"questionMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"circleMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"sentenceMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"dragHandles",value:{name:"string",required:!0}},{key:"tapAddPoints",value:{name:"string",required:!0}},{key:"false",value:{name:"string",required:!0}},{key:"true",value:{name:"string",required:!0}},{key:"no",value:{name:"string",required:!0}},{key:"yes",value:{name:"string",required:!0}},{key:"chooseCorrectNum",value:{name:"string",required:!0}},{key:"notNoneOfTheAbove",value:{name:"string",required:!0}},{key:"noneOfTheAbove",value:{name:"string",required:!0}},{key:"chooseNumAnswers",value:{name:"signature",type:"function",raw:"({numCorrect}: {numCorrect: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{numCorrect: string}",signature:{properties:[{key:"numCorrect",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"chooseAllAnswers",value:{name:"string",required:!0}},{key:"chooseOneAnswer",value:{name:"string",required:!0}},{key:"choiceCheckedCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCheckedIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceChecked",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOut",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"crossOut",value:{name:"string",required:!0}},{key:"crossOutOption",value:{name:"string",required:!0}},{key:"crossOutChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"bringBack",value:{name:"string",required:!0}},{key:"openMenuForChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"letters",value:{name:"string",required:!0}},{key:"rightArrow",value:{name:"string",required:!0}},{key:"dontUnderstandUnits",value:{name:"string",required:!0}},{key:"checkSigFigs",value:{name:"string",required:!0}},{key:"answerNumericallyIncorrect",value:{name:"string",required:!0}},{key:"checkUnits",value:{name:"string",required:!0}},{key:"dontUnderstand",value:{name:"string",required:!0}},{key:"loading",value:{name:"string",required:!0}},{key:"videoTranscript",value:{name:"string",required:!0}},{key:"somethingWrong",value:{name:"string",required:!0}},{key:"videoWrapper",value:{name:"string",required:!0}},{key:"mathInputTitle",value:{name:"string",required:!0}},{key:"mathInputDescription",value:{name:"string",required:!0}},{key:"sin",value:{name:"string",required:!0}},{key:"cos",value:{name:"string",required:!0}},{key:"tan",value:{name:"string",required:!0}},{key:"simulationLoadFail",value:{name:"string",required:!0}},{key:"simulationLocaleWarning",value:{name:"string",required:!0}},{key:"addPoint",value:{name:"string",required:!0}},{key:"removePoint",value:{name:"string",required:!0}},{key:"graphKeyboardPrompt",value:{name:"string",required:!0}}]},alias:"PerseusStrings"}}],returns:{type:{name:"union",raw:`| { + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; + } +| { + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; + }`,elements:[{name:"signature",type:"object",raw:`{ + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"getUserInputFromProps",docblock:null,modifiers:["static"],params:[{name:"props",optional:!1,type:{name:"intersection",raw:`WidgetProps & { + values: ReadonlyArray; +}`,elements:[{name:"intersection",raw:`RenderProps & { + // provided by renderer.jsx#getWidgetProps() + widgetId: string; + alignment: string | null | undefined; + static: boolean | null | undefined; + problemNum: number | null | undefined; + apiOptions: APIOptionsWithDefaults; + keypadElement?: any; + questionCompleted?: boolean; + onFocus: (blurPath: FocusPath) => void; + onBlur: (blurPath: FocusPath) => void; + findWidgets: (criterion: FilterCriterion) => ReadonlyArray; + reviewModeRubric: Rubric; + onChange: ChangeHandler; + // This is slightly different from the \`trackInteraction\` function in + // APIOptions. This provides the widget an easy way to notify the renderer + // of an interaction. The Renderer then enriches the data provided with the + // widget's id and type before calling APIOptions.trackInteraction. + trackInteraction: (extraData?: TrackingExtraArgs) => void; + isLastUsedWidget: boolean; + // provided by widget-container.jsx#render() + linterContext: LinterContextProps; + containerSizeClass: SizeClass; +}`,elements:[{name:"signature",type:"object",raw:`{ + items: PerseusCategorizerWidgetOptions["items"]; + categories: PerseusCategorizerWidgetOptions["categories"]; + randomizeItems: PerseusCategorizerWidgetOptions["randomizeItems"]; + // Depends on whether the widget is in static mode + values?: PerseusCategorizerWidgetOptions["values"]; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",raw:'PerseusCategorizerWidgetOptions["items"]',required:!0}},{key:"categories",value:{name:"ReadonlyArray",raw:'PerseusCategorizerWidgetOptions["categories"]',required:!0}},{key:"randomizeItems",value:{name:"boolean",raw:'PerseusCategorizerWidgetOptions["randomizeItems"]',required:!0}},{key:"values",value:{name:"ReadonlyArray",raw:'PerseusCategorizerWidgetOptions["values"]',required:!1}}]}},{name:"signature",type:"object",raw:`{ + // provided by renderer.jsx#getWidgetProps() + widgetId: string; + alignment: string | null | undefined; + static: boolean | null | undefined; + problemNum: number | null | undefined; + apiOptions: APIOptionsWithDefaults; + keypadElement?: any; + questionCompleted?: boolean; + onFocus: (blurPath: FocusPath) => void; + onBlur: (blurPath: FocusPath) => void; + findWidgets: (criterion: FilterCriterion) => ReadonlyArray; + reviewModeRubric: Rubric; + onChange: ChangeHandler; + // This is slightly different from the \`trackInteraction\` function in + // APIOptions. This provides the widget an easy way to notify the renderer + // of an interaction. The Renderer then enriches the data provided with the + // widget's id and type before calling APIOptions.trackInteraction. + trackInteraction: (extraData?: TrackingExtraArgs) => void; + isLastUsedWidget: boolean; + // provided by widget-container.jsx#render() + linterContext: LinterContextProps; + containerSizeClass: SizeClass; +}`,signature:{properties:[{key:"widgetId",value:{name:"string",required:!0}},{key:"alignment",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"static",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!0}},{key:"problemNum",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"apiOptions",value:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; +}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, +) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been +answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at +0 and is incremented for each group widget), and the ID of the +group widget, then returns a react component that will be added +immediately above the renderer in the group widget. If the +function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead +of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead +of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; +}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same +interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM +DOM elements. For example, when provided, will be used +in place of . This allows clients to provide pre-styled +components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component +to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +} & Partial & + Partial`,elements:[{name:"signature",type:"object",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + status: "correct" | "incorrect" | "invalid"; +}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + visible: number; +}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It +also includes any extra parameters that the originating widget provided. +This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is +being used. For mobile web this will be the ProvidedKeypad +component. In this situation we use the MathInput component +from the math-input repo instead of the existing perseus math +input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance +of \`math-input\`'s keypad to the body. This is used by the native +apps so they can have the keypad be defined on the native side. +It is called with an function that, when called, blurs the input, +and is expected to return an object of the shape +keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the +drawing area (scratchpad) should be allowed/disallowed. + +Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the +page. For example, if this is enabled, the most recently used +radio widget will attempt to keep the "selected" answer in view +after entering review mode. + +Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio +widgets. This allows users to note which answers they believe to +be incorrect, to find the answer by process of elimination. + +We plan to roll this out to all call sites eventually, but for +now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content +in a editor is delayed before propagated to a prop. For example, +when text is typed in the text area of an Editor component, +there will be a delay equal to the value of \`editorChangeDelay\` +before the change is propagated. This is added for better +responsiveness of the editor when used in certain contexts such +as StructuredItem exercises where constant re-rendering for each +keystroke caused text typed in the text area to appear in it +only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); +}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false +| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. + +Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +after they have been transformed by the widget's transform function. +This is useful for when we need to know how a widget has shuffled its +the available choices.`}]}}],raw:`Readonly<{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}>`},{name:"signature",type:"object",raw:`{ + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; +}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< + APIOptions["setDrawingAreaAvailable"] +>`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< + APIOptions & { + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; + } +>`,required:!0}},{key:"keypadElement",value:{name:"any",required:!1}},{key:"questionCompleted",value:{name:"boolean",required:!1}},{key:"onFocus",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"onBlur",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"findWidgets",value:{name:"signature",type:"function",raw:"(criterion: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"Widget"}],raw:"ReadonlyArray"}},required:!0}},{key:"reviewModeRubric",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"onChange",value:{name:"signature",type:"function",raw:`( + arg1: { + hints?: ReadonlyArray; + replace?: boolean; + content?: string; + widgets?: WidgetDict; + images?: ImageDict; + // used only in EditorPage + question?: any; + answerArea?: PerseusAnswerArea | null; + itemDataVersion?: Version; + // used in MutirenderEditor + item?: Item; + editorMode?: EditorMode; + jsonMode?: boolean; + // perseus-all-package/widgets/unit.jsx + value?: any; + // widgets/radio/widget.jsx + choiceStates?: ReadonlyArray; + // widgets/numeric-input.jsx + currentValue?: string; + // perseus-all-package/widgets/dropdown.jsx + selected?: number; + // perseus-all-package/widgets/grapher.jsx + plot?: any; + // Interactive Graph callback (see legacy: interactive-graph.tsx) + graph?: PerseusGraphType; + }, + callback?: () => unknown | null | undefined, + silent?: boolean, +) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + hints?: ReadonlyArray; + replace?: boolean; + content?: string; + widgets?: WidgetDict; + images?: ImageDict; + // used only in EditorPage + question?: any; + answerArea?: PerseusAnswerArea | null; + itemDataVersion?: Version; + // used in MutirenderEditor + item?: Item; + editorMode?: EditorMode; + jsonMode?: boolean; + // perseus-all-package/widgets/unit.jsx + value?: any; + // widgets/radio/widget.jsx + choiceStates?: ReadonlyArray; + // widgets/numeric-input.jsx + currentValue?: string; + // perseus-all-package/widgets/dropdown.jsx + selected?: number; + // perseus-all-package/widgets/grapher.jsx + plot?: any; + // Interactive Graph callback (see legacy: interactive-graph.tsx) + graph?: PerseusGraphType; +}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { + /** + * When \`true\`, causes the previous hint to be replaced with this hint when + * displayed. When \`false\`, the previous hint remains visible when this one + * is displayed. This allows for hints that build upon each other. + */ + replace?: boolean; +}`,elements:[{name:"signature",type:"object",raw:`{ + // Translatable Markdown content to be rendered. May include references to + // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). + // For each image found in this content, there can be an entry in the + // \`images\` dict (below) with the key being the image's url which defines + // additional attributes for the image. + content: string; + // A dictionary of {[widgetName]: Widget} to be referenced from the content field + widgets: PerseusWidgetsMap; + // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + metadata?: ReadonlyArray; + // A dictionary of {[imageUrl]: PerseusImageDetail}. + images: { + [key: string]: PerseusImageDetail; + }; +}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [key: string]: PerseusImageDetail; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // The width of the image + width: number; + // the height of the image + height: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ + /** + * When \`true\`, causes the previous hint to be replaced with this hint when + * displayed. When \`false\`, the previous hint remains visible when this one + * is displayed. This allows for hints that build upon each other. + */ + replace?: boolean; +}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ + _multi: ItemTree; +}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + selected: boolean; + crossedOut: boolean; + highlighted: boolean; + rationaleShown: boolean; + correctnessShown: boolean; + previouslyAnswered: boolean; + readOnly: boolean; +}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle +| PerseusGraphTypeCircle +| PerseusGraphTypeLinear +| PerseusGraphTypeLinearSystem +| PerseusGraphTypeNone +| PerseusGraphTypePoint +| PerseusGraphTypePolygon +| PerseusGraphTypeQuadratic +| PerseusGraphTypeRay +| PerseusGraphTypeSegment +| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ + type: "angle"; + // Whether to show the angle measurements. default: false + showAngles?: boolean; + // Allow Reflex Angles if an "angle" type. default: true + allowReflexAngles?: boolean; + // The angle offset in degrees if an "angle" type. default: 0 + angleOffsetDeg?: number; + // Snap to degree increments if an "angle" type. default: 1 + snapDegrees?: number; + // How to match the answer. If missing, defaults to exact matching. + match?: "congruent"; + // must have 3 coords - ie [Coord, Coord, Coord] + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ + type: "circle"; + center?: Coord; + radius?: number; + // The initial coordinates the graph renders with. + startCoords?: { + center: Coord; + radius: number; + }; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "circle"; + center?: Coord; + radius?: number; + // The initial coordinates the graph renders with. + startCoords?: { + center: Coord; + radius: number; + }; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ + center: Coord; + radius: number; +}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "linear"; + // expects 2 coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "linear"; + // expects 2 coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "linear-system"; + // expects 2 sets of 2 coords + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "linear-system"; + // expects 2 sets of 2 coords + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ + type: "none"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ + type: "point"; + // The number of points if a "point" type. default: 1. "unlimited" if no limit + numPoints?: number | "unlimited"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "point"; + // The number of points if a "point" type. default: 1. "unlimited" if no limit + numPoints?: number | "unlimited"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "polygon"; + // The number of sides. default: 3. "unlimited" if no limit + numSides?: number | "unlimited"; + // Whether to the angle measurements. default: false + showAngles?: boolean; + // Whether to show side measurements. default: false + showSides?: boolean; + // How to snap points. e.g. "grid", "angles", or "sides". default: grid + snapTo?: "grid" | "angles" | "sides"; + // How to match the answer. If missing, defaults to exact matching. + match?: "similar" | "congruent" | "approx"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "polygon"; + // The number of sides. default: 3. "unlimited" if no limit + numSides?: number | "unlimited"; + // Whether to the angle measurements. default: false + showAngles?: boolean; + // Whether to show side measurements. default: false + showSides?: boolean; + // How to snap points. e.g. "grid", "angles", or "sides". default: grid + snapTo?: "grid" | "angles" | "sides"; + // How to match the answer. If missing, defaults to exact matching. + match?: "similar" | "congruent" | "approx"; + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "quadratic"; + // expects a list of 3 coords + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "quadratic"; + // expects a list of 3 coords + coords?: [Coord, Coord, Coord] | null; + // The initial coordinates the graph renders with. + startCoords?: [Coord, Coord, Coord]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "ray"; + // Expects a list of 2 Coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "ray"; + // Expects a list of 2 Coords + coords?: CollinearTuple | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "segment"; + // The number of segments if a "segment" type. default: 1. Max: 6 + numSegments?: number; + // Expects a list of Coord tuples. Length should match the \`numSegments\` value. + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "segment"; + // The number of segments if a "segment" type. default: 1. Max: 6 + numSegments?: number; + // Expects a list of Coord tuples. Length should match the \`numSegments\` value. + coords?: CollinearTuple[] | null; + // The initial coordinates the graph renders with. + startCoords?: CollinearTuple[]; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ + type: "sinusoid"; + // Expects a list of 2 Coords + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ + type: "sinusoid"; + // Expects a list of 2 Coords + coords?: ReadonlyArray | null; + // The initial coordinates the graph renders with. + startCoords?: ReadonlyArray; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ + // NOTE(jeremy): This is referenced in the component. Verify if there's any + // production data that still has this. + coord?: Coord; // Legacy! +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"Empty"},name:"extraData"}],return:{name:"void"}},required:!0}},{key:"isLastUsedWidget",value:{name:"boolean",required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}},{key:"containerSizeClass",value:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]",required:!0}}]}}]},{name:"signature",type:"object",raw:`{ + values: ReadonlyArray; +}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}}],alias:"Props"}}],returns:{type:{name:"signature",type:"object",raw:`{ + values: ReadonlyArray; +}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}}}},{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"signature",type:"object",raw:`{ + values: ReadonlyArray; +}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}}}},{name:"onChange",docblock:null,modifiers:[],params:[{name:"itemNum",optional:!1,type:null},{name:"catNum",optional:!1,type:null}],returns:null},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},alias:"PerseusCategorizerRubric"}}],returns:{type:{name:"union",raw:`| { + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; + } +| { + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; + }`,elements:[{name:"signature",type:"object",raw:`{ + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}}],displayName:"Categorizer",props:{items:{defaultValue:{value:"[]",computed:!1},required:!1},categories:{defaultValue:{value:"[]",computed:!1},required:!1},values:{defaultValue:{value:"[]",computed:!1},required:!1},linterContext:{defaultValue:{value:"linterContextDefault",computed:!0},required:!1}}};const Rd=t=>!!(t&&t.toLowerCase()==="file:");let Ht;const Od=()=>(Ht||(Ht=window.location),Ht),xd=t=>new URL(t,Od().origin),Ws=t=>xd(t).href;function ii(t){return t.status==="correct"?{type:"points",earned:1,total:1,message:t.message||null}:t.status==="incorrect"?{type:"points",earned:0,total:1,message:t.message||null}:{type:"invalid",message:"Keep going, you're not there yet!"}}const{updateQueryString:jd}=z;function Wd(t){const{InitialRequestUrl:e}=fe(),r=`/computer-programming/program/${t}/embedded?embed=yes&author=no`;return Rd(e.protocol)?`https://khanacademy.org${r}`:Ws(r)}const ba=class ba extends v.Component{constructor(){super(...arguments),this.handleMessageEvent=e=>{let r={};try{r=JSON.parse(e.originalEvent.data)}catch{return}if(g.isUndefined(r.testsPassed))return;const n=r.testsPassed?"correct":"incorrect";this.change({status:n,message:r.message})},this.change=(...e)=>re.apply(this,e)}static validate(e){return ii(e)}componentDidMount(){_(window).on("message",this.handleMessageEvent)}componentWillUnmount(){_(window).off("message",this.handleMessageEvent)}getUserInput(){return{status:this.props.status,message:this.props.message}}simpleValidate(){return ii(this.getUserInput())}render(){if(!this.props.programID)return d("div",{});let e=!1,r=Wd(this.props.programID),n;const a={height:this.props.height,width:"100%"};if(this.props.showEditor?(r+="&editor=yes",n="perseus-scratchpad-editor"):(r+=`&editor=no&width=${Ql}`,n="perseus-scratchpad",this.props.programType!=="webpage"&&(e=!0)),this.props.showButtons?(r+="&buttons=yes",a.height+=67):r+="&buttons=no",this.props.settings){const s={};g.each(this.props.settings,function(o){o.name&&o.value&&(s[o.name]=o.value)}),r=jd(r,"settings",JSON.stringify(s))}const i=["allow-popups","allow-same-origin","allow-scripts","allow-top-navigation"].join(" ");return d("div",{className:x.css(si.widthOverride,e&&si.container),children:d("iframe",{sandbox:i,src:r,style:a,className:n,allowFullScreen:!0})})}};ba.defaultProps={showEditor:!1,showButtons:!1,status:"incomplete",message:null};let ln=ba;const si=x.StyleSheet.create({widthOverride:{width:820},container:{margin:"auto"}}),Cd={name:"cs-program",displayName:"CS Program",supportedAlignments:["block","full-width"],widget:ln,hidden:!0},wt=class wt extends v.Component{static validate(){return H()}getUserInput(){return{}}simpleValidate(){return H()}render(){return d(Ol,{children:({activeDefinitionId:e,setActiveDefinitionId:r})=>d(Zl,{content:d(eu,{color:"white",style:Id.tooltipBody,closeButtonVisible:!0,children:d($,{apiOptions:this.props.apiOptions,content:this.props.definition,widgets:this.props.widgets,strings:this.context.strings})}),opened:e===this.props.widgetId,onClose:()=>r(null),placement:"top",children:d(ta,{onClick:()=>{this.props.trackInteraction(),r(this.props.widgetId)},children:({hovered:n,focused:a,pressed:i})=>d("span",{style:{color:N.blue,borderBottom:n||a||i?`2px solid ${N.blue}`:"none"},children:this.props.togglePrompt})})})})}};wt.contextType=S,wt.defaultProps={togglePrompt:"define me",definition:"definition goes here"};let un=wt;const Id={tooltipBody:{color:N.offBlack,fontSize:20,fontWeight:500,lineHeight:"30px"}},Nd={name:"definition",displayName:"Definition",accessible:!0,defaultAlignment:"inline",widget:un,transform:t=>t},va=class va extends ns.Component{static validate(){return H(1)}getUserInput(){return{}}simpleValidate(){return H(1)}render(){return d("div",{style:{paddingTop:8,paddingBottom:8},children:d(ru,{text:this.context.strings.deprecatedStandin,kind:"info",layout:"full-width"})})}};va.contextType=S;let dn=va;const Ed={name:"deprecated-standin",displayName:"Deprecated Standin",widget:dn,hidden:!0};function oi(t,e){const r=t.value;return r===0?{type:"invalid",message:null}:{type:"points",earned:e.choices[r-1].correct?1:0,total:1,message:null}}const fa=class fa extends v.Component{constructor(){super(...arguments),this.focus=()=>(V.findDOMNode(this).focus(),!0),this._handleChangeEvent=e=>{this._handleChange(parseInt(e.target.value))},this._handleChange=e=>{this.props.trackInteraction(),this.props.onChange({selected:e})}}static validate(e,r){return oi(e,r)}getUserInput(){return{value:this.props.selected}}simpleValidate(e){return oi(this.getUserInput(),e)}render(){const e=[d(Ua,{value:"0",disabled:!0,label:this.props.placeholder},"placeholder"),...this.props.choices.map((r,n)=>d(Ua,{value:String(n+1),label:r},String(n+1)))];return d("div",{onClick:r=>{r.stopPropagation()},onTouchStart:r=>{r.stopPropagation()},children:d(yu,{placeholder:"",onChange:r=>this._handleChange(parseInt(r)),selectedValue:String(this.props.selected),disabled:this.props.apiOptions.readOnly,children:e})})}};fa.defaultProps={choices:[],selected:0,placeholder:"",apiOptions:ye.defaults};let yn=fa;const zd=t=>({placeholder:t.placeholder,choices:t.choices.map(e=>e.content)}),Ld={name:"dropdown",displayName:"Drop down",defaultAlignment:"inline-block",accessible:!0,widget:yn,transform:zd},_d=""+new URL("caret-down-p-qg5kuR.svg",import.meta.url).href,Pd=""+new URL("caret-up-GYuL-R7P.svg",import.meta.url).href;function Fd(t){return typeof window.matchMedia!="function"?!1:window.matchMedia(t).matches}const kt=class kt extends v.Component{constructor(){super(...arguments),this.state={expanded:!1},this._mounted=!1,this.change=(...e)=>re.apply(this,e),this._onClick=()=>{this.setState({expanded:!this.state.expanded}),this.props.trackInteraction()}}static validate(){return H()}componentDidMount(){this._mounted=!0}componentWillUnmount(){this._mounted=!1}getUserInput(){return{}}simpleValidate(){return H()}render(){const e=this.state.expanded?this.props.hidePrompt:this.props.showPrompt,r=this.state.expanded?Pd:_d,n=this._mounted&&Fd("(prefers-reduced-motion: no-preference)"),a={height:"auto",lineHeight:"inherit",marginLeft:"-2px",marginRight:"2px",paddingLeft:"2px"},i={fontSize:"18px",lineHeight:"inherit","text-align":"left",marginRight:"-6px","white-space":"normal"},s=[Je.content,this.state.expanded?Je.contentExpanded:Je.contentCollapsed,n&&(this.state.expanded?Je.transitionExpanded:Je.transitionCollapsed)];return d(Wl,{mockOnFirstRender:!0,scope:"explanation-widget",children:o=>f(D,{children:[d(Ke,{"aria-expanded":this.state.expanded,"aria-controls":o.get("content"),endIcon:r,kind:"tertiary",labelStyle:i,onClick:this._onClick,size:"small",style:a,children:e}),d(G,{id:o.get("content"),style:s,"aria-hidden":!this.state.expanded,testId:"content-container",children:d(G,{style:Je.contentWrapper,children:d($,{apiOptions:this.props.apiOptions,content:this.props.explanation,widgets:this.props.widgets,linterContext:this.props.linterContext,strings:this.context.strings})})})]})})}};kt.contextType=S,kt.defaultProps={showPrompt:"Explain",hidePrompt:"Hide explanation",explanation:`explanation goes here + +more explanation`,widgets:{},linterContext:B};let mn=kt;const li=23,Sd=10,ui=14,Je=x.StyleSheet.create({content:{borderLeft:"0px solid #ccc",display:"inline-grid",position:"relative"},contentCollapsed:{gridTemplateColumns:"0fr",gridTemplateRows:"0fr",marginBottom:0,marginTop:0,minWidth:"0",paddingBottom:0,visibility:"hidden"},contentExpanded:{borderLeftWidth:"5px",gridTemplateColumns:"1fr",gridTemplateRows:"1fr",marginLeft:-li,minWidth:"100%",paddingLeft:li,paddingBottom:Sd,visibility:"visible",marginBottom:ui,marginTop:ui},contentWrapper:{overflow:"hidden"},transitionCollapsed:{transition:"all 0.25s step-end, grid-template-rows 0.25s, margin-top 0.25s, margin-bottom 0.25s, padding-bottom 0.25s"},transitionExpanded:{transition:"grid-template-rows 0.5s, margin-top 0.5s, margin-bottom 0.5s, padding-bottom 0.5s"}}),Md={name:"explanation",displayName:"Explanation",accessible:!0,defaultAlignment:"inline",widget:mn,transform:g.identity,isLintable:!0},wa=class wa extends v.Component{render(){const{apiOptions:e,answerBarState:r,onCheckAnswer:n,onNextQuestion:a}=this.props,{keepTrying:i,tryAgain:s,check:o,correctExcited:l,nextQuestion:u}=this.context.strings,y={...Mr.answerBar,backgroundColor:r==="CORRECT"?N.offWhite:"white",justifyContent:r==="CORRECT"&&!a?"center":"space-between"},m=r==="INCORRECT"?f("span",{style:Mr.text,children:[d("span",{style:Mr.tryAgainIcon,children:d(ir,{...Bl})}),d("span",{style:{marginLeft:8},children:i})]}):d("span",{});if(r!=="CORRECT"){const h=r==="INCORRECT"?s:o;return f("div",{style:y,children:[m,d(Ke,{disabled:e.readOnly||r!=="ACTIVE",onClick:n,children:h})]})}return f("div",{style:y,children:[f("span",{style:Mr.text,children:[d("span",{style:{fontSize:28,color:N.green},children:d(ir,{...Kl,style:{marginBottom:5}})}),d("span",{role:"alert","aria-label":l,style:{marginLeft:8},children:l})]}),a&&d(Ke,{onClick:a,children:u})]})}};wa.contextType=S;let dt=wa;const Ud=17,Mr={answerBar:{display:"flex",alignItems:"center",height:68,marginLeft:$e,marginRight:$e,marginBottom:$e,marginTop:Ee,paddingLeft:Ee,paddingRight:10,borderTop:`1px solid ${N.offBlack50}`},tryAgainIcon:{fontSize:28,color:"#63D9EA",transform:"scale(-1,1) rotate(-268deg)"},text:{display:"flex",flexDirection:"row",alignItems:"center",fontWeight:"bold",fontSize:Ud}};dt.__docgenInfo={description:"",methods:[],displayName:"GradedGroupAnswerBar",props:{answerBarState:{required:!0,tsType:{name:"union",raw:`| "HIDDEN" // The 'Check' button is disabled and there is no message. This occurs when +// some of the widgets haven't been filled in after the has already become +// visible. +| "ACTIVE" // This happens immediately after clicking 'Check' with a wrong answer. +// The 'Check' button is disabled and the 'Try Again' message is displayed. +| "INACTIVE" // Final state. This occurs after the user submits the correct answer. +// The widgets in this grade-group are disabled. +| "INCORRECT" +| "CORRECT"`,elements:[{name:"literal",value:'"HIDDEN"'},{name:"literal",value:'"ACTIVE"'},{name:"literal",value:'"INACTIVE"'},{name:"literal",value:'"INCORRECT"'},{name:"literal",value:'"CORRECT"'}]},description:""},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, +) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been +answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at +0 and is incremented for each group widget), and the ID of the +group widget, then returns a react component that will be added +immediately above the renderer in the group widget. If the +function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead +of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead +of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; +}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same +interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM +DOM elements. For example, when provided, will be used +in place of . This allows clients to provide pre-styled +components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component +to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +} & Partial & + Partial`,elements:[{name:"signature",type:"object",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + status: "correct" | "incorrect" | "invalid"; +}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + visible: number; +}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It +also includes any extra parameters that the originating widget provided. +This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is +being used. For mobile web this will be the ProvidedKeypad +component. In this situation we use the MathInput component +from the math-input repo instead of the existing perseus math +input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance +of \`math-input\`'s keypad to the body. This is used by the native +apps so they can have the keypad be defined on the native side. +It is called with an function that, when called, blurs the input, +and is expected to return an object of the shape +keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the +drawing area (scratchpad) should be allowed/disallowed. + +Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the +page. For example, if this is enabled, the most recently used +radio widget will attempt to keep the "selected" answer in view +after entering review mode. + +Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio +widgets. This allows users to note which answers they believe to +be incorrect, to find the answer by process of elimination. + +We plan to roll this out to all call sites eventually, but for +now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content +in a editor is delayed before propagated to a prop. For example, +when text is typed in the text area of an Editor component, +there will be a delay equal to the value of \`editorChangeDelay\` +before the change is propagated. This is added for better +responsiveness of the editor when used in certain contexts such +as StructuredItem exercises where constant re-rendering for each +keystroke caused text typed in the text area to appear in it +only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); +}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false +| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. + +Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +after they have been transformed by the widget's transform function. +This is useful for when we need to know how a widget has shuffled its +the available choices.`}]}}],raw:`Readonly<{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}>`},description:""},onCheckAnswer:{required:!0,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},onNextQuestion:{required:!1,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""}}};const we={ungraded:"ungraded",correct:"correct",incorrect:"incorrect",invalid:"invalid"},Dd=(t,e)=>{switch(t){case"HIDDEN":return e?"ACTIVE":t;case"ACTIVE":return e?t:"INACTIVE";case"INACTIVE":return e?"ACTIVE":t;case"INCORRECT":return e?"ACTIVE":"INACTIVE";default:return t}},qt=class qt extends v.Component{constructor(){super(...arguments),this.state={status:we.ungraded,showHint:!1,message:"",answerBarState:"HIDDEN"},this.change=(...e)=>re.apply(this,e),this._onInteractWithWidget=e=>{if(this.setState({status:we.ungraded,message:""}),this.refs.renderer){this.change("widgets",this.props.widgets);const n=this.refs.renderer.emptyWidgets().length===0,a=this.state.answerBarState;this.setState({answerBarState:Dd(a,n)})}},this._checkAnswer=()=>{this.refs.renderer.showRationalesForCurrentlySelectedChoices();const e=this.refs.renderer.score(),{INVALID_MESSAGE_PREFIX:r,DEFAULT_INVALID_MESSAGE_1:n,DEFAULT_INVALID_MESSAGE_2:a}=this.context.strings,i=e.type==="points"?e.total===e.earned?we.correct:we.incorrect:we.invalid,s=e.type==="points"?e.message||"":e.message?`${r} ${e.message}`:`${r} ${n}${a}`;this.setState({status:i,message:s,answerBarState:i==="correct"?"CORRECT":"INCORRECT"}),this.props.trackInteraction({status:i})},this.getInputPaths=()=>this.refs.renderer.getInputPaths(),this.setInputValue=(e,r,n)=>this.refs.renderer.setInputValue(e,r,n),this.focus=()=>this.refs.renderer.focus(),this.focusInputPath=e=>{this.refs.renderer.focusPath(e)},this.blurInputPath=e=>{this.refs.renderer.blurPath(e)}}shouldComponentUpdate(e,r){return e!==this.props||r!==this.state}render(){const e=g.extend({},ye.defaults,this.props.apiOptions,{onFocusChange:(u,y)=>{y&&this.props.onBlur(y),u&&this.props.onFocus(u)}});let r=null,n=null;this.state.status===we.correct?(n=d(ir,{...Xl,style:{color:"#526f03"}}),r=this.context.strings.correct):this.state.status===we.incorrect&&(n=d(ir,{...Yl,style:{color:"#ff5454"}}),r=this.context.strings.incorrect);const a=this.props.inGradedGroupSet?x.css(fr.gradedGroupInSet):x.css(fr.gradedGroup),i=Re({[a]:e.isMobile,"perseus-graded-group":!0,"answer-correct":e.isMobile?!1:this.state.status===we.correct,"answer-incorrect":e.isMobile?!1:this.state.status===we.incorrect}),{answerBarState:s}=this.state,o=s==="CORRECT",l=e.readOnly||e.isMobile&&o;return f("div",{className:i,children:[!!this.props.title&&d("div",{className:x.css(fr.title),children:this.props.title}),d($,{...this.props,ref:"renderer",apiOptions:{...e,readOnly:l},onInteractWithWidget:this._onInteractWithWidget,linterContext:this.props.linterContext,strings:this.context.strings}),!e.isMobile&&n&&d("div",{className:"group-icon",children:n}),!e.isMobile&&r&&d("div",{className:x.css(_t.srOnly),role:"alert","aria-label":r,children:r}),!e.isMobile&&d("p",{role:"status","aria-live":"polite",children:this.state.message}),!e.isMobile&&d(Ke,{kind:"secondary",disabled:this.props.apiOptions.readOnly,onClick:this._checkAnswer,children:this.context.strings.check}),!e.isMobile&&o&&this.props.onNextQuestion&&d(Ke,{kind:"secondary",disabled:this.props.apiOptions.readOnly,onClick:this.props.onNextQuestion,style:{marginLeft:5},children:this.context.strings.nextQuestion}),this.props.hint&&this.props.hint.content&&(this.state.showHint?f("div",{children:[d("button",{tabIndex:"0",className:x.css(fr.explanationTitle),onClick:()=>this.setState({showHint:!1}),onKeyPress:u=>{u.preventDefault(),this.setState({showHint:!1})},children:this.context.strings.hideExplanation}),d($,{...this.props.hint,ref:"hints-renderer",apiOptions:e,linterContext:this.props.linterContext,strings:this.context.strings})]}):d("button",{tabIndex:"0",onClick:()=>this.setState({showHint:!0}),onKeyPress:u=>{u.preventDefault(),this.setState({showHint:!0})},className:x.css(fr.showHintLink),children:this.context.strings.explain})),e.isMobile&&s!=="HIDDEN"&&d(dt,{apiOptions:e,answerBarState:s,onCheckAnswer:this._checkAnswer,onNextQuestion:this.props.onNextQuestion})]})}};qt.contextType=S,qt.defaultProps={title:"",content:"",widgets:{},images:{},hint:null,hasHint:!1,linterContext:B};let or=qt;const Vd=function(t,e){return g.extend({},t,e(t))},fr=x.StyleSheet.create({gradedGroupInSet:{marginLeft:0,paddingLeft:0},gradedGroup:{borderTop:`1px solid ${nt}`,borderBottom:`1px solid ${nt}`,backgroundColor:ls,marginLeft:$e,marginRight:$e,paddingBottom:Ee,paddingLeft:Ee,paddingRight:Ee,paddingTop:10,width:"auto"},showHintLink:{backgroundColor:"unset",fontSize:14,padding:0,border:"none",marginTop:20,color:N.blue,cursor:"pointer",display:"block",clear:"both"},explanationTitle:{backgroundColor:"unset",marginTop:20,color:N.blue,marginBottom:10,cursor:"pointer",fontSize:14,padding:0,border:"none",display:"block",clear:"both"},title:{fontSize:12,color:Jl,textTransform:"uppercase",marginBottom:11,letterSpacing:.8}}),$d={name:"graded-group",displayName:"Graded group (articles only)",widget:or,traverseChildWidgets:Vd,hidden:!1,tracking:"all",isLintable:!0};or.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"_onInteractWithWidget",docblock:null,modifiers:[],params:[{name:"id",optional:!1,type:null}],returns:null},{name:"_checkAnswer",docblock:null,modifiers:[],params:[],returns:null},{name:"getInputPaths",docblock:null,modifiers:[],params:[],returns:null},{name:"setInputValue",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:null},{name:"newValue",optional:!1,type:null},{name:"cb",optional:!1,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"focusInputPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:null}],returns:null},{name:"blurInputPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:null}],returns:null}],displayName:"GradedGroup",props:{title:{defaultValue:{value:'""',computed:!1},required:!1},content:{defaultValue:{value:'""',computed:!1},required:!1},widgets:{defaultValue:{value:"{}",computed:!1},required:!1},images:{defaultValue:{value:"{}",computed:!1},required:!1},hint:{defaultValue:{value:"null",computed:!1},required:!1},hasHint:{defaultValue:{value:"false",computed:!1},required:!1},linterContext:{defaultValue:{value:"linterContextDefault",computed:!0},required:!1}}};const ka=class ka extends v.Component{constructor(){super(...arguments),this.handleKeyDown=(e,r)=>{(e.key==="Enter"||e.key===" ")&&this.props.onChangeCurrentGroup(r)}}render(){return d("ul",{className:Re(x.css(de.indicatorContainer),"indicatorContainer"),children:this.props.gradedGroups.map(({title:e},r)=>d("li",{className:x.css(de.indicator),children:d(ta,{role:"button","aria-label":this.context.strings.skipToTitle({title:e}),style:de.indicatorButton,onClick:()=>this.props.onChangeCurrentGroup(r),onKeyDown:n=>this.handleKeyDown(n,r),children:({hovered:n,focused:a,pressed:i})=>d(G,{style:[de.indicatorDot,(n||a||i)&&de.indicatorDotFocused],children:r===this.props.currentGroup&&d(G,{style:de.indicatorDotActive,children:d("span",{className:x.css(_t.srOnly),children:this.context.strings.current})})})})},e))})}};ka.contextType=S;let gn=ka;const qa=class qa extends v.Component{constructor(){super(...arguments),this.state={currentGroup:0},this.change=(...e)=>re.apply(this,e),this.getInputPaths=()=>this._childGroup.getInputPaths(),this.setInputValue=(e,r,n)=>this._childGroup.setInputValue(e,r,n),this.focus=()=>this._childGroup.focus(),this.focusInputPath=e=>{this._childGroup.focusInputPath(e)},this.blurInputPath=e=>{this._childGroup.blurInputPath(e)},this.handleNextQuestion=()=>{const{currentGroup:e}=this.state,r=this.props.gradedGroups.length;e1)return d("div",{className:x.css(de.container),children:this.props.gradedGroups.map((i,s)=>d(or,{...this.props,...i,inGradedGroupSet:!1,linterContext:this.props.linterContext},s))});const r=this.props.gradedGroups[this.state.currentGroup];if(!r)return d("span",{children:"No current group..."});const n=this.props.gradedGroups.length,a=this.state.currentGroupthis.setState({currentGroup:i})})]}),d(or,{ref:i=>this._childGroup=i,...this.props,...r,inGradedGroupSet:!0,title:null,onNextQuestion:a,linterContext:this.props.linterContext},this.state.currentGroup)]})}};qa.defaultProps={gradedGroups:[],linterContext:B};let hn=qa;const Hd=function(t,e){return{groups:t.gradedGroups.map(e)}},Gd={name:"graded-group-set",displayName:"Graded group set (articles only)",widget:hn,traverseChildWidgets:Hd,hidden:!1,tracking:"all",isLintable:!0},de=x.StyleSheet.create({top:{display:"flex",flexDirection:"row"},spacer:{flex:1},title:{fontSize:12,color:N.offBlack64,textTransform:"uppercase",marginBottom:11,letterSpacing:.8},indicatorContainer:{display:"flex",flexDirection:"row",listStyle:"none",margin:"unset",paddingInlineStart:"unset",flexWrap:"wrap"},indicator:{width:24,height:24},indicatorButton:{width:"100%",height:"100%",display:"flex",flexWrap:"wrap",placeContent:"center",cursor:"pointer",":focus":{outline:"none"}},indicatorDot:{boxSizing:"content-box",width:10,height:10,borderRadius:"100%",borderWidth:2,borderColor:N.blue,borderStyle:"solid"},indicatorDotFocused:{borderWidth:5,borderStyle:"double"},indicatorDotActive:{backgroundColor:N.blue,width:"100%",height:"100%"},container:{borderTop:`1px solid ${nt}`,borderBottom:`1px solid ${nt}`,backgroundColor:ls,marginLeft:$e,marginRight:$e,paddingBottom:Ee,paddingLeft:Ee,paddingRight:Ee,paddingTop:10,width:"auto"}}),Bd=K.Plot,Cs={url:null};function di(t){let e=t[0],r=t[1],n=t[2];const a=t[3];e<0&&(e*=-1,r*=-1,n*=-1);const i=2*Math.PI;for(r<0&&(r*=-1,n*=-1,n+=i/2);n>0;)n-=i;for(;n<0;)n+=i;return[e,r,n,a]}function yi(t){let e=t[0],r=t[1],n=t[2];const a=t[3];e<0&&(e*=-1,r*=-1,n*=-1);const i=Math.PI;for(r<0&&(r*=-1,n*=-1,n+=i/2);n>0;)n-=i;for(;n<0;)n+=i;return[e,r,n,a]}const Ye={areEqual:function(t,e){return z.deepEq(t,e)},Movable:Bd,getPropsForCoeffs:function(t){return{fn:g.partial(this.getFunctionForCoeffs,t)}}},Kd=g.extend({},Ye,{url:"https://ka-perseus-graphie.s3.amazonaws.com/67aaf581e6d9ef9038c10558a1f70ac21c11c9f8.png",defaultCoords:[[.25,.75],[.75,.75]],getCoefficients:function(t){const e=t[0],r=t[1],n=r[0]-e[0],a=r[1]-e[1];if(n===0)return;const i=a/n,s=r[1]-i*r[0];return[i,s]},getFunctionForCoeffs:function(t,e){const r=t[0],n=t[1];return r*e+n},getEquationString:function(t){const e=this.getCoefficients(t),r=e[0],n=e[1];return"y = "+r.toFixed(3)+"x + "+n.toFixed(3)}}),Xd=g.extend({},Ye,{url:"https://ka-perseus-graphie.s3.amazonaws.com/e23d36e6fc29ee37174e92c9daba2a66677128ab.png",defaultCoords:[[.5,.5],[.75,.75]],Movable:K.Parabola,getCoefficients:function(t){const e=t[0],r=t[1],n=e[0],a=e[1],i=(r[1]-a)/((r[0]-n)*(r[0]-n)),s=-2*n*i,o=i*n*n+a;return[i,s,o]},getFunctionForCoeffs:function(t,e){const r=t[0],n=t[1],a=t[2];return(r*e+n)*e+a},getPropsForCoeffs:function(t){return{a:t[0],b:t[1],c:t[2]}},getEquationString:function(t){const e=this.getCoefficients(t),r=e[0],n=e[1],a=e[2];return"y = "+r.toFixed(3)+"x^2 + "+n.toFixed(3)+"x + "+a.toFixed(3)}}),Yd=g.extend({},Ye,{url:"https://ka-perseus-graphie.s3.amazonaws.com/3d68e7718498475f53b206c2ab285626baf8857e.png",defaultCoords:[[.5,.5],[.6,.6]],Movable:K.Sinusoid,getCoefficients:function(t){const e=t[0],r=t[1],n=r[1]-e[1],a=Math.PI/(2*(r[0]-e[0])),i=e[0]*a,s=e[1];return[n,a,i,s]},getFunctionForCoeffs:function(t,e){const r=t[0],n=t[1],a=t[2],i=t[3];return r*Math.sin(n*e-a)+i},getPropsForCoeffs:function(t){return{a:t[0],b:t[1],c:t[2],d:t[3]}},getEquationString:function(t){const e=this.getCoefficients(t),r=e[0],n=e[1],a=e[2],i=e[3];return"y = "+r.toFixed(3)+" sin("+n.toFixed(3)+"x - "+a.toFixed(3)+") + "+i.toFixed(3)},areEqual:function(t,e){return z.deepEq(di(t),di(e))}}),Qd=g.extend({},Ye,{url:"https://ka-perseus-graphie.s3.amazonaws.com/7db80d23c35214f98659fe1cf0765811c1bbfbba.png",defaultCoords:[[.5,.5],[.75,.75]],getCoefficients:function(t){const e=t[0],r=t[1],n=r[1]-e[1],a=Math.PI/(4*(r[0]-e[0])),i=e[0]*a,s=e[1];return[n,a,i,s]},getFunctionForCoeffs:function(t,e){const r=t[0],n=t[1],a=t[2],i=t[3];return r*Math.tan(n*e-a)+i},getEquationString:function(t){const e=this.getCoefficients(t),r=e[0],n=e[1],a=e[2],i=e[3];return"y = "+r.toFixed(3)+" sin("+n.toFixed(3)+"x - "+a.toFixed(3)+") + "+i.toFixed(3)},areEqual:function(t,e){return z.deepEq(yi(t),yi(e))}}),Is=g.extend({},Ye,{url:"https://ka-perseus-graphie.s3.amazonaws.com/9cbfad55525e3ce755a31a631b074670a5dad611.png",defaultCoords:[[.5,.55],[.75,.75]],defaultAsymptote:[[0,.5],[1,.5]],extraCoordConstraint:function(t,e,r,n,a){const i=g.head(n)[1];return g.all(r,s=>s[1]!==i)},extraAsymptoteConstraint:function(t,e,r,n,a){const i=t[1];if(g.all(r,y=>y[1]>i)||g.all(r,y=>y[1]y[1]>o)){const y=g.min(g.map(r,m=>m[1]));return[e[0],y-a.snapStep[1]]}const u=g.max(g.map(r,y=>y[1]));return[e[0],u+a.snapStep[1]]},allowReflectOverAsymptote:!0,getCoefficients:function(t,e){const r=t[0],n=t[1],a=g.head(e)[1],i=Math.log((r[1]-a)/(n[1]-a))/(r[0]-n[0]);return[(r[1]-a)/Math.exp(i*r[0]),i,a]},getFunctionForCoeffs:function(t,e){const r=t[0],n=t[1],a=t[2];return r*Math.exp(n*e)+a},getEquationString:function(t,e){if(!e)return null;const r=this.getCoefficients(t,e),n=r[0],a=r[1],i=r[2];return"y = "+n.toFixed(3)+"e^("+a.toFixed(3)+"x) + "+i.toFixed(3)}}),Jd=g.extend({},Ye,{url:"https://ka-perseus-graphie.s3.amazonaws.com/f6491e99d34af34d924bfe0231728ad912068dc3.png",defaultCoords:[[.55,.5],[.75,.75]],defaultAsymptote:[[.5,0],[.5,1]],extraCoordConstraint:function(t,e,r,n,a){const i=g.head(n)[0];return g.all(r,s=>s[0]!==i)&&r[0][1]!==r[1][1]},extraAsymptoteConstraint:function(t,e,r,n,a){const i=t[0];if(g.all(r,y=>y[0]>i)||g.all(r,y=>y[0]y[0]>o)?[g.min(g.map(r,m=>m[0]))-a.snapStep[0],e[1]]:[g.max(g.map(r,y=>y[0]))+a.snapStep[0],e[1]]},allowReflectOverAsymptote:!0,getCoefficients:function(t,e){const r=o=>[o[1],o[0]],n=Is.getCoefficients(g.map(t,r),g.map(e,r)),a=-n[2]/n[0],i=1/n[0];return[1/n[1],i,a]},getFunctionForCoeffs:function(t,e,r){const n=t[0],a=t[1],i=t[2];return n*Math.log(a*e+i)},getEquationString:function(t,e){if(!e)return null;const r=this.getCoefficients(t,e),n=r[0],a=r[1],i=r[2];return"y = ln("+n.toFixed(3)+"x + "+a.toFixed(3)+") + "+i.toFixed(3)}}),Zd=g.extend({},Ye,{url:"https://ka-perseus-graphie.s3.amazonaws.com/8256a630175a0cb1d11de223d6de0266daf98721.png",defaultCoords:[[.5,.5],[.75,.75]],getCoefficients:function(t){const e=t[0],r=t[1],n=r[0]-e[0],a=r[1]-e[1];if(n===0)return;let i=Math.abs(a/n);r[1]{const e=t.plot;return e.type&&e.coords&&br(e.type).getEquationString(e.coords,e.asymptote)||""},Es=(t,e,r,n)=>{const a=function(i,s){return Math.floor((i[1]-i[0])/s)};return t.map(i=>{const s=i.map((o,l)=>{const u=e[l],y=r[l],m=a(u,y),h=Math.round(o*m);return u[0]+y*h});return zl(s,n)})},oa=(t,e,r,n)=>t&&Es(t,e,r,n),Mt=(t,e)=>{const r=br(t),n=[1,1],a=z.snapStepFromGridStep(n);return{type:t,asymptote:oa(r.defaultAsymptote,e.range,e.step,a),coords:null}},zs=g.first,pn=(t,e)=>{const r=t.gridStep||z.getGridStep(t.range,t.step,e),n=t.snapStep||z.snapStepFromGridStep(r);return{gridStep:r,snapStep:n}},Ls={labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],backgroundImage:Cs,markings:"graph",rulerLabel:"",rulerTicks:10,valid:!0,showTooltips:!1},mi=Mt("linear",Ls),_s={graph:Ls,plot:mi,availableTypes:[mi.type]},Ps=t=>{const e=t.charAt(0).toUpperCase()+t.substring(1),r=fe().staticUrl;return{value:t,title:e,content:d("img",{src:r(br(t).url),alt:e})}},gc=Object.freeze(Object.defineProperty({__proto__:null,DEFAULT_BACKGROUND_IMAGE:Cs,DEFAULT_GRAPHER_PROPS:_s,allTypes:ey,chooseType:zs,defaultPlotProps:Mt,functionForType:br,getEquationString:ry,getGridAndSnapSteps:pn,maybePointsFromNormalized:oa,pointsFromNormalized:Es,typeToButton:Ps},Symbol.toStringTag,{value:"Module"}));function gi(t,e){if(t.type!==e.correct.type)return{type:"points",earned:0,total:1,message:null};if(t.coords==null)return{type:"invalid",message:null};const r=br(t.type),n=r.getCoefficients(t.coords,t.asymptote),a=r.getCoefficients(e.correct.coords,e.correct.asymptote);return n==null||a==null?{type:"invalid",message:null}:r.areEqual(n,a)?{type:"points",earned:1,total:1,message:null}:{type:"points",earned:0,total:1,message:null}}const hi=K.MovablePoint,ty=K.MovableLine;function ny(t,e,r){const n=(a,i,s)=>(i[0]-a[0])*(s[1]-a[1])-(s[0]-a[0])*(i[1]-a[1]);return n(r[0],r[1],e)>0!=n(r[0],r[1],t)>0}const ay={padding:"5px 5px"},Ta=class Ta extends v.Component{constructor(){super(...arguments),this._coords=()=>{const e=this.props,r=e.graph,n=e.model&&oa(e.model.defaultCoords,r.range,r.step,r.snapStep);return e.coords||n||null},this._asymptote=()=>this.props.asymptote,this.change=(...e)=>re.apply(this,e),this.renderPlot=()=>{const e=this.props.model,r=this.props.graph.range[0],n={stroke:this.props.isMobile?j.BLUE_C:j.DYNAMIC,...this.props.isMobile?{"stroke-width":3}:{}},a=e.getCoefficients(this._coords(),this._asymptote());if(!a)return;const i=e.getPropsForCoeffs(a,r);return v.createElement(e.Movable,{...i,key:this.props.model.url,range:r,style:n})},this.renderAsymptote=()=>{const e=this.props.model,r=this.props.graph,n=this._asymptote(),a={strokeDasharray:"- "};return n&&d(ty,{onMove:(i,s)=>{const o=La(i,s),l=g.map(this._asymptote(),u=>Wr(u,o));this.props.onChange({asymptote:l})},constraints:[I.MovableLine.constraints.bound(),I.MovableLine.constraints.snap(),(i,s)=>{const o=La(i,s),l=g.map(this._asymptote(),u=>Wr(u,o));return e.extraAsymptoteConstraint?e.extraAsymptoteConstraint(i,s,this._coords(),l,r):!0}],normalStyle:a,highlightStyle:a,children:g.map(n,(i,s)=>d(hi,{coord:i,static:!0,draw:null,extendLine:!0,showHairlines:this.props.showHairlines,hideHairlines:this.props.hideHairlines,showTooltips:this.props.showTooltips,isMobile:this.props.isMobile},`asymptoteCoord-${s}`))})}}render(){const e=(s,o)=>d(hi,{coord:s,static:this.props.static,constraints:[I.MovablePoint.constraints.bound(),I.MovablePoint.constraints.snap(),l=>{const u=g.all(this._coords(),(y,m)=>o===m||!y||!Xn(l[0],y[0]));if(!u)return!1;if(this.props.model&&this.props.model.extraCoordConstraint){const y=this.props.model.extraCoordConstraint,m=g.clone(this._coords()),h=g.clone(m[o]);return m[o]=l,y(l,h,m,this._asymptote(),this.props.graph)}return u}],onMove:(l,u)=>{let y;const m=this._asymptote();m&&this.props.model.allowReflectOverAsymptote&&ny(l,u,m)?y=g.map(this._coords(),h=>Ll(h,m)):y=g.clone(this._coords()),y[o]=l,this.props.onChange({coords:y})},showHairlines:this.props.showHairlines,hideHairlines:this.props.hideHairlines,showTooltips:this.props.showTooltips,isMobile:this.props.isMobile},o),r=g.map(this._coords(),e),n=this.props.graph.box,a=this.props.graph.backgroundImage;let i=null;if(a.url){const s=n[0]/us.defaultBoxSize;i=d(_r,{src:a.url,width:a.width,height:a.height,scale:s})}return d("div",{className:"perseus-widget perseus-widget-grapher",style:{width:n[0],height:n[1],boxSizing:"initial"},children:f("div",{className:"graphie-container above-scratchpad",style:{width:n[0],height:n[1]},children:[i,f(K,{...this.props.graph,setDrawingAreaAvailable:this.props.setDrawingAreaAvailable,children:[this.props.model&&this.renderPlot(),this.props.model&&this.renderAsymptote(),this.props.model&&r]})]})})}};Ta.defaultProps={graph:{range:[[-10,10],[-10,10]],step:[1,1]},coords:null,asymptote:null,isMobile:!1};let cn=Ta;const Tt=class Tt extends v.Component{constructor(){super(...arguments),this.handlePlotChanges=e=>{const r=g.extend({},this.props.plot,e);this.props.onChange({plot:r}),this.props.trackInteraction()},this.handleActiveTypeChange=e=>{const r=this.props.graph,n=g.extend({},this.props.plot,Mt(e,r));this.props.onChange({plot:n})},this._setupGraphie=(e,r)=>{const n=this.props.apiOptions.isMobile;if(r.markings==="graph"?(e.graphInit({range:r.range,scale:g.pluck(r.gridConfig,"scale"),axisArrows:"<->",labelFormat:function(a){return"\\small{"+a+"}"},gridStep:r.gridStep,snapStep:r.snapStep,tickStep:n?this._calculateMobileTickStep(r.gridStep,r.step,r.range):g.pluck(r.gridConfig,"tickStep"),labelStep:1,unityLabels:g.pluck(r.gridConfig,"unityLabel"),isMobile:n}),e.label([0,r.range[1][1]],r.labels[1],n?"below right":"above"),e.label([r.range[0][1],0],r.labels[0],n?"above left":"right")):r.markings==="grid"?e.graphInit({range:r.range,scale:g.pluck(r.gridConfig,"scale"),gridStep:r.gridStep,axes:!1,ticks:!1,labels:!1,isMobile:n}):r.markings==="none"&&e.init({range:r.range,scale:g.pluck(r.gridConfig,"scale")}),this.props.apiOptions.isMobile){const a={normalStyle:{strokeWidth:1}};this.horizHairline=new Cr(e,[0,0],[0,0],a),this.horizHairline.attr({stroke:j.INTERACTIVE}),this.horizHairline.hide(),this.vertHairline=new Cr(e,[0,0],[0,0],a),this.vertHairline.attr({stroke:j.INTERACTIVE}),this.vertHairline.hide()}},this.showHairlines=e=>{this.props.apiOptions.isMobile&&this.props.markings!=="none"&&(this.horizHairline.moveTo([this.props.graph.range[0][0],e[1]],[this.props.graph.range[0][1],e[1]]),this.horizHairline.show(),this.vertHairline.moveTo([e[0],this.props.graph.range[1][0]],[e[0],this.props.graph.range[1][1]]),this.vertHairline.show())},this.hideHairlines=()=>{this.props.apiOptions.isMobile&&(this.horizHairline.hide(),this.vertHairline.hide())}}static validate(e,r){return gi(e,r)}static getUserInputFromProps(e){return e.plot}_getGridConfig(e){return e.step.map((r,n)=>z.gridDimensionConfig(r,e.range[n],e.box[n],e.gridStep[n]))}_calculateMobileTickStep(e,r,n){const a=z.constrainedTickStepsFromTickSteps(r,n);return a[0]=a[0]/e[0],a[1]=a[1]/e[1],a}simpleValidate(e){return gi(this.getUserInput(),e)}getUserInput(){return Tt.getUserInputFromProps(this.props)}render(){const e=this.props.plot.type,r=this.props.plot.coords,n=this.props.plot.asymptote,a=d("div",{style:ay,className:"above-scratchpad",children:d(gu,{value:e,allowEmpty:!0,buttons:g.map(this.props.availableTypes,Ps),onChange:this.handleActiveTypeChange})}),i=Yn(this.props.containerSizeClass),s={...this.props.graph,...pn(this.props.graph,i[0]),gridConfig:this._getGridConfig({...this.props.graph,box:i,...pn(this.props.graph,i[0])})},o={graph:{box:i,range:s.range,step:s.step,snapStep:s.snapStep,backgroundImage:s.backgroundImage,options:s,setup:this._setupGraphie},onChange:this.handlePlotChanges,model:e&&br(e),coords:r,asymptote:n,static:this.props.static,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable,isMobile:this.props.apiOptions.isMobile,showTooltips:this.props.graph.showTooltips,showHairlines:this.showHairlines,hideHairlines:this.hideHairlines};return f("div",{children:[d(cn,{...o}),this.props.availableTypes.length>1&&a]})}};Tt.defaultProps=_s;let bn=Tt;const Fs=t=>{const e={availableTypes:t.availableTypes,graph:t.graph};if(e.availableTypes.length===1){const r=e.graph,n=zs(e.availableTypes);e.plot=Mt(n,r)}return e},iy=t=>({...Fs(t),availableTypes:[t.correct.type],plot:t.correct}),sy={name:"grapher",displayName:"Grapher",hidden:!0,widget:bn,transform:Fs,staticTransform:iy},At=class At extends v.Component{constructor(){super(...arguments),this.change=(...e)=>re.apply(this,e),this.getSerializedState=()=>{var e;return(e=this.rendererRef)==null?void 0:e.getSerializedState()},this.restoreSerializedState=(e,r)=>{var n;return(n=this.rendererRef)==null||n.restoreSerializedState(e,r),null},this.setInputValue=(e,r,n)=>{var a;return(a=this.rendererRef)==null?void 0:a.setInputValue(e,r,n)},this.focusInputPath=e=>{var r;(r=this.rendererRef)==null||r.focusPath(e)},this.blurInputPath=e=>{var r;(r=this.rendererRef)==null||r.blurPath(e)},this.showRationalesForCurrentlySelectedChoices=()=>{var e;(e=this.rendererRef)==null||e.showRationalesForCurrentlySelectedChoices()}}componentDidMount(){this.forceUpdate()}getUserInput(){var e;return(e=this.rendererRef)==null?void 0:e.getUserInput()}simpleValidate(){var e;return((e=this.rendererRef)==null?void 0:e.score())??{type:"invalid"}}getInputPaths(){var e;return((e=this.rendererRef)==null?void 0:e.getInputPaths())??[]}focus(){var e;return((e=this.rendererRef)==null?void 0:e.focus())??!1}render(){var u;const e={...ye.defaults,...this.props.apiOptions,onFocusChange:(y,m)=>{m&&this.props.onBlur(m),y&&this.props.onFocus(y)}},n=this.props.findWidgets("group").indexOf(this),a=this.props.apiOptions.groupAnnotator(n,this.props.widgetId),i=y=>{this.rendererRef&&this.change("widgets",this.rendererRef.props.widgets)},s=(u=this.rendererRef)==null?void 0:u.score(),o=s&&s.type!=="invalid",l=s&&s.type==="invalid";return f("div",{className:Re({"perseus-group":!0,"perseus-group-valid-answer":o,"perseus-group-invalid-answer":l}),children:[a,d($,{content:this.props.content,widgets:this.props.widgets,images:this.props.images,ref:y=>this.rendererRef=y,apiOptions:e,findExternalWidgets:this.props.findWidgets,reviewMode:!!this.props.reviewModeRubric,onInteractWithWidget:i,linterContext:this.props.linterContext,strings:this.context.strings}),this.props.icon&&d("div",{className:"group-icon",children:this.props.icon})]})}};At.contextType=S,At.defaultProps={content:"",widgets:{},images:{},linterContext:B};let vn=At;const oy=function(t,e){return{...t,...e(t)}},ly={name:"group",displayName:"Group (SAT only)",widget:vn,traverseChildWidgets:oy,hidden:!0,isLintable:!0};function pi(t){return t.status==="correct"?{type:"points",earned:1,total:1,message:t.message||null}:t.status==="incorrect"?{type:"points",earned:0,total:1,message:t.message||null}:{type:"invalid",message:"Keep going, you're not there yet!"}}const{updateQueryString:Ur}=z,Aa=class Aa extends v.Component{constructor(){super(...arguments),this.handleMessageEvent=e=>{let r={};try{r=JSON.parse(e.originalEvent.data)}catch{return}if(g.isUndefined(r.testsPassed))return;const n=r.testsPassed?"correct":"incorrect";this.change({status:n,message:r.message})},this.change=(...e)=>re.apply(this,e)}static validate(e){return pi(e)}componentDidMount(){_(window).on("message",this.handleMessageEvent)}componentWillUnmount(){_(window).off("message",this.handleMessageEvent)}getUserInput(){return{status:this.props.status,message:this.props.message}}simpleValidate(){return pi(this.getUserInput())}render(){const e={width:String(this.props.width),height:String(this.props.height)},{InitialRequestUrl:r}=fe();Object.entries(e).forEach(([i,s])=>{!s.endsWith("%")&&!s.endsWith("px")&&(e[i]=s+"px")});let n=this.props.url;if(n&&n.length&&n.indexOf("http")!==0&&(n="https://www.khanacademy.org/computer-programming/program/"+n+"/embedded?buttons=no&embed=yes&editor=no&author=no",n=Ur(n,"width",this.props.width),n=Ur(n,"height",this.props.height),n=Ur(n,"origin",r.origin)),this.props.settings){const i={};g.each(this.props.settings,function(s){s.name&&s.value&&(i[s.name]=s.value)}),n=Ur(n,"settings",JSON.stringify(i))}let a="allow-same-origin allow-scripts";return a+=" allow-top-navigation",d("iframe",{sandbox:a,style:e,src:n,allowFullScreen:this.props.allowFullScreen})}};Aa.defaultProps={status:"incomplete",message:null,allowFullScreen:!1,allowTopNavigation:!1};let fn=Aa;const uy={name:"iframe",displayName:"Iframe (deprecated)",widget:fn,hidden:!0},ci=400,bi=[0,10],dy={url:null,width:0,height:0},yy=["block","full-width"],Ss="block",Rt=class Rt extends v.Component{constructor(){super(...arguments),this.change=(...e)=>re.apply(this,e)}static validate(){return H()}getUserInput(){return null}simpleValidate(){return H()}render(){let e;const r=this.props.caption===this.props.alt?"":this.props.alt,{apiOptions:n}=this.props,a=this.props.backgroundImage;if(a.url){const o=a.url;e=d(na.Consumer,{children:({setAssetStatus:l})=>d(_r,{src:o,alt:r,width:a.width,height:a.height,preloader:n.imagePreloader,extraGraphie:{box:this.props.box,range:this.props.range,labels:this.props.labels},trackInteraction:this.props.trackInteraction,zoomToFullSizeOnMobile:n.isMobile,constrainHeight:n.isMobile,allowFullBleed:n.isMobile,setAssetStatus:l})})}if(n.isMobile){let o;if(this.props.title||this.props.caption){let l=this.props.title;l&&(this.props.caption&&!/[.?!"']\s*$/.test(l)&&(l+="."),l=`**${l}** `);const u=Re({"perseus-image-caption":!0,"has-title":!!l}),y=this.props.alignment,h=y==="block"||y==="full-width"?null:"0 !important";o=d("figcaption",{className:u,style:{maxWidth:a.width},children:d("div",{style:{minWidth:h},children:d($,{content:l+this.props.caption,apiOptions:n,linterContext:this.props.linterContext,strings:this.context.strings})})})}return f("figure",{className:"perseus-image-widget",style:{maxWidth:a.width},children:[e,o]})}let i,s;return this.props.title&&(i=d("div",{className:"perseus-image-title",children:d($,{content:this.props.title,apiOptions:n,linterContext:this.props.linterContext,strings:this.context.strings})})),this.props.caption&&(s=d("figcaption",{className:"perseus-image-caption",style:{maxWidth:a.width},children:d($,{content:this.props.caption,apiOptions:n,linterContext:this.props.linterContext,strings:this.context.strings})})),f("figure",{className:"perseus-image-widget",style:{maxWidth:a.width},children:[i,e,s]})}};Rt.contextType=S,Rt.defaultProps={alignment:Ss,title:"",range:[bi,bi],box:[ci,ci],backgroundImage:dy,labels:[],alt:"",caption:"",linterContext:B};let wn=Rt;const my={name:"image",accessible:t=>{const e=t.backgroundImage;return!(e&&e.url&&!t.alt)},defaultAlignment:Ss,supportedAlignments:yy,displayName:"Image",widget:wn,isLintable:!0},Gt=K.Label,gy=K.Line,wr=K.MovablePoint,hy=K.MovableLine,py=K.Plot,cy=K.PlotParametric,by=K.Point,vy=K.Rect,{unescapeMathMode:fy}=z,Ms=(t,e)=>{e=e||{};let r=t+"||"+e.decimal_separator+"||";const n=e.functions,a=n?n.length:0;for(let i=0;i{const r=Ms(t,e);let n=vi[r];return n||(n=pr(t,e),vi[r]=n,n)},fi=Object.create(null),wi=(t,e)=>{const r=Ms(t,e);let n=fi[r];if(n)return n;const a=pr(t,e).expr;return n=a?a.compile():function(){return 0},fi[r]=n,n},Ra=class Ra extends v.Component{constructor(){super(...arguments),this.state={variables:ki(this.props.elements),functions:qi(this.props.elements)},this._setupGraphie=(e,r)=>{e.graphInit(g.extend({},r,{grid:g.contains(["graph","grid"],this.props.graph.markings),axes:g.contains(["graph"],this.props.graph.markings),ticks:g.contains(["graph"],this.props.graph.markings),labels:g.contains(["graph"],this.props.graph.markings),labelFormat:function(n){return"\\small{"+n+"}"},axisArrows:"<->",unityLabels:!1}))},this._updatePointLocation=(e,r)=>{const n=g.clone(this.state.variables);n["x_"+e]=r[0],n["y_"+e]=r[1],this.setState({variables:n}),this.props.trackInteraction()},this._updateLineLocation=(e,r)=>{const n=this._eval("("+e.endX+")-("+e.startX+")"),a=this._eval("("+e.endY+")-("+e.startY+")"),i=Wr(r,[n,a]),s=g.clone(this.state.variables);s["x_"+e.startSubscript]=r[0],s["y_"+e.startSubscript]=r[1],s["x_"+e.endSubscript]=i[0],s["y_"+e.endSubscript]=i[1],this.setState({variables:s}),this.props.trackInteraction()},this._eval=(e,r)=>{const n=wi(e,{functions:this.state.functions}),a=g.extend({},this.state.variables,r);return g.each(g.keys(a),i=>{if(g.isString(a[i])){const s=wi(a[i],{functions:this.state.functions});a[i]=function(o){return s(g.extend({},a,{x:o}))}}}),n(a)||0},this._extractVars=e=>{if(e==null)return[];let r=[];return g.each(e.args(),function(n){n&&n.constructor.name==="Expr"&&(r=r.concat(this._extractVars(n)))},this),e.name()==="Var"&&r.push(e.prettyPrint()),r},this.change=(...e)=>re.apply(this,e)}static validate(){return H()}UNSAFE_componentWillReceiveProps(e){g.isEqual(this.props.elements,e.elements)||this.setState({variables:ki(e.elements),functions:qi(e.elements)})}getUserInput(){return{}}simpleValidate(){return H()}render(){const e=this.props.graph.range;let r=this.props.graph.labels;return this.props.graph.markings==="graph"&&(r=this.props.graph.labels.map(n=>n.startsWith("$")&&n.endsWith("$")?n.slice(1,-1):n)),f(K,{box:this.props.graph.box,range:this.props.graph.range,options:this.props.graph,setup:this._setupGraphie,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable,children:[this.props.graph.markings==="graph"&&d(Gt,{coord:[0,e[1][1]],text:r[1],direction:"above"}),this.props.graph.markings==="graph"&&d(Gt,{coord:[e[0][1],0],text:r[0],direction:"right"}),g.map(this.props.elements,function(n,a){if(n.type==="point")return d(by,{coord:[this._eval(n.options.coordX),this._eval(n.options.coordY)],color:n.options.color},n.key);if(n.type==="line"){const i=[this._eval(n.options.startX),this._eval(n.options.startY)],s=[this._eval(n.options.endX),this._eval(n.options.endY)];return d(gy,{start:i,end:s,style:{stroke:n.options.color,strokeWidth:n.options.strokeWidth,strokeDasharray:n.options.strokeDasharray,arrows:n.options.arrows}},n.key)}if(n.type==="movable-point"){const i=[s=>{const o=Math.max(this._eval(n.options.constraintXMin),Math.min(this._eval(n.options.constraintXMax),s[0])),l=Math.max(this._eval(n.options.constraintYMin),Math.min(this._eval(n.options.constraintYMax),s[1]));return[o,l]}];return n.options.constraint==="snap"?i.push(wr.constraints.snap(n.options.snap)):n.options.constraint==="x"?i.push(s=>[this._eval(n.options.constraintFn,{y:s[1]}),s[1]]):n.options.constraint==="y"&&i.push(s=>[s[0],this._eval(n.options.constraintFn,{x:s[0]})]),d(wr,{coord:[this.state.variables["x_"+n.options.varSubscript],this.state.variables["y_"+n.options.varSubscript]],constraints:i,foo_x:n.options.constraint,foo_y:n.options.constraintFn,foo_z:n.options.snap,onMove:g.partial(this._updatePointLocation,n.options.varSubscript)},n.key)}if(n.type==="movable-line"){const i=[l=>{const u=Math.max(this._eval(n.options.constraintXMin),Math.min(this._eval(n.options.constraintXMax),l[0])),y=Math.max(this._eval(n.options.constraintYMin),Math.min(this._eval(n.options.constraintYMax),l[1]));return[u,y]}];n.options.constraint==="snap"?i.push(wr.constraints.snap(n.options.snap)):n.options.constraint==="x"?i.push(l=>[this._eval(n.options.constraintFn,{y:l[1]}),l[1]]):n.options.constraint==="y"&&i.push(l=>[l[0],this._eval(n.options.constraintFn,{x:l[0]})]);const s=[this.state.variables["x_"+n.options.startSubscript],this.state.variables["y_"+n.options.startSubscript]],o=[this.state.variables["x_"+n.options.endSubscript],this.state.variables["y_"+n.options.endSubscript]];return f(hy,{constraints:i,onMove:g.bind(this._updateLineLocation,this,n.options),foo_x:n.options.constraint,foo_y:n.options.constraintFn,foo_z:n.options.snap,children:[d(wr,{coord:s,static:!0,normalStyle:{stroke:"none",fill:"none"}}),d(wr,{coord:o,static:!0,normalStyle:{stroke:"none",fill:"none"}})]},n.key)}if(n.type==="function"){const i=u=>this._eval(n.options.value,{x:u}),s=g.without(this._extractVars(ke(n.options.value).expr),"x"),o=g.object(s,g.map(s,u=>this.state.variables[u])),l=[this._eval(n.options.rangeMin,this.state.variables),this._eval(n.options.rangeMax,this.state.variables)];return d(py,{fn:i,foo_fn:n.options.value,foo_varvalues:o,range:l,style:{stroke:n.options.color,strokeWidth:n.options.strokeWidth,strokeDasharray:n.options.strokeDasharray,plotPoints:100}},n.key)}if(n.type==="parametric"){const i=u=>[this._eval(n.options.x,{t:u}),this._eval(n.options.y,{t:u})],s=g.without(this._extractVars(ke(n.options.x).expr).concat(this._extractVars(ke(n.options.y).expr)),"t"),o=g.object(s,g.map(s,u=>this.state.variables[u])),l=[this._eval(n.options.rangeMin,this.state.variables),this._eval(n.options.rangeMax,this.state.variables)];return d(cy,{fn:i,foo_fnx:n.options.x,foo_fny:n.options.y,foo_varvalues:o,range:l,style:{stroke:n.options.color,strokeWidth:n.options.strokeWidth,strokeDasharray:n.options.strokeDasharray,plotPoints:100}},n.key)}if(n.type==="label"){const i=[this._eval(n.options.coordX),this._eval(n.options.coordY)];return d(Gt,{coord:i,text:fy(n.options.label),style:{color:n.options.color}},a+1)}if(n.type==="rectangle")return d(vy,{x:this._eval(n.options.coordX),y:this._eval(n.options.coordY),width:g.max([this._eval(n.options.width),0]),height:g.max([this._eval(n.options.height),0]),style:{stroke:"none",fill:n.options.color}},a+1)},this)]})}};Ra.defaultProps={graph:{box:[400,400],labels:["x","y"],range:[[-10,10],[-10,10]],tickStep:[1,1],gridStep:[1,1],markings:"graph"},elements:[]};let kn=Ra;const ki=t=>{const e={};return g.each(g.where(t,{type:"movable-point"}),r=>{const n=r.options.varSubscript,a=ke(r.options.startX||"0").expr,i=ke(r.options.startY||"0").expr;let s=0,o=0;a&&(s=a.eval({})||0),i&&(o=i.eval({})||0),e["x_"+n]=s,e["y_"+n]=o}),g.each(g.where(t,{type:"movable-line"}),r=>{const n=r.options.startSubscript,a=r.options.endSubscript,i=ke(r.options.startX||"0").expr,s=ke(r.options.startY||"0").expr,o=ke(r.options.endX||"0").expr,l=ke(r.options.endY||"0").expr;let u=0,y=0,m=0,h=0;i&&(u=i.eval({})||0),s&&(y=s.eval({})||0),o&&(m=o.eval({})||0),l&&(h=l.eval({})||0),e["x_"+n]=u,e["y_"+n]=y,e["x_"+a]=m,e["y_"+a]=h}),g.each(g.where(t,{type:"function"}),r=>{e[r.options.funcName]=r.options.value}),e},qi=t=>g.map(g.where(t,{type:"function"}),e=>e.options.funcName),wy={name:"interaction",displayName:"Interaction",widget:kn,transform:g.identity,hidden:!0};var ky="Expected a function",Ti=NaN,qy="[object Symbol]",Ty=/^\s+|\s+$/g,Ay=/^[-+]0x[0-9a-f]+$/i,Ry=/^0b[01]+$/i,Oy=/^0o[0-7]+$/i,xy=parseInt,jy=typeof Sr=="object"&&Sr&&Sr.Object===Object&&Sr,Wy=typeof self=="object"&&self&&self.Object===Object&&self,Cy=jy||Wy||Function("return this")(),Iy=Object.prototype,Ny=Iy.toString,Ey=Math.max,zy=Math.min,Bt=function(){return Cy.Date.now()};function Ly(t,e,r){var n,a,i,s,o,l,u=0,y=!1,m=!1,h=!0;if(typeof t!="function")throw new TypeError(ky);e=Ai(e)||0,qn(r)&&(y=!!r.leading,m="maxWait"in r,i=m?Ey(Ai(r.maxWait)||0,e):i,h="trailing"in r?!!r.trailing:h);function p(R){var E=n,P=a;return n=a=void 0,u=R,s=t.apply(P,E),s}function c(R){return u=R,o=setTimeout(q,e),y?p(R):s}function b(R){var E=R-l,P=R-u,X=e-E;return m?zy(X,i-P):X}function w(R){var E=R-l,P=R-u;return l===void 0||E>=e||E<0||m&&P>=i}function q(){var R=Bt();if(w(R))return k(R);o=setTimeout(q,b(R))}function k(R){return o=void 0,h&&n?p(R):(n=a=void 0,s)}function T(){o!==void 0&&clearTimeout(o),u=0,n=l=a=o=void 0}function O(){return o===void 0?s:k(Bt())}function W(){var R=Bt(),E=w(R);if(n=arguments,a=this,l=R,E){if(o===void 0)return c(l);if(m)return o=setTimeout(q,e),p(l)}return o===void 0&&(o=setTimeout(q,e)),s}return W.cancel=T,W.flush=O,W}function qn(t){var e=typeof t;return!!t&&(e=="object"||e=="function")}function _y(t){return!!t&&typeof t=="object"}function Py(t){return typeof t=="symbol"||_y(t)&&Ny.call(t)==qy}function Ai(t){if(typeof t=="number")return t;if(Py(t))return Ti;if(qn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=qn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=t.replace(Ty,"");var r=Ry.test(t);return r||Oy.test(t)?xy(t.slice(2),r?2:8):Ay.test(t)?Ti:+t}var Fy=Ly;const Sy=hu(Fy);function Tn(){return new My}class My{constructor(){this.path=[],this.scaleFactor=1}build(){return this.path.map(Dy(this.scaleFactor)).map(Uy).join("")}move(e,r){return this.path.push({action:"M",args:[e,r]}),this}line(e,r){return this.path.push({action:"L",args:[e,r]}),this}circularArc(e,r,n,{sweep:a=!1,largeArc:i=!1}={}){return this.path.push({action:"A",args:[e,e,0,i?1:0,a?1:0,r,n]}),this}curve(e,r,n,a,i,s){return this.path.push({action:"C",args:[e,r,n,a,i,s]}),this}scale(e){return this.scaleFactor*=e,this}}function Uy(t){return`${t.action}${t.args.join(" ")}`}function Dy(t){return e=>{switch(e.action){case"A":return{...e,args:[e.args[0]*t,e.args[1]*t,e.args[2],e.args[3],e.args[4],e.args[5]*t,e.args[6]*t]};default:return{...e,args:e.args.map(r=>r*t)}}}}function lr(t,e,r){return tr?r:t}function ee(t,e){const[r,n]=e,[a,i]=t;return[Math.round(r/a)*a,Math.round(n/i)*i]}const C=0,L=1,ve=0,pe=1;function ur([t,e]){return e-t}function Ri(t,e){if(t*2>ur(e)){const r=Vy(...e);return[r,r]}return[e[ve]+t,e[pe]-t]}function Vy(t,e){return(t+e)/2}function Us(t,e){return[lr(e[C],...t[C]),lr(e[L],...t[L])]}function la(t,e){return[Ri(t[C],e[C]),Ri(t[L],e[L])]}function Oi(t,e,r){return(e-t)*lr(r,0,1)+t}const $y=([[t,e],[r,n]],[[a,i],[s,o]])=>{const l=(r-t)*(o-i)-(s-a)*(n-e);if(l===0)return!1;{const u=((o-i)*(s-t)+(a-s)*(o-e))/l,y=((e-n)*(s-t)+(r-t)*(o-e))/l;return 0=1)return;const m=[t,e],h=A.sub([r,n],m);return A.add(m,A.scale(h,u))}}function Hy(t){return t/180*Math.PI}function Er([t,e]){return Math.atan2(e,t)*180/Math.PI}function zr(t,e){return typeof t=="number"&&(t=[t,t]),e=e*Math.PI/180,[t[0]*Math.cos(e),t[1]*Math.sin(e)]}const Ae=(t,e,r)=>{if(r===void 0){const n=t[0]-e[0],a=t[1]-e[1];return!n&&!a?0:(180+Math.atan2(-a,-n)*180/Math.PI+360)%360}return Ae(t,r)-Ae(e,r)},Gy={range:[[0,1],[0,1]],tickStep:[1,1],gridStep:[1,1],snapStep:[1,1],markings:"none",showTooltips:!1,graphDimensionsInPixels:[1,1],width:0,height:0,labels:[],disableKeyboardInteraction:!1},Ds=v.createContext(Gy);function Z(){return ns.useContext(Ds)}const Vs=A.matrixBuilder;function $s(t,e,r=[0,0]){const{range:n,width:a,height:i}=e,[[s,o],[l,u]]=n,y=Vs().translate(...r).scale(a/(o-s),-i/(u-l)).get();return t.map(m=>A.transform(m,y))}function By(t,e){const{range:r,width:n,height:a}=e,[[i,s],[o,l]]=r,u=Vs().scale(n/(s-i),a/(l-o)).get();return t.map(y=>A.transform(y,u))}function An(t,e){const[[r],[,n]]=e.range,[a,i]=[-r,-n];return $s([t],e,[a,i])[0]}const Q=(...t)=>{const e=Z();return $s(t,e)},Hs=(...t)=>{const e=Z();return By(t,e)};function Ky(t,e){const[[r,n],[a,i]]=e.range,{width:s,height:o}=e,l=n-r,u=i-a;return t.map(y=>{const m=y[C]/s*l+r,h=i-y[L]/o*u;return[m,h]})}const Xy=Tn().move(-3,4).curve(-2.75,2.5,0,.25,.75,0).curve(0,-.25,-2.75,-2.5,-3,-4).scale(1.4).build();function Ne(t){const[e]=Q(t.tip);return d("g",{className:"interactive-graph-arrowhead",transform:`translate(${e[C]} ${e[L]}) rotate(${t.angle})`,children:d("g",{transform:"translate(-1.5)",children:d("path",{d:Xy,fill:"none",style:{stroke:t.color??"inherit"},strokeLinejoin:"round",strokeLinecap:"round",strokeWidth:"2px"})})})}Ne.__docgenInfo={description:"",methods:[],displayName:"Arrowhead",props:{tip:{required:!0,tsType:{name:"vec.Vector2"},description:""},angle:{required:!0,tsType:{name:"number"},description:""},color:{required:!1,tsType:{name:"string"},description:""}}};function Gs(){const{range:[[t,e],[r,n]]}=Z(),a="var(--mafs-fg)";return f(D,{children:[!(r>0||n<0)&&f(D,{children:[d(Ne,{color:a,tip:[t,0],angle:180}),d(Ne,{color:a,tip:[e,0],angle:0})]}),!(t>0||e<0)&&f(D,{children:[d(Ne,{color:a,tip:[0,r],angle:90}),d(Ne,{color:a,tip:[0,n],angle:270})]})]})}Gs.__docgenInfo={description:"",methods:[],displayName:"AxisArrows"};function Bs(){const{range:t,labels:e,width:r,height:n}=Z(),a=[0,t[L][pe]],i=[t[C][pe],0],[s,o]=e,l={range:t,width:r,height:n},[u,y]=An(i,l),[m,h]=A.add(An(a,l),[0,-24]),{TeX:p}=fe();return f(D,{children:[d("span",{style:{position:"absolute",left:u,top:y,fontSize:"14px",transform:"translate(7px, -50%)"},children:d(p,{children:s})}),d("span",{style:{position:"absolute",left:m,top:h,fontSize:"14px",transform:"translate(-50%, 0px)"},children:d(p,{children:o})})]})}Bs.__docgenInfo={description:"",methods:[],displayName:"AxisLabels"};const yt=10,Se=14,Yy=({y:t,range:e,tickStep:r})=>{let n=0;e[C][ve]>0&&(n=e[C][ve]),e[C][pe]<0&&(n=e[C][pe]);const a=[n,t],[[i,s]]=Q(a),o=i-yt/2,l=s,u=i+yt/2,y=s,m=e[C][pe]<=0?Se*1.5:-Se*1.1,h=i+m,p=s+Se*.25,c=Jy(t,e,r);return f("g",{className:"tick","aria-hidden":!0,children:[d("line",{x1:o,y1:l,x2:u,y2:y,className:"axis-tick"}),c&&d("text",{className:"axis-tick-label",style:{fontSize:Se},textAnchor:"end",x:h,y:p,children:t.toString()})]})},Qy=({x:t,range:e})=>{let r=0;e[L][ve]>0&&(r=e[L][ve]),e[L][pe]<0&&(r=e[L][pe]);const n=[t,r],[[a,i]]=Q(n),s=a,o=i+yt/2,l=a,u=i-yt/2,y=e[L][pe]<0?-Se:Se*1.75,m=t<0?-2:0,h=a+m,p=i+y;return f("g",{className:"tick","aria-hidden":!0,children:[d("line",{x1:s,y1:o,x2:l,y2:u,className:"axis-tick"}),d("text",{className:"axis-tick-label",style:{fontSize:Se},textAnchor:"middle",x:h,y:p,children:t.toString()})]})},Jy=(t,e,r)=>{let n=!0;return e[C][ve]<-r&&e[C][pe]>0&&t===-r&&(n=!1),n};function xi(t,e,r){const n=[],a=Math.max(e,0);for(let s=a+t;se;i-=t)n.push(i);return n}const Ks=()=>{const{tickStep:t,range:e}=Z(),[[r,n],[a,i]]=e,[s,o]=t,l=xi(o,a,i),u=xi(s,r,n);return f("g",{className:"axis-ticks",role:"presentation",children:[d("g",{className:"y-axis-ticks",children:l.map(y=>d(Yy,{y,range:e,tickStep:t[L]},`y-grid-tick-${y}`))}),d("g",{className:"x-axis-ticks",children:u.map(y=>d(Qy,{x:y,range:e},`x-grid-tick-${y}`))})]})};Ks.__docgenInfo={description:"",methods:[],displayName:"AxisTicks"};const ji=(t,e)=>({axis:t.markings==="graph",lines:t.gridStep[e],labels:!1}),Xs=t=>t.markings==="none"?null:d(cu.Cartesian,{xAxis:ji(t,C),yAxis:ji(t,L)});Xs.__docgenInfo={description:"",methods:[],displayName:"Grid",props:{gridStep:{required:!0,tsType:{name:"vec.Vector2"},description:""},range:{required:!0,tsType:{name:"tuple",raw:`[ + x: [min: number, max: number], + y: [min: number, max: number], +]`,elements:[{name:"unknown"},{name:"unknown"}]},description:""},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},markings:{required:!0,tsType:{name:"union",raw:'"graph" | "grid" | "none"',elements:[{name:"literal",value:'"graph"'},{name:"literal",value:'"grid"'},{name:"literal",value:'"none"'}]},description:""},width:{required:!0,tsType:{name:"number"},description:""},height:{required:!0,tsType:{name:"number"},description:""}}};const Ys=({box:t,backgroundImage:e})=>{const{url:r,width:n,height:a}=e??{};if(r&&typeof r=="string"){const i=t[C]/us.defaultBoxSize;return d(G,{style:{position:"absolute",bottom:0,left:0},children:d(na.Consumer,{children:({setAssetStatus:s})=>d(_r,{src:r,width:n,height:a,scale:i,responsive:!1,setAssetStatus:s,alt:""})})})}return null};Ys.__docgenInfo={description:"If a graphie URL is provided in `backgroundImage`, will return the rendered graphie background.\nOtherwise, returns `null`.",methods:[],displayName:"LegacyGrid",props:{box:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},backgroundImage:{required:!1,tsType:{name:"signature",type:"object",raw:`{ + // The URL of the image + url: string | null | undefined; + // The width of the image + width?: number; + // The height of the image + height?: number; + // The top offset of the image + // NOTE: perseus_data.go says this is required, but nullable, even though + // it isn't necessary at all. + top?: number; + // The left offset of the image + // NOTE: perseus_data.go says this is required, but nullable, even though + // it isn't necessary at all. + left?: number; + // The scale of the image + // NOTE: perseus_data.go says this is required, but nullable, even though + // it isn't necessary at all. + // Yikes, production data as this as both a number (1) and string ("1") + scale?: number | string; + // The bottom offset of the image + // NOTE: perseus_data.go says this is required, but nullable, even though + // it isn't necessary at all. + bottom?: number; +}`,signature:{properties:[{key:"url",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}},{key:"top",value:{name:"number",required:!1}},{key:"left",value:{name:"number",required:!1}},{key:"scale",value:{name:"union",raw:"number | string",elements:[{name:"number"},{name:"string"}],required:!1}},{key:"bottom",value:{name:"number",required:!1}}]}},description:""}}};const hc=["calculator","chi2Table","financialCalculatorMonthlyPayment","financialCalculatorTotalAmount","financialCalculatorTimeToPayOff","periodicTable","periodicTableWithKey","tTable","zTable"],pc=["correct","wrong","ungraded"],Y={blue:"#3D7586",green:"#447A53",grayH:"#3B3D45",purple:"#594094",pink:"#B25071",red:"#D92916",orange:"#946700"},Qs={none:0,white:1,translucent:.4,solid:1},cc=["bar","line","pic","histogram","dotplot"];function Tr(t){const{coord:e,text:r,color:n,size:a}=t,[i,s]=An(e,Z()),{TeX:o}=fe();return d("span",{className:"locked-label",style:{position:"absolute",left:i,top:s,color:Y[n],fontSize:Dl.size[a],backgroundColor:"rgba(255, 255, 255, 0.8)"},"aria-hidden":!0,children:d(o,{children:r})})}Tr.__docgenInfo={description:"",methods:[],displayName:"LockedLabel",props:{type:{required:!0,tsType:{name:"literal",value:'"label"'},description:""},coord:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},text:{required:!0,tsType:{name:"string"},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},size:{required:!0,tsType:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}]},description:""}}};function Zy(t){const{flags:e,lockedFigures:r}=t;return r.map((n,a)=>{var i,s,o,l,u,y,m,h,p;return n.type==="label"?d(Tr,{...n},`label-${a}`):(i=e==null?void 0:e.mafs)!=null&&i["locked-point-labels"]&&n.type==="point"||(s=e==null?void 0:e.mafs)!=null&&s["locked-line-labels"]&&n.type==="line"||(o=e==null?void 0:e.mafs)!=null&&o["locked-vector-labels"]&&n.type==="vector"||(l=e==null?void 0:e.mafs)!=null&&l["locked-ellipse-labels"]&&n.type==="ellipse"||(u=e==null?void 0:e.mafs)!=null&&u["locked-polygon-labels"]&&n.type==="polygon"||(y=e==null?void 0:e.mafs)!=null&&y["locked-function-labels"]&&n.type==="function"?f(v.Fragment,{children:[(m=n.labels)==null?void 0:m.map((c,b)=>d(Tr,{...c},`${a}-label-${b}`)),n.type==="line"&&f(D,{children:[(h=n.points[0].labels)==null?void 0:h.map((c,b)=>d(Tr,{...c},`locked-figure-${a}-point-1-label-${b}`)),(p=n.points[1].labels)==null?void 0:p.map((c,b)=>d(Tr,{...c},`locked-figure-${a}-point-2-label-${b}`))]})]},a):null})}const Js=t=>{var y;const{center:e,radius:r,angle:n,color:a,fillStyle:i,strokeStyle:s,ariaLabel:o,flags:l}=t,u=o&&((y=l==null?void 0:l.mafs)==null?void 0:y["locked-figures-aria"]);return d("g",{className:"locked-ellipse","aria-label":u?o:void 0,"aria-hidden":!u,children:d(bu,{center:e,radius:r,angle:n,fillOpacity:Qs[i],strokeStyle:s,color:Y[a],svgEllipseProps:{style:{fill:i==="white"?N.white:Y[a]}}})})};Js.__docgenInfo={description:"",methods:[],displayName:"LockedEllipse",props:{type:{required:!0,tsType:{name:"literal",value:'"ellipse"'},description:""},center:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},radius:{required:!0,tsType:{name:"tuple",raw:"[x: number, y: number]",elements:[{name:"unknown"},{name:"unknown"}]},description:""},angle:{required:!0,tsType:{name:"number"},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},fillStyle:{required:!0,tsType:{name:"union",raw:'"none" | "white" | "translucent" | "solid"',elements:[{name:"literal",value:'"none"'},{name:"literal",value:'"white"'},{name:"literal",value:'"translucent"'},{name:"literal",value:'"solid"'}]},description:""},strokeStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""},labels:{required:!1,tsType:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]"},description:""},ariaLabel:{required:!1,tsType:{name:"string"},description:""},flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""}}};const Zs=t=>{var u,y;const[e,r]=v.useState(),{color:n,strokeStyle:a,directionalAxis:i,domain:s}=t,o={color:Y[n],style:a,domain:s},l=t.ariaLabel&&((y=(u=t.flags)==null?void 0:u.mafs)==null?void 0:y["locked-figures-aria"]);return v.useEffect(()=>{r(pr(t.equation).expr)},[t.equation]),typeof e>"u"?null:f("g",{className:"locked-function","aria-label":l?t.ariaLabel:void 0,"aria-hidden":!l,children:[i==="x"&&d(at.OfX,{y:m=>e.eval({x:m}),...o}),i==="y"&&d(at.OfY,{x:m=>e.eval({y:m}),...o})]})};Zs.__docgenInfo={description:"",methods:[],displayName:"LockedFunction",props:{type:{required:!0,tsType:{name:"literal",value:'"function"'},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},strokeStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""},equation:{required:!0,tsType:{name:"string"},description:""},directionalAxis:{required:!0,tsType:{name:"union",raw:'"x" | "y"',elements:[{name:"literal",value:'"x"'},{name:"literal",value:'"y"'}]},description:""},domain:{required:!1,tsType:{name:"Interval"},description:""},labels:{required:!1,tsType:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]"},description:""},ariaLabel:{required:!1,tsType:{name:"string"},description:""},flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""}}};function Me(t){const{start:e,end:r,style:n,className:a,testId:i}=t;return d("line",{x1:e[C],y1:e[L],x2:r[C],y2:r[L],style:n,className:a,"data-testid":i})}Me.__docgenInfo={description:"",methods:[],displayName:"SVGLine",props:{start:{required:!0,tsType:{name:"vec.Vector2"},description:""},end:{required:!0,tsType:{name:"vec.Vector2"},description:""},style:{required:!1,tsType:{name:'SVGProps["style"]',raw:'SVGProps["style"]'},description:""},className:{required:!1,tsType:{name:"string"},description:""},testId:{required:!1,tsType:{name:"string"},description:""}}};function dr(t){const{tail:e,tip:r,color:n,style:a}=t,[i,s]=Q(e,r),o=A.sub(s,i),l=Er(o);return f("g",{style:{stroke:n,strokeWidth:2},children:[d(Me,{start:i,end:s,style:a}),d(Ne,{angle:l,tip:r,color:n})]})}dr.__docgenInfo={description:"",methods:[],displayName:"Vector",props:{tail:{required:!0,tsType:{name:"vec.Vector2"},description:""},tip:{required:!0,tsType:{name:"vec.Vector2"},description:""},color:{required:!0,tsType:{name:"string"},description:""},style:{required:!1,tsType:{name:'ReactSVGProps["style"]',raw:'React.SVGProps["style"]'},description:""}}};const He=(t,e,r)=>{const[[n,a],[i,s]]=r,[o,l]=t,[u,y]=e,m=y-l,h=u-o,p=m/h,c=1/p,b=h<0?n:a,w=m<0?i:s,q=l+(b-o)*p,k=o+(w-l)*c;switch(!0){case Wi(q,i,s):return[b,q];case Wi(k,n,a):return[k,w];default:return[b,w]}};function Wi(t,e,r){return t>=e&&t<=r}const eo=t=>{var c;const{color:e,lineStyle:r,kind:n,points:a,showPoint1:i,showPoint2:s,ariaLabel:o,flags:l,range:u}=t,[y,m]=a,h=o&&((c=l==null?void 0:l.mafs)==null?void 0:c["locked-figures-aria"]);let p;if(n==="ray"){const b=He(y.coord,m.coord,u);p=d(dr,{tail:y.coord,tip:b,color:Y[e],style:{strokeDasharray:r==="dashed"?"var(--mafs-line-stroke-dash-style)":void 0}})}else{const b=n==="segment"?Da.Segment:Da.ThroughPoints;let w=n==="segment"?m.coord:He(y.coord,m.coord,u);const[q,k]=Q(m.coord,y.coord),T=A.sub(q,k);let O=Er(T);const W=n!=="segment"&&d(Ne,{angle:O,tip:w,color:Y[e]});w=n==="segment"?y.coord:He(m.coord,y.coord,u),O=O>180?O-180:O+180;const R=n!=="segment"&&d(Ne,{angle:O,tip:w,color:Y[e]});p=f(D,{children:[W,d(b,{point1:y.coord,point2:m.coord,color:Y[e],style:r}),R]})}return f("g",{className:n==="ray"?"locked-ray":"locked-line","aria-label":h?o:void 0,"aria-hidden":!h,children:[p,i&&d(it,{x:y.coord[C],y:y.coord[L],svgCircleProps:{style:{fill:y.filled?Y[y.color]:N.white,stroke:Y[y.color],strokeWidth:oe.xxxxSmall_2}}}),s&&d(it,{x:m.coord[C],y:m.coord[L],svgCircleProps:{style:{fill:m.filled?Y[m.color]:N.white,stroke:Y[m.color],strokeWidth:oe.xxxxSmall_2}}})]})};eo.__docgenInfo={description:"",methods:[],displayName:"LockedLine",props:{type:{required:!0,tsType:{name:"literal",value:'"line"'},description:""},kind:{required:!0,tsType:{name:"union",raw:'"line" | "ray" | "segment"',elements:[{name:"literal",value:'"line"'},{name:"literal",value:'"ray"'},{name:"literal",value:'"segment"'}]},description:""},points:{required:!0,tsType:{name:"tuple",raw:"[point1: LockedPointType, point2: LockedPointType]",elements:[{name:"unknown"},{name:"unknown"}]},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},lineStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""},showPoint1:{required:!0,tsType:{name:"boolean"},description:""},showPoint2:{required:!0,tsType:{name:"boolean"},description:""},labels:{required:!1,tsType:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]"},description:""},ariaLabel:{required:!1,tsType:{name:"string"},description:""},flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""},range:{required:!0,tsType:{name:"tuple",raw:"[Interval, Interval]",elements:[{name:"Interval"},{name:"Interval"}]},description:""}}};const ro=t=>{var u;const{flags:e,color:r,coord:n,filled:a,ariaLabel:i}=t,[s,o]=n,l=i&&((u=e==null?void 0:e.mafs)==null?void 0:u["locked-figures-aria"]);return d("g",{className:"locked-point","aria-label":l?i:void 0,"aria-hidden":!l,children:d(it,{x:s,y:o,svgCircleProps:{style:{fill:a?Y[r]:N.white,stroke:Y[r],strokeWidth:oe.xxxxSmall_2}}})})};ro.__docgenInfo={description:"",methods:[],displayName:"LockedPoint",props:{type:{required:!0,tsType:{name:"literal",value:'"point"'},description:""},coord:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},filled:{required:!0,tsType:{name:"boolean"},description:""},labels:{required:!1,tsType:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]"},description:""},ariaLabel:{required:!1,tsType:{name:"string"},description:""},flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""}}};const to=t=>{var o,l;const{points:e,color:r,showVertices:n,fillStyle:a,strokeStyle:i}=t,s=t.ariaLabel&&((l=(o=t.flags)==null?void 0:o.mafs)==null?void 0:l["locked-figures-aria"]);return f("g",{className:"locked-polygon","aria-label":s?t.ariaLabel:void 0,"aria-hidden":!s,children:[d(Zt,{points:[...e],fillOpacity:Qs[a],strokeStyle:i,color:Y[r],svgPolygonProps:{style:{fill:a==="white"?N.white:Y[r]}}}),n&&e.map((u,y)=>d(it,{x:u[C],y:u[L],color:Y[r]},`locked-polygon-point-${y}`))]})};to.__docgenInfo={description:"",methods:[],displayName:"LockedPolygon",props:{type:{required:!0,tsType:{name:"literal",value:'"polygon"'},description:""},points:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]}],raw:"ReadonlyArray"},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},showVertices:{required:!0,tsType:{name:"boolean"},description:""},fillStyle:{required:!0,tsType:{name:"union",raw:'"none" | "white" | "translucent" | "solid"',elements:[{name:"literal",value:'"none"'},{name:"literal",value:'"white"'},{name:"literal",value:'"translucent"'},{name:"literal",value:'"solid"'}]},description:""},strokeStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""},labels:{required:!1,tsType:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]"},description:""},ariaLabel:{required:!1,tsType:{name:"string"},description:""},flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""}}};const no=t=>{var l;const{color:e,points:r,ariaLabel:n,flags:a}=t,[i,s]=r,o=n&&((l=a==null?void 0:a.mafs)==null?void 0:l["locked-figures-aria"]);return d("g",{className:"locked-vector","aria-label":o?n:void 0,"aria-hidden":!o,children:d(dr,{tail:i,tip:s,color:Y[e]})})};no.__docgenInfo={description:"",methods:[],displayName:"LockedVector",props:{type:{required:!0,tsType:{name:"literal",value:'"vector"'},description:""},points:{required:!0,tsType:{name:"tuple",raw:"[tail: Coord, tip: Coord]",elements:[{name:"unknown"},{name:"unknown"}]},description:""},color:{required:!0,tsType:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]"},description:""},labels:{required:!1,tsType:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]"},description:""},ariaLabel:{required:!1,tsType:{name:"string"},description:""},flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""}}};const ao=t=>{const{flags:e,lockedFigures:r}=t;return d(D,{children:r.map((n,a)=>{switch(n.type){case"point":return d(ro,{...n,flags:e},`point-${a}`);case"line":return d(eo,{range:t.range,...n,flags:e},`line-${a}`);case"vector":return d(no,{...n,flags:e},`vector-${a}`);case"ellipse":return d(Js,{...n,flags:e},`ellipse-${a}`);case"polygon":return d(to,{...n,flags:e},`polygon-${a}`);case"function":return d(Zs,{...n,flags:e},`function-${a}`);case"label":return null;default:throw new cr(n)}})})};ao.__docgenInfo={description:"",methods:[],displayName:"GraphLockedLayer",props:{flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""},lockedFigures:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"union",raw:`| LockedPointType +| LockedLineType +| LockedVectorType +| LockedEllipseType +| LockedPolygonType +| LockedFunctionType +| LockedLabelType`,elements:[{name:"signature",type:"object",raw:`{ + type: "point"; + coord: Coord; + color: LockedFigureColor; + filled: boolean; + labels?: LockedLabelType[]; + ariaLabel?: string; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"filled",value:{name:"boolean",required:!0}},{key:"labels",value:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]",required:!1}},{key:"ariaLabel",value:{name:"string",required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "line"; + kind: "line" | "ray" | "segment"; + points: [point1: LockedPointType, point2: LockedPointType]; + color: LockedFigureColor; + lineStyle: LockedLineStyle; + showPoint1: boolean; + showPoint2: boolean; + labels?: LockedLabelType[]; + ariaLabel?: string; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"line"',required:!0}},{key:"kind",value:{name:"union",raw:'"line" | "ray" | "segment"',elements:[{name:"literal",value:'"line"'},{name:"literal",value:'"ray"'},{name:"literal",value:'"segment"'}],required:!0}},{key:"points",value:{name:"tuple",raw:"[point1: LockedPointType, point2: LockedPointType]",elements:[{name:"unknown"},{name:"unknown"}],required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"lineStyle",value:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}],required:!0}},{key:"showPoint1",value:{name:"boolean",required:!0}},{key:"showPoint2",value:{name:"boolean",required:!0}},{key:"labels",value:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]",required:!1}},{key:"ariaLabel",value:{name:"string",required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "vector"; + points: [tail: Coord, tip: Coord]; + color: LockedFigureColor; + labels?: LockedLabelType[]; + ariaLabel?: string; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"vector"',required:!0}},{key:"points",value:{name:"tuple",raw:"[tail: Coord, tip: Coord]",elements:[{name:"unknown"},{name:"unknown"}],required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"labels",value:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]",required:!1}},{key:"ariaLabel",value:{name:"string",required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "ellipse"; + center: Coord; + radius: [x: number, y: number]; + angle: number; + color: LockedFigureColor; + fillStyle: LockedFigureFillType; + strokeStyle: LockedLineStyle; + labels?: LockedLabelType[]; + ariaLabel?: string; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ellipse"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"radius",value:{name:"tuple",raw:"[x: number, y: number]",elements:[{name:"unknown"},{name:"unknown"}],required:!0}},{key:"angle",value:{name:"number",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"fillStyle",value:{name:"union",raw:'"none" | "white" | "translucent" | "solid"',elements:[{name:"literal",value:'"none"'},{name:"literal",value:'"white"'},{name:"literal",value:'"translucent"'},{name:"literal",value:'"solid"'}],required:!0}},{key:"strokeStyle",value:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}],required:!0}},{key:"labels",value:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]",required:!1}},{key:"ariaLabel",value:{name:"string",required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "polygon"; + points: ReadonlyArray; + color: LockedFigureColor; + showVertices: boolean; + fillStyle: LockedFigureFillType; + strokeStyle: LockedLineStyle; + labels?: LockedLabelType[]; + ariaLabel?: string; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"points",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}],raw:"ReadonlyArray",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"showVertices",value:{name:"boolean",required:!0}},{key:"fillStyle",value:{name:"union",raw:'"none" | "white" | "translucent" | "solid"',elements:[{name:"literal",value:'"none"'},{name:"literal",value:'"white"'},{name:"literal",value:'"translucent"'},{name:"literal",value:'"solid"'}],required:!0}},{key:"strokeStyle",value:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}],required:!0}},{key:"labels",value:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]",required:!1}},{key:"ariaLabel",value:{name:"string",required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "function"; + color: LockedFigureColor; + strokeStyle: LockedLineStyle; + equation: string; // This is the user-defined equation (as it was typed) + directionalAxis: "x" | "y"; + domain?: Interval; + labels?: LockedLabelType[]; + ariaLabel?: string; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"function"',required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"strokeStyle",value:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}],required:!0}},{key:"equation",value:{name:"string",required:!0}},{key:"directionalAxis",value:{name:"union",raw:'"x" | "y"',elements:[{name:"literal",value:'"x"'},{name:"literal",value:'"y"'}],required:!0}},{key:"domain",value:{name:"Interval",required:!1}},{key:"labels",value:{name:"Array",elements:[{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}],raw:"LockedLabelType[]",required:!1}},{key:"ariaLabel",value:{name:"string",required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "label"; + coord: Coord; + // TeX-supported string + text: string; + color: LockedFigureColor; + size: "small" | "medium" | "large"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"label"',required:!0}},{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}},{key:"text",value:{name:"string",required:!0}},{key:"color",value:{name:"unknown[number]",raw:"(typeof lockedFigureColorNames)[number]",required:!0}},{key:"size",value:{name:"union",raw:'"small" | "medium" | "large"',elements:[{name:"literal",value:'"small"'},{name:"literal",value:'"medium"'},{name:"literal",value:'"large"'}],required:!0}}]}}]}],raw:"ReadonlyArray"},description:""},range:{required:!0,tsType:{name:"tuple",raw:"[x: Interval, y: Interval]",elements:[{name:"unknown"},{name:"unknown"}]},description:""}}};const F={global:{deleteIntent:em,changeInteractionMode:sm,changeKeyboardInvitationVisibility:om},angle:{movePoint:kr},circle:{moveCenter:um,moveRadiusPoint:dm},linear:{moveLine:t=>Dr(0,t),movePoint:(t,e)=>Vr(0,t,e)},linearSystem:{moveLine:Dr,movePointInFigure:Vr},pointGraph:{movePoint:kr,addPoint:rm,removePoint:tm,focusPoint:nm,blurPoint:am,clickPoint:im},polygon:{movePoint:kr,moveAll:lm},quadratic:{movePoint:kr},ray:{moveRay:t=>Dr(0,t),movePoint:(t,e)=>Vr(0,t,e)},segment:{movePointInFigure:Vr,moveLine:Dr},sinusoid:{movePoint:kr}},io="delete-intent";function em(){return{type:io}}const so="move-line";function Dr(t,e){return{type:so,itemIndex:t,delta:e}}const oo="add-point";function rm(t){return{type:oo,location:t}}const lo="remove-point";function tm(t){return{type:lo,index:t}}const uo="focus-point";function nm(t){return{type:uo,index:t}}const yo="blur-point";function am(){return{type:yo}}const mo="click-point";function im(t){return{type:mo,index:t}}const go="point-change-interaction-mode";function sm(t){return{type:go,mode:t}}const ho="change-keyboard-interaction-invitation-visibility";function om(t){return{type:ho,shouldShow:t}}const po="move-all";function lm(t){return{type:po,delta:t}}const co="move-point";function kr(t,e){return{type:co,index:t,destination:e}}const bo="move-point-in-figure";function Vr(t,e,r){return{type:bo,figureIndex:t,pointIndex:e,destination:r}}const vo="move-center";function um(t){return{type:vo,destination:t}}const fo="MOVE_RADIUS_POINT";function dm(t){return{type:fo,destination:t}}const wo="change-snap-step";function ym(t){return{type:wo,snapStep:t}}const ko="change-range";function mm(t){return{type:ko,range:t}}const qo="reinitialize";function gm(t){return{type:qo,params:t}}const ua=44,Le=(t,e,r,n)=>r.map(a=>a.map((i,s)=>{const o=t[s];if(n)return o[ve]+ur(o)*i;const l=e[s],u=Math.floor(ur(o)/l),y=Math.round(i*u);return o[ve]+l*y})),da=(t,e)=>t.map(r=>r.map((n,a)=>(n+e[a][1])/ur(e[a])));function Qe({snapStep:t,range:e,point:r}){const n=la(t,e);return Us(n,r)}function Xe(t){const{gestureTarget:e,onMove:r,point:n,constrainKeyboardMovement:a}=t,[i,s]=v.useState(!1),{xSpan:o,ySpan:l}=cm(),{viewTransform:u,userTransform:y}=vu(),m=A.matrixInvert(u);te(m);const h=v.useMemo(()=>pm(y),[y]),p=v.useRef([0,0]);return ds(c=>{const{type:b,event:w}=c;if(w==null||w.stopPropagation(),b.includes("key")){if(te(w instanceof KeyboardEvent),w==null||w.preventDefault(),b==="keyup")return;if(typeof a=="object"){const me=a[hm[w.key]];r(me??n);return}const{direction:k,altKey:T,metaKey:O,shiftKey:W}=c,R=[k[C],-k[L]],E=Math.abs(R[C])?o:l;let P=50;(T||O)&&(P=200),W&&(P=10);const X=E/(P*2),Oe=bm(E/P,E/2,E/P);for(const me of Oe){const le=A.scale(R,me),se=a(A.transform(A.add(A.transform(n,y),le),h));if(A.dist(se,n)>X){r(se);break}}}else{const{last:k,movement:T,first:O}=c;if(s(!k),O&&(p.current=A.transform(n,y)),A.mag(T)===0)return;const W=A.transform(T,m);r(A.transform(A.add(p.current,W),h))}},{target:e,eventOptions:{passive:!1}}),{dragging:i}}const hm={ArrowLeft:"left",ArrowRight:"right",ArrowUp:"up",ArrowDown:"down"};function pm(t){const e=A.matrixInvert(t);return te(e!==null),e}function cm(){const{range:[[t,e],[r,n]]}=Z(),a=e-t,i=n-r;return{xSpan:a,ySpan:i}}function bm(t,e,r=1){const n=[];for(let i=t;i{var se;const{range:r,markings:n,showTooltips:a,disableKeyboardInteraction:i}=Z(),{point:s,color:o=N.blue,dragging:l,focusBehavior:u,cursor:y,onClick:m=()=>{}}=t,h=((se=Object.entries(N).find(([_e,xe])=>xe===o))==null?void 0:se[0])??"blue",p=`movable-point ${l?"movable-point--dragging":""} ${fm(u)}`,[[c,b]]=Q(s),[[w,q],[k,T]]=r,[[O]]=Q([w,0]),[[W]]=Q([q,0]),[[R,E]]=Q([0,k]),[[P,X]]=Q([0,T]),Oe=l&&n!=="none",me=f("g",{children:[d("line",{x1:O,y1:b,x2:W,y2:b,stroke:o}),d("line",{x1:c,y1:E,x2:c,y2:X,stroke:o})]}),le=f("g",{ref:e,className:p,style:{"--movable-point-color":o,cursor:y},"data-testid":"movable-point",tabIndex:i?-1:wm(u),onFocus:_e=>{const xe=Ci(u);xe&&xe(_e,!0)},onBlur:_e=>{const xe=Ci(u);xe&&xe(_e,!1)},onClick:m,children:[d("circle",{className:"movable-point-hitbox",r:vm/2,cx:c,cy:b}),d("circle",{className:"movable-point-halo",cx:c,cy:b}),d("circle",{className:"movable-point-ring",cx:c,cy:b}),d("circle",{className:"movable-point-focus-outline",cx:c,cy:b}),d("circle",{className:"movable-point-center",cx:c,cy:b,style:{fill:o},"data-testid":"movable-point__center"})]});return f(D,{children:[Oe&&me,a?d(Qn,{autoUpdate:!0,backgroundColor:h,content:`(${s[C]}, ${s[L]})`,contentStyle:{color:"white"},children:le}):le]})});function fm(t){return t.type==="controlled"&&t.showFocusRing?"movable-point--focus":""}function wm(t){if(t.type==="uncontrolled")return t.tabIndex}function Ci(t){return t.type==="uncontrolled"?t.onFocusChange:()=>{}}ya.__docgenInfo={description:"",methods:[],displayName:"MovablePointView",props:{point:{required:!0,tsType:{name:"vec.Vector2"},description:""},color:{required:!1,tsType:{name:"union",raw:"string | undefined",elements:[{name:"string"},{name:"undefined"}]},description:""},dragging:{required:!0,tsType:{name:"boolean"},description:""},focusBehavior:{required:!0,tsType:{name:"union",raw:"ControlledFocusBehavior | UncontrolledFocusBehavior",elements:[{name:"signature",type:"object",raw:'{type: "controlled"; showFocusRing: boolean}',signature:{properties:[{key:"type",value:{name:"literal",value:'"controlled"',required:!0}},{key:"showFocusRing",value:{name:"boolean",required:!0}}]}},{name:"signature",type:"object",raw:`{ + type: "uncontrolled"; + tabIndex: number; + onFocusChange?: (event: React.FocusEvent, isFocused: boolean) => unknown; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"uncontrolled"',required:!0}},{key:"tabIndex",value:{name:"number",required:!0}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:"(event: React.FocusEvent, isFocused: boolean) => unknown",signature:{arguments:[{type:{name:"ReactFocusEvent",raw:"React.FocusEvent"},name:"event"},{type:{name:"boolean"},name:"isFocused"}],return:{name:"unknown"}},required:!1}}]}}]},description:""},cursor:{required:!1,tsType:{name:"union",raw:"CSSCursor | undefined",elements:[{name:"union",raw:'"move" | "ew-resize"',elements:[{name:"literal",value:'"move"'},{name:"literal",value:'"ew-resize"'}]},{name:"undefined"}]},description:""},onClick:{required:!1,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""}}};const Fr=t=>{const{onMoveLine:e=()=>{},onMovePoint:r=()=>{},color:n,points:[a,i],extend:s}=t,{visiblePoint:o,focusableHandle:l}=Ii(a,n,h=>r(0,h)),{visiblePoint:u,focusableHandle:y}=Ii(i,n,h=>r(1,h));return f(D,{children:[l,d(To,{start:a,end:i,stroke:n,extend:s,onMove:e}),y,o,u]})};function Ii(t,e,r){const{snapStep:n,disableKeyboardInteraction:a}=Z(),[i,s]=v.useState(!1),o=v.useRef(null);Xe({gestureTarget:o,point:t,onMove:r,constrainKeyboardMovement:h=>ee(n,h)});const l=v.useRef(null),{dragging:u}=Xe({gestureTarget:l,point:t,onMove:r,constrainKeyboardMovement:h=>ee(n,h)});return{focusableHandle:d("g",{"data-testid":"movable-point__focusable-handle",className:"movable-point__focusable-handle",tabIndex:a?-1:0,ref:o,onFocus:()=>s(!0),onBlur:()=>s(!1)}),visiblePoint:d(ya,{point:t,dragging:u,color:e,ref:l,focusBehavior:{type:"controlled",showFocusRing:i}})}}const km="var(--movable-line-stroke-color)",To=t=>{const{start:e,end:r,onMove:n,extend:a,stroke:i=km}=t,[s,o]=Q(e,r),{range:l,graphDimensionsInPixels:u,snapStep:y,disableKeyboardInteraction:m}=Z();let h,p;if(a){const w=Ao(l,u);h=a.start?He(r,e,w):void 0,p=a.end?He(e,r,w):void 0}const c=v.useRef(null),{dragging:b}=Xe({gestureTarget:c,point:e,onMove:w=>{n(A.sub(w,e))},constrainKeyboardMovement:w=>ee(y,w)});return f(D,{children:[f("g",{ref:c,tabIndex:m?-1:0,className:"movable-line","data-testid":"movable-line",style:{cursor:b?"grabbing":"grab"},children:[d(Me,{start:s,end:o,style:{stroke:"transparent",strokeWidth:ua}}),d(Me,{start:s,end:o,className:"movable-line-focus-outline",style:{}}),d(Me,{start:s,end:o,className:"movable-line-focus-outline-gap",style:{}}),d(Me,{start:s,end:o,style:{stroke:i,strokeWidth:"var(--movable-line-stroke-weight)"},className:b?"movable-dragging":"",testId:"movable-line__line"})]}),h&&d(dr,{tail:e,tip:h,color:i}),p&&d(dr,{tail:r,tip:p,color:i})]})};function Ao(t,e){const[n,a]=t,[i,s]=e,o=ur(n)/i,l=ur(a)/s,u=4*o,y=4*l;return la([u,y],t)}Fr.__docgenInfo={description:"",methods:[],displayName:"MovableLine",props:{points:{required:!0,tsType:{name:"Readonly",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}]}],raw:"Readonly<[vec.Vector2, vec.Vector2]>"},description:""},onMovePoint:{required:!1,tsType:{name:"signature",type:"function",raw:"(endpointIndex: number, destination: vec.Vector2) => unknown",signature:{arguments:[{type:{name:"number"},name:"endpointIndex"},{type:{name:"vec.Vector2"},name:"destination"}],return:{name:"unknown"}}},description:""},onMoveLine:{required:!1,tsType:{name:"signature",type:"function",raw:"(delta: vec.Vector2) => unknown",signature:{arguments:[{type:{name:"vec.Vector2"},name:"delta"}],return:{name:"unknown"}}},description:""},color:{required:!1,tsType:{name:"string"},description:""},extend:{required:!1,tsType:{name:"signature",type:"object",raw:`{ + start: boolean; + end: boolean; +}`,signature:{properties:[{key:"start",value:{name:"boolean",required:!0}},{key:"end",value:{name:"boolean",required:!0}}]}},description:""}}};To.__docgenInfo={description:"",methods:[],displayName:"Line",props:{start:{required:!0,tsType:{name:"vec.Vector2"},description:""},end:{required:!0,tsType:{name:"vec.Vector2"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(delta: vec.Vector2) => unknown",signature:{arguments:[{type:{name:"vec.Vector2"},name:"delta"}],return:{name:"unknown"}}},description:""},stroke:{required:!1,tsType:{name:"union",raw:"string | undefined",elements:[{name:"string"},{name:"undefined"}]},description:""},extend:{required:!1,tsType:{name:"union",raw:`| undefined +| { + start: boolean; + end: boolean; + }`,elements:[{name:"undefined"},{name:"signature",type:"object",raw:`{ + start: boolean; + end: boolean; +}`,signature:{properties:[{key:"start",value:{name:"boolean",required:!0}},{key:"end",value:{name:"boolean",required:!0}}]}}]},description:""}}};const Ro=t=>{const{dispatch:e}=t,{coords:r}=t.graphState;return d(D,{children:r==null?void 0:r.map((n,a)=>d(Fr,{points:n,onMoveLine:i=>{e(F.segment.moveLine(a,i))},onMovePoint:(i,s)=>{e(F.segment.movePointInFigure(a,i,s))}},a))})};Ro.__docgenInfo={description:"",methods:[],displayName:"SegmentGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize +| MovePointInFigure +| MoveLine +| MoveAll +| MovePoint +| MoveCenter +| MoveRadiusPoint +| ChangeSnapStep +| ChangeRange +| AddPoint +| RemovePoint +| FocusPoint +| BlurPoint +| DeleteIntent +| ClickPoint +| ChangeInteractionMode +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};const Oo=(t,e)=>{const{dispatch:r}=t,{coords:n}=t.graphState;return d(Fr,{points:n,onMoveLine:a=>{r(F.linear.moveLine(a))},extend:{start:!0,end:!0},onMovePoint:(a,i)=>r(F.linear.movePoint(a,i)),color:"var(--movable-line-stroke-color)"},0)};Oo.__docgenInfo={description:"",methods:[],displayName:"LinearGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize +| MovePointInFigure +| MoveLine +| MoveAll +| MovePoint +| MoveCenter +| MoveRadiusPoint +| ChangeSnapStep +| ChangeRange +| AddPoint +| RemovePoint +| FocusPoint +| BlurPoint +| DeleteIntent +| ClickPoint +| ChangeInteractionMode +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};const xo=t=>{const{dispatch:e}=t,{coords:r}=t.graphState;return f(D,{children:[r==null?void 0:r.map((n,a)=>d(Fr,{points:n,onMoveLine:i=>{e(F.linearSystem.moveLine(a,i))},extend:{start:!0,end:!0},onMovePoint:(i,s)=>e(F.linearSystem.movePointInFigure(a,i,s)),color:"var(--movable-line-stroke-color)"},a)),";"]})};xo.__docgenInfo={description:"",methods:[],displayName:"LinearSystemGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize +| MovePointInFigure | MoveLine | MoveAll | MovePoint @@ -44355,7 +59614,7 @@ the available choices.`}]}}],raw:`Readonly<{ | DeleteIntent | ClickPoint | ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};const To=t=>{const{dispatch:e}=t,{coords:r}=t.graphState;return d(Sr,{points:r,onMoveLine:i=>e(S.ray.moveRay(i)),onMovePoint:(i,s)=>e(S.ray.movePoint(i,s)),extend:{start:!1,end:!0}})};To.__docgenInfo={description:"",methods:[],displayName:"RayGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};const jo=t=>{const{dispatch:e}=t,{coords:r}=t.graphState;return d(Fr,{points:r,onMoveLine:i=>e(F.ray.moveRay(i)),onMovePoint:(i,s)=>e(F.ray.movePoint(i,s)),extend:{start:!1,end:!0}})};jo.__docgenInfo={description:"",methods:[],displayName:"RayGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize | MovePointInFigure | MoveLine | MoveAll @@ -44371,7 +59630,7 @@ the available choices.`}]}}],raw:`Readonly<{ | DeleteIntent | ClickPoint | ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};const ma=({children:t})=>d("g",{style:{transform:"var(--mafs-view-transform) var(--mafs-user-transform)"},children:t});ma.__docgenInfo={description:"Wrapper with Mafs transform styles for SVG elements.\nScales and translates the SVG element to match the Mafs view.\nUse if you do not need/want to use the hook in `use-transform.ts`.",methods:[],displayName:"MafsCssTransformWrapper"};const Dt=({children:t,...e})=>d(qu,{size:16,svgTextProps:{filter:"url(#background)",fontWeight:"bold"},...e,children:t}),Ao=()=>d("defs",{children:q("filter",{id:"background",x:"-5%",width:"110%",y:"0%",height:"100%",children:[d("feFlood",{floodColor:"#FFF",floodOpacity:"0.64"}),d("feComposite",{operator:"over",in:"SourceGraphic"})]})});Dt.__docgenInfo={description:"",methods:[],displayName:"TextLabel"};Ao.__docgenInfo={description:"",methods:[],displayName:"SvgDefs"};const Ro=({centerPoint:t,endPoints:e,range:r,polygonLines:n,showAngles:a,snapTo:i})=>{const[s,o]=t,l=ta([t,...e]),[[u,y],[m,h]]=l?e:e.reverse(),p=.3,c=x.dist(t,e[0]),b=x.dist(t,e[1]),T=x.dist(e[0],e[1]),R=Math.acos((c**2+b**2-T**2)/(2*c*b)),A=o+(y-o)/c*p,O=s+(m-s)/b*p,f=s+(u-s)/c*p,v=o+(h-o)/b*p,[w,C]=x.add(t,x.add(x.sub([f,A],t),x.sub([O,v],t)));if(!a)return am(R)?d(Rn,{start:[f,A],vertex:[O,v],end:[w,C]}):null;const W=Wo([w,C],t,r,n),ue=`M ${f} ${A} A ${p} ${p} 0 ${W?1:0} ${W?1:0} ${O} ${v}`;let de=R*(180/Math.PI);W&&(de=360-de);const ae=parseFloat(de.toFixed(i==="angles"?0:1)),ye=Number.isInteger(ae)?ae:"≈ "+ae;return q(U,{children:[d("defs",{children:q("filter",{id:"background",x:"-5%",width:"110%",y:"0%",height:"100%",children:[d("feFlood",{floodColor:"#FFF",floodOpacity:"0.5"}),d("feComposite",{operator:"over",in:"SourceGraphic"})]})}),!W&&jo(R)?d(Rn,{start:[f,A],vertex:[O,v],end:[w,C]}):d(xo,{arc:ue}),q(Dt,{x:w,y:C,attach:C-o>0?"s":"n",attachDistance:Math.abs(C-o)<.2||x.dist([w,C],t)<.3?20:10,children:[ye,"°"]})]})},Oo=({vertex:t,coords:e,showAngles:r,allowReflexAngles:n,range:a})=>{const o=ta([...e,t])&&!n?e:e.reverse(),l=je(o[0],t),u=je(o[1],t),y=(l+360-u)%360,m=y>180,[h,p]=t,[c,b]=o,[T,R]=c,[A,O]=b,f=x.dist(t,c),v=x.dist(t,b),w=2,C=p+(R-p)/f*w,W=h+(A-h)/v*w,F=h+(T-h)/f*w,X=p+(O-p)/v*w,[ue,de]=x.add(t,x.add(x.sub([F,C],t),x.sub([W,X],t))),ae=Wo([ue,de],t,a,[[t,c],[t,b]]),ql=`M ${F} ${C} A ${w} ${w} 0 ${ae||m?1:0} ${ae&&m?1:0} ${W} ${X}`,Tl=parseFloat(y.toFixed(0)),[Al,Rl]=sm(c,b,t,m,n,w);return q(U,{children:[d("defs",{children:q("filter",{id:"background",x:"-5%",width:"110%",y:"0%",height:"100%",children:[d("feFlood",{floodColor:"#FFF",floodOpacity:"0.5"}),d("feComposite",{operator:"over",in:"SourceGraphic"})]})}),jo(y)?d(Rn,{start:[F,C],vertex:[W,X],end:[ue,de],className:"arc-right-angle"}):d(xo,{arc:ql,className:"angle-arc"}),r&&q(Dt,{x:Al,y:Rl,color:P.blue,children:[Tl,"°"]})]})},Rn=({start:[t,e],vertex:[r,n],end:[a,i],className:s})=>d(ma,{children:d("path",{d:`M ${t} ${e} L ${a} ${i} M ${a} ${i} L ${r} ${n}`,strokeWidth:.02,fill:"none",className:s})}),xo=({arc:t,className:e})=>d(ma,{children:d("path",{d:t,strokeWidth:.02,fill:"none",className:e})}),am=t=>Math.abs(t-Math.PI/2)<.01,jo=t=>Math.round(t)===90,Wo=(t,e,r,n)=>{const a=Ke(t,e,r);let i=0;return n.forEach(s=>Oy([e,a],s)&&i++),!im(i)},im=t=>t%2===0;function sm(t,e,r,n,a,i){const[s,o]=r,[l,u]=t,[y,m]=e,h=[l-s,u-o],p=[y-s,m-o],c=Math.atan2(h[1],h[0]),b=Math.atan2(p[1],p[0]);let T=(c+b)/2;const R=Math.abs(c-b);a?(R<=Math.PI&&n||b>c)&&(T+=Math.PI):R>Math.PI&&(T-=Math.PI);const A=[Math.cos(T),Math.sin(T)],O=Math.sqrt(A[0]**2+A[1]**2),f=[A[0]/O,A[1]/O],v=Math.sqrt(f[0]**2+f[1]**2),w=i*1.75;let C=w/v;v>=w&&(C=1);const W=[f[0]*C,f[1]*C];return x.add(W,r)}Ro.__docgenInfo={description:"",methods:[],displayName:"PolygonAngle",props:{centerPoint:{required:!0,tsType:{name:"vec.Vector2"},description:""},endPoints:{required:!0,tsType:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}]},description:""},polygonLines:{required:!0,tsType:{name:"unknown"},description:""},range:{required:!0,tsType:{name:"tuple",raw:"[Interval, Interval]",elements:[{name:"Interval"},{name:"Interval"}]},description:""},showAngles:{required:!0,tsType:{name:"boolean"},description:""},snapTo:{required:!0,tsType:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}]},description:""}}};Oo.__docgenInfo={description:"",methods:[],displayName:"Angle",props:{vertex:{required:!0,tsType:{name:"vec.Vector2"},description:""},coords:{required:!0,tsType:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}]},description:""},showAngles:{required:!0,tsType:{name:"boolean"},description:""},allowReflexAngles:{required:!0,tsType:{name:"boolean"},description:""},snapDegrees:{required:!0,tsType:{name:"number"},description:""},range:{required:!0,tsType:{name:"tuple",raw:"[Interval, Interval]",elements:[{name:"Interval"},{name:"Interval"}]},description:""}}};const we=t=>{const{snapStep:e}=ee(),r=k.useRef(null),{point:n,onMove:a=()=>{},onFocusChange:i=()=>{},onClick:s=()=>{},cursor:o,color:l=P.blue,constrain:u=m=>te(e,m)}=t,{dragging:y}=Qe({gestureTarget:r,point:n,onMove:a,constrainKeyboardMovement:u});return d(ya,{ref:r,point:n,color:l,dragging:y,focusBehavior:{type:"uncontrolled",tabIndex:0,onFocusChange:i},onClick:()=>{var m;s&&s(),(m=r.current)==null||m.focus()},cursor:o})};we.__docgenInfo={description:"",methods:[],displayName:"MovablePoint",props:{point:{required:!0,tsType:{name:"vec.Vector2"},description:""},onMove:{required:!1,tsType:{name:"signature",type:"function",raw:"(newPoint: vec.Vector2) => unknown",signature:{arguments:[{type:{name:"vec.Vector2"},name:"newPoint"}],return:{name:"unknown"}}},description:""},onClick:{required:!1,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},color:{required:!1,tsType:{name:"string"},description:""},cursor:{required:!1,tsType:{name:"union",raw:"CSSCursor | undefined",elements:[{name:"union",raw:'"move" | "ew-resize"',elements:[{name:"literal",value:'"move"'},{name:"literal",value:'"ew-resize"'}]},{name:"undefined"}]},description:""},constrain:{required:!1,tsType:{name:"union",raw:`| ((point: vec.Vector2) => vec.Vector2) +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};const ma=({children:t})=>d("g",{style:{transform:"var(--mafs-view-transform) var(--mafs-user-transform)"},children:t});ma.__docgenInfo={description:"Wrapper with Mafs transform styles for SVG elements.\nScales and translates the SVG element to match the Mafs view.\nUse if you do not need/want to use the hook in `use-transform.ts`.",methods:[],displayName:"MafsCssTransformWrapper"};const Ut=({children:t,...e})=>d(fu,{size:16,svgTextProps:{filter:"url(#background)",fontWeight:"bold"},...e,children:t}),Wo=()=>d("defs",{children:f("filter",{id:"background",x:"-5%",width:"110%",y:"0%",height:"100%",children:[d("feFlood",{floodColor:"#FFF",floodOpacity:"0.64"}),d("feComposite",{operator:"over",in:"SourceGraphic"})]})});Ut.__docgenInfo={description:"",methods:[],displayName:"TextLabel"};Wo.__docgenInfo={description:"",methods:[],displayName:"SvgDefs"};const Co=({centerPoint:t,endPoints:e,range:r,polygonLines:n,showAngles:a,snapTo:i})=>{const[s,o]=t,l=ea([t,...e]),[[u,y],[m,h]]=l?e:e.reverse(),p=.3,c=A.dist(t,e[0]),b=A.dist(t,e[1]),w=A.dist(e[0],e[1]),q=Math.acos((c**2+b**2-w**2)/(2*c*b)),k=o+(y-o)/c*p,T=s+(m-s)/b*p,O=s+(u-s)/c*p,W=o+(h-o)/b*p,[R,E]=A.add(t,A.add(A.sub([O,k],t),A.sub([T,W],t)));if(!a)return qm(q)?d(Rn,{start:[O,k],vertex:[T,W],end:[R,E]}):null;const P=zo([R,E],t,r,n),me=`M ${O} ${k} A ${p} ${p} 0 ${P?1:0} ${P?1:0} ${T} ${W}`;let le=q*(180/Math.PI);P&&(le=360-le);const se=parseFloat(le.toFixed(i==="angles"?0:1)),_e=Number.isInteger(se)?se:"≈ "+se;return f(D,{children:[d("defs",{children:f("filter",{id:"background",x:"-5%",width:"110%",y:"0%",height:"100%",children:[d("feFlood",{floodColor:"#FFF",floodOpacity:"0.5"}),d("feComposite",{operator:"over",in:"SourceGraphic"})]})}),!P&&Eo(q)?d(Rn,{start:[O,k],vertex:[T,W],end:[R,E]}):d(No,{arc:me}),f(Ut,{x:R,y:E,attach:E-o>0?"s":"n",attachDistance:Math.abs(E-o)<.2||A.dist([R,E],t)<.3?20:10,children:[_e,"°"]})]})},Io=({vertex:t,coords:e,showAngles:r,allowReflexAngles:n,range:a})=>{const o=ea([...e,t])&&!n?e:e.reverse(),l=Ae(o[0],t),u=Ae(o[1],t),y=(l+360-u)%360,m=y>180,[h,p]=t,[c,b]=o,[w,q]=c,[k,T]=b,O=A.dist(t,c),W=A.dist(t,b),R=2,E=p+(q-p)/O*R,P=h+(k-h)/W*R,X=h+(w-h)/O*R,Oe=p+(T-p)/W*R,[me,le]=A.add(t,A.add(A.sub([X,E],t),A.sub([P,Oe],t))),se=zo([me,le],t,a,[[t,c],[t,b]]),bl=`M ${X} ${E} A ${R} ${R} 0 ${se||m?1:0} ${se&&m?1:0} ${P} ${Oe}`,vl=parseFloat(y.toFixed(0)),[fl,wl]=Am(c,b,t,m,n,R);return f(D,{children:[d("defs",{children:f("filter",{id:"background",x:"-5%",width:"110%",y:"0%",height:"100%",children:[d("feFlood",{floodColor:"#FFF",floodOpacity:"0.5"}),d("feComposite",{operator:"over",in:"SourceGraphic"})]})}),Eo(y)?d(Rn,{start:[X,E],vertex:[P,Oe],end:[me,le],className:"arc-right-angle"}):d(No,{arc:bl,className:"angle-arc"}),r&&f(Ut,{x:fl,y:wl,color:N.blue,children:[vl,"°"]})]})},Rn=({start:[t,e],vertex:[r,n],end:[a,i],className:s})=>d(ma,{children:d("path",{d:`M ${t} ${e} L ${a} ${i} M ${a} ${i} L ${r} ${n}`,strokeWidth:.02,fill:"none",className:s})}),No=({arc:t,className:e})=>d(ma,{children:d("path",{d:t,strokeWidth:.02,fill:"none",className:e})}),qm=t=>Math.abs(t-Math.PI/2)<.01,Eo=t=>Math.round(t)===90,zo=(t,e,r,n)=>{const a=He(t,e,r);let i=0;return n.forEach(s=>$y([e,a],s)&&i++),!Tm(i)},Tm=t=>t%2===0;function Am(t,e,r,n,a,i){const[s,o]=r,[l,u]=t,[y,m]=e,h=[l-s,u-o],p=[y-s,m-o],c=Math.atan2(h[1],h[0]),b=Math.atan2(p[1],p[0]);let w=(c+b)/2;const q=Math.abs(c-b);a?(q<=Math.PI&&n||b>c)&&(w+=Math.PI):q>Math.PI&&(w-=Math.PI);const k=[Math.cos(w),Math.sin(w)],T=Math.sqrt(k[0]**2+k[1]**2),O=[k[0]/T,k[1]/T],W=Math.sqrt(O[0]**2+O[1]**2),R=i*1.75;let E=R/W;W>=R&&(E=1);const P=[O[0]*E,O[1]*E];return A.add(P,r)}Co.__docgenInfo={description:"",methods:[],displayName:"PolygonAngle",props:{centerPoint:{required:!0,tsType:{name:"vec.Vector2"},description:""},endPoints:{required:!0,tsType:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}]},description:""},polygonLines:{required:!0,tsType:{name:"unknown"},description:""},range:{required:!0,tsType:{name:"tuple",raw:"[Interval, Interval]",elements:[{name:"Interval"},{name:"Interval"}]},description:""},showAngles:{required:!0,tsType:{name:"boolean"},description:""},snapTo:{required:!0,tsType:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}]},description:""}}};Io.__docgenInfo={description:"",methods:[],displayName:"Angle",props:{vertex:{required:!0,tsType:{name:"vec.Vector2"},description:""},coords:{required:!0,tsType:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}]},description:""},showAngles:{required:!0,tsType:{name:"boolean"},description:""},allowReflexAngles:{required:!0,tsType:{name:"boolean"},description:""},snapDegrees:{required:!0,tsType:{name:"number"},description:""},range:{required:!0,tsType:{name:"tuple",raw:"[Interval, Interval]",elements:[{name:"Interval"},{name:"Interval"}]},description:""}}};const ce=t=>{const{snapStep:e}=Z(),r=v.useRef(null),{point:n,onMove:a=()=>{},onFocusChange:i=()=>{},onClick:s=()=>{},cursor:o,color:l=N.blue,constrain:u=m=>ee(e,m)}=t,{dragging:y}=Xe({gestureTarget:r,point:n,onMove:a,constrainKeyboardMovement:u});return d(ya,{ref:r,point:n,color:l,dragging:y,focusBehavior:{type:"uncontrolled",tabIndex:0,onFocusChange:i},onClick:()=>{var m;s&&s(),(m=r.current)==null||m.focus()},cursor:o})};ce.__docgenInfo={description:"",methods:[],displayName:"MovablePoint",props:{point:{required:!0,tsType:{name:"vec.Vector2"},description:""},onMove:{required:!1,tsType:{name:"signature",type:"function",raw:"(newPoint: vec.Vector2) => unknown",signature:{arguments:[{type:{name:"vec.Vector2"},name:"newPoint"}],return:{name:"unknown"}}},description:""},onClick:{required:!1,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},color:{required:!1,tsType:{name:"string"},description:""},cursor:{required:!1,tsType:{name:"union",raw:"CSSCursor | undefined",elements:[{name:"union",raw:'"move" | "ew-resize"',elements:[{name:"literal",value:'"move"'},{name:"literal",value:'"ew-resize"'}]},{name:"undefined"}]},description:""},constrain:{required:!1,tsType:{name:"union",raw:`| ((point: vec.Vector2) => vec.Vector2) // Alternatively, the movement can be constrained to specific // pre-determined points based on which key is pressed. | { @@ -44384,7 +59643,7 @@ the available choices.`}]}}],raw:`Readonly<{ right: vec.Vector2; up: vec.Vector2; down: vec.Vector2; -}`,signature:{properties:[{key:"left",value:{name:"vec.Vector2",required:!0}},{key:"right",value:{name:"vec.Vector2",required:!0}},{key:"up",value:{name:"vec.Vector2",required:!0}},{key:"down",value:{name:"vec.Vector2",required:!0}}]}}]},description:""},onFocusChange:{required:!1,tsType:{name:"signature",type:"function",raw:"(event: React.FocusEvent, isFocused: boolean) => unknown",signature:{arguments:[{type:{name:"ReactFocusEvent",raw:"React.FocusEvent"},name:"event"},{type:{name:"boolean"},name:"isFocused"}],return:{name:"unknown"}}},description:""}}};const Co=t=>{const[e,r]=k.useState(!1),[n,a]=k.useState(!1),{dispatch:i}=t,{coords:s,showAngles:o,showSides:l,range:u,snapStep:y,snapTo:m="grid"}=t.graphState,{disableKeyboardInteraction:h}=ee(),p=s??[[0,0]],c=k.useRef(null),b=p[0],T=["angles","sides"].includes(m)?f=>f:f=>te(y,f),{dragging:R}=Qe({gestureTarget:c,point:b,onMove:f=>{const v=x.sub(f,b);i(S.polygon.moveAll(v))},constrainKeyboardMovement:T}),A=k.useRef(0),O=om(p);return q(U,{children:[d(tn,{points:[...p],color:"var(--movable-line-stroke-color)",svgPolygonProps:{strokeWidth:n?"var(--movable-line-stroke-weight-active)":"var(--movable-line-stroke-weight)",style:{fill:"transparent"}}}),p.map((f,v)=>{const w=p.at(v-1),C=p[(v+1)%p.length];return!w||!C?null:d(Ro,{centerPoint:f,endPoints:[w,C],range:u,polygonLines:O,showAngles:!!o,snapTo:m},"angle-"+v)}),l&&O.map(([f,v],w)=>{const[C,W]=x.midpoint(f,v),F=parseFloat(x.dist(f,v).toFixed(m==="sides"?0:1));return q(Dt,{x:C,y:W,children:[!Number.isInteger(F)&&"≈ ",F]},"side-"+w)}),d(tn,{points:[...p],color:"transparent",svgPolygonProps:{ref:c,tabIndex:h?-1:0,strokeWidth:ua,style:{cursor:R?"grabbing":"grab",fill:e?"var(--mafs-blue)":"transparent"},onMouseEnter:()=>r(!0),onMouseLeave:()=>r(!1),onKeyDownCapture:()=>{a(Xt(c.current))},onFocus:()=>a(Xt(c.current)),onBlur:()=>a(Xt(c.current)),className:"movable-polygon"}}),p.map((f,v)=>d(we,{constrain:T,point:f,onMove:w=>{const C=Date.now(),F=1e3/40;C-A.current>F&&(i(S.polygon.movePoint(v,w)),A.current=C)}},"point-"+v))]})};function om(t){return t.map((e,r)=>{const n=t[(r+1)%t.length];return[e,n]})}const Xt=t=>{const e=r=>(t==null?void 0:t.matches(r))??!1;try{return e(":focus-visible")}catch{return e(":focus")}};Co.__docgenInfo={description:"",methods:[],displayName:"PolygonGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize +}`,signature:{properties:[{key:"left",value:{name:"vec.Vector2",required:!0}},{key:"right",value:{name:"vec.Vector2",required:!0}},{key:"up",value:{name:"vec.Vector2",required:!0}},{key:"down",value:{name:"vec.Vector2",required:!0}}]}}]},description:""},onFocusChange:{required:!1,tsType:{name:"signature",type:"function",raw:"(event: React.FocusEvent, isFocused: boolean) => unknown",signature:{arguments:[{type:{name:"ReactFocusEvent",raw:"React.FocusEvent"},name:"event"},{type:{name:"boolean"},name:"isFocused"}],return:{name:"unknown"}}},description:""}}};const Lo=t=>{const[e,r]=v.useState(!1),[n,a]=v.useState(!1),{dispatch:i}=t,{coords:s,showAngles:o,showSides:l,range:u,snapStep:y,snapTo:m="grid"}=t.graphState,{disableKeyboardInteraction:h}=Z(),p=s??[[0,0]],c=v.useRef(null),b=p[0],w=["angles","sides"].includes(m)?O=>O:O=>ee(y,O),{dragging:q}=Xe({gestureTarget:c,point:b,onMove:O=>{const W=A.sub(O,b);i(F.polygon.moveAll(W))},constrainKeyboardMovement:w}),k=v.useRef(0),T=Rm(p);return f(D,{children:[d(Zt,{points:[...p],color:"var(--movable-line-stroke-color)",svgPolygonProps:{strokeWidth:n?"var(--movable-line-stroke-weight-active)":"var(--movable-line-stroke-weight)",style:{fill:"transparent"}}}),p.map((O,W)=>{const R=p.at(W-1),E=p[(W+1)%p.length];return!R||!E?null:d(Co,{centerPoint:O,endPoints:[R,E],range:u,polygonLines:T,showAngles:!!o,snapTo:m},"angle-"+W)}),l&&T.map(([O,W],R)=>{const[E,P]=A.midpoint(O,W),X=parseFloat(A.dist(O,W).toFixed(m==="sides"?0:1));return f(Ut,{x:E,y:P,children:[!Number.isInteger(X)&&"≈ ",X]},"side-"+R)}),d(Zt,{points:[...p],color:"transparent",svgPolygonProps:{ref:c,tabIndex:h?-1:0,strokeWidth:ua,style:{cursor:q?"grabbing":"grab",fill:e?"var(--mafs-blue)":"transparent"},onMouseEnter:()=>r(!0),onMouseLeave:()=>r(!1),onKeyDownCapture:()=>{a(Kt(c.current))},onFocus:()=>a(Kt(c.current)),onBlur:()=>a(Kt(c.current)),className:"movable-polygon"}}),p.map((O,W)=>d(ce,{constrain:w,point:O,onMove:R=>{const E=Date.now(),X=1e3/40;E-k.current>X&&(i(F.polygon.movePoint(W,R)),k.current=E)}},"point-"+W))]})};function Rm(t){return t.map((e,r)=>{const n=t[(r+1)%t.length];return[e,n]})}const Kt=t=>{const e=r=>(t==null?void 0:t.matches(r))??!1;try{return e(":focus-visible")}catch{return e(":focus")}};Lo.__docgenInfo={description:"",methods:[],displayName:"PolygonGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize | MovePointInFigure | MoveLine | MoveAll @@ -44400,7 +59659,7 @@ the available choices.`}]}}],raw:`Readonly<{ | DeleteIntent | ClickPoint | ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};function lm(t,e){if(!t.hasBeenInteractedWith)return{...e};if(e.type==="linear-system"&&t.type==="linear-system")return{...e,coords:t.coords};if(t.type==="segment"&&e.type==="segment")return{...e,coords:t.coords};if(t.type==="linear"&&e.type==="linear")return{...e,coords:t.coords};if(t.type==="ray"&&e.type==="ray")return{...e,coords:t.coords};if(t.type==="polygon"&&e.type==="polygon")return{...e,coords:t.coords};if(t.type==="point"&&e.type==="point")return{...e,coords:t.coords};if(t.type==="circle"&&e.type==="circle")return{...e,center:t.center,radius:ga(t)};if(t.type==="quadratic"&&e.type==="quadratic")return{...e,coords:t.coords};if(t.type==="sinusoid"&&e.type==="sinusoid")return{...e,coords:t.coords};if(t.type==="angle"&&e.type==="angle"){const a=ta([t.coords[0],t.coords[2],t.coords[1]])&&!t.allowReflexAngles?t.coords.slice().reverse():t.coords;return{...e,coords:a,allowReflexAngles:t.allowReflexAngles}}if(t.type==="none"&&e.type==="none")return{type:"none"};throw new Error("Mafs is not yet implemented for graph type: "+e.type)}function ga(t){const[e,r]=t.center,[n,a]=t.radiusPoint;return Math.sqrt(Math.pow(n-e,2)+Math.pow(a-r,2))}function Io(t){const{dispatch:e,graphState:r}=t,{center:n,radiusPoint:a}=r;return q(U,{children:[d(um,{center:n,radius:ga(r),onMove:i=>e(S.circle.moveCenter(i))}),d(we,{point:a,cursor:"ew-resize",onMove:i=>{e(S.circle.moveRadiusPoint(i))}})]})}function um(t){const{center:e,radius:r,onMove:n}=t,{snapStep:a,disableKeyboardInteraction:i}=ee(),s=k.useRef(null),{dragging:o}=Qe({gestureTarget:s,point:e,onMove:n,constrainKeyboardMovement:y=>te(a,y)}),[l]=J(e),[u]=Ms([r,r]);return q("g",{ref:s,tabIndex:i?-1:0,className:`movable-circle ${o?"movable-circle--dragging":""}`,children:[d("ellipse",{className:"focus-ring",cx:l[N],cy:l[L],rx:u[N]+3,ry:u[L]+3}),d("ellipse",{className:"circle",cx:l[N],cy:l[L],rx:u[N],ry:u[L]}),d(ym,{center:e})]})}const Hr=[24,14],dm=mm([-4.4,0,4.4],[-2.1,2.1]);function ym(t){const{center:e}=t,r=Math.min(...Hr)/2,[n]=J(e),a=x.sub(n,x.scale(Hr,.5));return q(U,{children:[d("rect",{className:"movable-circle-handle",x:a[N],y:a[L],width:Hr[N],height:Hr[L],rx:r,ry:r}),dm.map(i=>{const[s,o]=x.add(i,n);return d("circle",{className:"movable-circle-handle-dot",cx:s,cy:o},`circle-${s}-${o}`)})]})}function mm(t,e){const r=[];for(const n of t)for(const a of e)r.push([n,a]);return r}Io.__docgenInfo={description:"",methods:[],displayName:"CircleGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};function Om(t,e){if(!t.hasBeenInteractedWith)return{...e};if(e.type==="linear-system"&&t.type==="linear-system")return{...e,coords:t.coords};if(t.type==="segment"&&e.type==="segment")return{...e,coords:t.coords};if(t.type==="linear"&&e.type==="linear")return{...e,coords:t.coords};if(t.type==="ray"&&e.type==="ray")return{...e,coords:t.coords};if(t.type==="polygon"&&e.type==="polygon")return{...e,coords:t.coords};if(t.type==="point"&&e.type==="point")return{...e,coords:t.coords};if(t.type==="circle"&&e.type==="circle")return{...e,center:t.center,radius:ga(t)};if(t.type==="quadratic"&&e.type==="quadratic")return{...e,coords:t.coords};if(t.type==="sinusoid"&&e.type==="sinusoid")return{...e,coords:t.coords};if(t.type==="angle"&&e.type==="angle"){const a=ea([t.coords[0],t.coords[2],t.coords[1]])&&!t.allowReflexAngles?t.coords.slice().reverse():t.coords;return{...e,coords:a,allowReflexAngles:t.allowReflexAngles}}if(t.type==="none"&&e.type==="none")return{type:"none"};throw new Error("Mafs is not yet implemented for graph type: "+e.type)}function ga(t){const[e,r]=t.center,[n,a]=t.radiusPoint;return Math.sqrt(Math.pow(n-e,2)+Math.pow(a-r,2))}function _o(t){const{dispatch:e,graphState:r}=t,{center:n,radiusPoint:a}=r;return f(D,{children:[d(xm,{center:n,radius:ga(r),onMove:i=>e(F.circle.moveCenter(i))}),d(ce,{point:a,cursor:"ew-resize",onMove:i=>{e(F.circle.moveRadiusPoint(i))}})]})}function xm(t){const{center:e,radius:r,onMove:n}=t,{snapStep:a,disableKeyboardInteraction:i}=Z(),s=v.useRef(null),{dragging:o}=Xe({gestureTarget:s,point:e,onMove:n,constrainKeyboardMovement:y=>ee(a,y)}),[l]=Q(e),[u]=Hs([r,r]);return f("g",{ref:s,tabIndex:i?-1:0,className:`movable-circle ${o?"movable-circle--dragging":""}`,children:[d("ellipse",{className:"focus-ring",cx:l[C],cy:l[L],rx:u[C]+3,ry:u[L]+3}),d("ellipse",{className:"circle",cx:l[C],cy:l[L],rx:u[C],ry:u[L]}),d(Wm,{center:e})]})}const $r=[24,14],jm=Cm([-4.4,0,4.4],[-2.1,2.1]);function Wm(t){const{center:e}=t,r=Math.min(...$r)/2,[n]=Q(e),a=A.sub(n,A.scale($r,.5));return f(D,{children:[d("rect",{className:"movable-circle-handle",x:a[C],y:a[L],width:$r[C],height:$r[L],rx:r,ry:r}),jm.map(i=>{const[s,o]=A.add(i,n);return d("circle",{className:"movable-circle-handle-dot",cx:s,cy:o},`circle-${s}-${o}`)})]})}function Cm(t,e){const r=[];for(const n of t)for(const a of e)r.push([n,a]);return r}_o.__docgenInfo={description:"",methods:[],displayName:"CircleGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize | MovePointInFigure | MoveLine | MoveAll @@ -44416,7 +59675,7 @@ the available choices.`}]}}],raw:`Readonly<{ | DeleteIntent | ClickPoint | ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};function No(t){const{dispatch:e,graphState:r}=t,{coords:n}=r,a=k.useRef([0,0,0]),i=Eo(n);i!==void 0&&(a.current=i);const[s,o,l]=a.current,u=y=>(s*y+o)*y+l;return q(U,{children:[d(st.OfX,{y:u,color:P.blue}),n.map((y,m)=>d(we,{point:y,onMove:h=>e(S.quadratic.movePoint(m,h))},"point-"+m))]})}const Eo=t=>{const e=t[0],r=t[1],n=t[2],a=(e[0]-r[0])*(e[0]-n[0])*(r[0]-n[0]);if(a===0)return;const i=(n[0]*(r[1]-e[1])+r[0]*(e[1]-n[1])+e[0]*(n[1]-r[1]))/a,s=(n[0]*n[0]*(e[1]-r[1])+r[0]*r[0]*(n[1]-e[1])+e[0]*e[0]*(r[1]-n[1]))/a,o=(r[0]*n[0]*(r[0]-n[0])*e[1]+n[0]*e[0]*(n[0]-e[0])*r[1]+e[0]*r[0]*(e[0]-r[0])*n[1])/a;return[i,s,o]};No.__docgenInfo={description:"",methods:[],displayName:"QuadraticGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};function Po(t){const{dispatch:e,graphState:r}=t,{coords:n}=r,a=v.useRef([0,0,0]),i=Fo(n);i!==void 0&&(a.current=i);const[s,o,l]=a.current,u=y=>(s*y+o)*y+l;return f(D,{children:[d(at.OfX,{y:u,color:N.blue}),n.map((y,m)=>d(ce,{point:y,onMove:h=>e(F.quadratic.movePoint(m,h))},"point-"+m))]})}const Fo=t=>{const e=t[0],r=t[1],n=t[2],a=(e[0]-r[0])*(e[0]-n[0])*(r[0]-n[0]);if(a===0)return;const i=(n[0]*(r[1]-e[1])+r[0]*(e[1]-n[1])+e[0]*(n[1]-r[1]))/a,s=(n[0]*n[0]*(e[1]-r[1])+r[0]*r[0]*(n[1]-e[1])+e[0]*e[0]*(r[1]-n[1]))/a,o=(r[0]*n[0]*(r[0]-n[0])*e[1]+n[0]*e[0]*(n[0]-e[0])*r[1]+e[0]*r[0]*(e[0]-r[0])*n[1])/a;return[i,s,o]};Po.__docgenInfo={description:"",methods:[],displayName:"QuadraticGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize | MovePointInFigure | MoveLine | MoveAll @@ -44432,7 +59691,7 @@ the available choices.`}]}}],raw:`Readonly<{ | DeleteIntent | ClickPoint | ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};function Po(t){const{dispatch:e,graphState:r}=t,{coords:n}=r,a=k.useRef({amplitude:1,angularFrequency:1,phase:1,verticalOffset:0}),i=hm(n);return i!==void 0&&(a.current=i),q(U,{children:[d(st.OfX,{y:s=>gm(s,a.current),color:P.blue}),n.map((s,o)=>d(we,{point:s,onMove:l=>e(S.sinusoid.movePoint(o,l))},"point-"+o))]})}const gm=function(t,e){const{amplitude:r,angularFrequency:n,phase:a,verticalOffset:i}=e;return r*Math.sin(n*t-a)+i},hm=t=>{const e=t[0],r=t[1];if(r[N]===e[N])return;const n=r[L]-e[L],a=Math.PI/(2*(r[N]-e[N])),i=e[N]*a,s=e[L];return{amplitude:n,angularFrequency:a,phase:i,verticalOffset:s}};Po.__docgenInfo={description:"",methods:[],displayName:"SinusoidGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};function So(t){const{dispatch:e,graphState:r}=t,{coords:n}=r,a=v.useRef({amplitude:1,angularFrequency:1,phase:1,verticalOffset:0}),i=Nm(n);return i!==void 0&&(a.current=i),f(D,{children:[d(at.OfX,{y:s=>Im(s,a.current),color:N.blue}),n.map((s,o)=>d(ce,{point:s,onMove:l=>e(F.sinusoid.movePoint(o,l))},"point-"+o))]})}const Im=function(t,e){const{amplitude:r,angularFrequency:n,phase:a,verticalOffset:i}=e;return r*Math.sin(n*t-a)+i},Nm=t=>{const e=t[0],r=t[1];if(r[C]===e[C])return;const n=r[L]-e[L],a=Math.PI/(2*(r[C]-e[C])),i=e[C]*a,s=e[L];return{amplitude:n,angularFrequency:a,phase:i,verticalOffset:s}};So.__docgenInfo={description:"",methods:[],displayName:"SinusoidGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize | MovePointInFigure | MoveLine | MoveAll @@ -44448,7 +59707,7 @@ the available choices.`}]}}],raw:`Readonly<{ | DeleteIntent | ClickPoint | ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};function zo(t){const{dispatch:e,graphState:r}=t,{graphDimensionsInPixels:n}=ee(),{coords:a,showAngles:i,range:s,allowReflexAngles:o,snapDegrees:l}=r,u=[a[0],a[2]],y=a[1],m=[[y,u[0]],[y,u[1]]],p=[J(y,u[0]),J(y,u[1])].map(([b,T],R)=>{const A=fo(s,n),O=Ke(m[R][0],m[R][1],A);return q("g",{children:[d(De,{start:b,end:T,style:{stroke:"var(--movable-line-stroke-color)",strokeWidth:"var(--movable-line-stroke-weight)"}}),d(mr,{tail:m[R][1],tip:O,color:"var(--movable-line-stroke-color)"})]},`line-${R}`)});return q(U,{children:[p,d(Oo,{...{vertex:y,coords:u,allowReflexAngles:o||!1,snapDegrees:l||1,range:s,showAngles:i||!1}}),d(we,{point:a[1],constrain:b=>b,onMove:b=>e(S.angle.movePoint(1,b))}),d(we,{point:a[0],constrain:Ii(a[0],a[1],l||1),onMove:b=>e(S.angle.movePoint(0,b))}),d(we,{point:a[2],constrain:Ii(a[2],a[1],l||1),onMove:b=>e(S.angle.movePoint(2,b))})]})}const pm=[1,0],cm=[-1,0],bm=[0,1],vm=[0,-1];function Ii(t,e,r){const n=Pr(x.sub(t,e)),a=[t,x.add(t,cm)],i=[t,x.add(t,pm)],s=[t,x.add(t,bm)],o=[t,x.add(t,vm)],l=n+r,u=n-r,y=[e,x.add(e,zr(1,l))],m=[e,x.add(e,zr(1,u))],h=Ee(a,y)??Ee(a,m),p=Ee(i,y)??Ee(i,m),c=Ee(s,y)??Ee(s,m),b=Ee(o,y)??Ee(o,m);return{up:c??t,down:b??t,left:h??t,right:p??t}}zo.__docgenInfo={description:"",methods:[],displayName:"AngleGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};function Mo(t){const{dispatch:e,graphState:r}=t,{graphDimensionsInPixels:n}=Z(),{coords:a,showAngles:i,range:s,allowReflexAngles:o,snapDegrees:l}=r,u=[a[0],a[2]],y=a[1],m=[[y,u[0]],[y,u[1]]],p=[Q(y,u[0]),Q(y,u[1])].map(([b,w],q)=>{const k=Ao(s,n),T=He(m[q][0],m[q][1],k);return f("g",{children:[d(Me,{start:b,end:w,style:{stroke:"var(--movable-line-stroke-color)",strokeWidth:"var(--movable-line-stroke-weight)"}}),d(dr,{tail:m[q][1],tip:T,color:"var(--movable-line-stroke-color)"})]},`line-${q}`)});return f(D,{children:[p,d(Io,{...{vertex:y,coords:u,allowReflexAngles:o||!1,snapDegrees:l||1,range:s,showAngles:i||!1}}),d(ce,{point:a[1],constrain:b=>b,onMove:b=>e(F.angle.movePoint(1,b))}),d(ce,{point:a[0],constrain:Ni(a[0],a[1],l||1),onMove:b=>e(F.angle.movePoint(0,b))}),d(ce,{point:a[2],constrain:Ni(a[2],a[1],l||1),onMove:b=>e(F.angle.movePoint(2,b))})]})}const Em=[1,0],zm=[-1,0],Lm=[0,1],_m=[0,-1];function Ni(t,e,r){const n=Er(A.sub(t,e)),a=[t,A.add(t,zm)],i=[t,A.add(t,Em)],s=[t,A.add(t,Lm)],o=[t,A.add(t,_m)],l=n+r,u=n-r,y=[e,A.add(e,zr(1,l))],m=[e,A.add(e,zr(1,u))],h=Ce(a,y)??Ce(a,m),p=Ce(i,y)??Ce(i,m),c=Ce(s,y)??Ce(s,m),b=Ce(o,y)??Ce(o,m);return{up:c??t,down:b??t,left:h??t,right:p??t}}Mo.__docgenInfo={description:"",methods:[],displayName:"AngleGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize | MovePointInFigure | MoveLine | MoveAll @@ -44464,7 +59723,7 @@ the available choices.`}]}}],raw:`Readonly<{ | DeleteIntent | ClickPoint | ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};function Lo(t){const{dispatch:e}=t;return d(U,{children:t.graphState.coords.map((r,n)=>d(we,{point:r,onMove:a=>e(S.pointGraph.movePoint(n,a))},n))})}function _o(t){const{dispatch:e}=t,r=ee(),{range:[[n,a],[i,s]]}=r,o=a-n,l=s-i,[[u,y]]=Ms([o,l]),[[m,h]]=J([n,s]);return q(U,{children:[d("rect",{style:{fill:"rgba(0,0,0,0)",cursor:"crosshair"},width:u,height:y,x:m,y:h,onClick:p=>{const c=p.currentTarget.getBoundingClientRect(),b=p.clientX-c.x,T=p.clientY-c.y,R=Cy([[b,T]],r);e(S.pointGraph.addPoint(R[0]))}}),t.graphState.coords.map((p,c)=>d(we,{point:p,onMove:b=>e(S.pointGraph.movePoint(c,b)),onFocusChange:(b,T)=>{var R;if(T)e(S.pointGraph.focusPoint(c));else{if(((R=b.relatedTarget)==null?void 0:R.id)===Mo)return;e(S.pointGraph.blurPoint())}},onClick:()=>{e(S.pointGraph.clickPoint(c))}},c))]})}function Fo(t){return t.graphState.numPoints==="unlimited"?_o(t):Lo(t)}Lo.__docgenInfo={description:"",methods:[],displayName:"LimitedPointGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};function Uo(t){const{dispatch:e}=t;return d(D,{children:t.graphState.coords.map((r,n)=>d(ce,{point:r,onMove:a=>e(F.pointGraph.movePoint(n,a))},n))})}function Do(t){const{dispatch:e}=t,r=Z(),{range:[[n,a],[i,s]]}=r,o=a-n,l=s-i,[[u,y]]=Hs([o,l]),[[m,h]]=Q([n,s]);return f(D,{children:[d("rect",{style:{fill:"rgba(0,0,0,0)",cursor:"crosshair"},width:u,height:y,x:m,y:h,onClick:p=>{const c=p.currentTarget.getBoundingClientRect(),b=p.clientX-c.x,w=p.clientY-c.y,q=Ky([[b,w]],r);e(F.pointGraph.addPoint(q[0]))}}),t.graphState.coords.map((p,c)=>d(ce,{point:p,onMove:b=>e(F.pointGraph.movePoint(c,b)),onFocusChange:(b,w)=>{var q;if(w)e(F.pointGraph.focusPoint(c));else{if(((q=b.relatedTarget)==null?void 0:q.id)===Ho)return;e(F.pointGraph.blurPoint())}},onClick:()=>{e(F.pointGraph.clickPoint(c))}},c))]})}function Vo(t){return t.graphState.numPoints==="unlimited"?Do(t):Uo(t)}Uo.__docgenInfo={description:"",methods:[],displayName:"LimitedPointGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize | MovePointInFigure | MoveLine | MoveAll @@ -44480,7 +59739,7 @@ the available choices.`}]}}],raw:`Readonly<{ | DeleteIntent | ClickPoint | ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};_o.__docgenInfo={description:"",methods:[],displayName:"UnlimitedPointGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};Do.__docgenInfo={description:"",methods:[],displayName:"UnlimitedPointGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize | MovePointInFigure | MoveLine | MoveAll @@ -44496,7 +59755,7 @@ the available choices.`}]}}],raw:`Readonly<{ | DeleteIntent | ClickPoint | ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};Fo.__docgenInfo={description:"",methods:[],displayName:"PointGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};Vo.__docgenInfo={description:"",methods:[],displayName:"PointGraph",props:{graphState:{required:!0,tsType:{name:"T"},description:""},dispatch:{required:!0,tsType:{name:"signature",type:"function",raw:"(action: InteractiveGraphAction) => unknown",signature:{arguments:[{type:{name:"union",raw:`| Reinitialize | MovePointInFigure | MoveLine | MoveAll @@ -44512,7 +59771,7 @@ the available choices.`}]}}],raw:`Readonly<{ | DeleteIntent | ClickPoint | ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};const fm="https://ka-perseus-graphie.s3.amazonaws.com/e9d032f2ab8b95979f674fbfa67056442ba1ff6a.png",Gr=[-180,-170],On=[-176,-15];function So(){const{range:t,snapStep:e}=ee(),[[r,n],[a,i]]=t,s=[Ri(r,n,.5),Ri(a,i,.25)],[o,l]=k.useState(s),[u,y]=k.useState(On),m=k.useRef(null);Qe({gestureTarget:m,onMove:l,point:o,constrainKeyboardMovement:T=>Ze({snapStep:e,range:t,point:T})});const h=k.useRef(null);Tm({gestureTarget:h,onMove:y,point:u,constrain:qm});const[p]=J(o),c=x.add(p,Gr),b=Pr(u)-Pr(On);return q("g",{ref:m,transform:`translate(${c[N]}, ${c[L]}), rotate(${b})`,style:{transformOrigin:`${-Gr[N]}px ${-Gr[L]}px`},children:[d("image",{href:fm}),d("g",{transform:`translate(5, ${-Gr[1]})`,ref:h,children:d(wm,{})})]})}function wm(){const r=xy(10),n=175*(1-Math.cos(r)),a=175*-Math.sin(r),i=Tn().move(0,0).circularArc(175,n,a,{sweep:!0}).build(),s=Tn().move(-8,0).line(0,10).line(8,0).build(),o=ua/2;return q("g",{className:"protractor-rotation-handle",children:[d("path",{className:"protractor-rotation-handle-arrow-arc",d:i}),d("path",{className:"protractor-rotation-handle-arrowhead",d:s}),d("path",{className:"protractor-rotation-handle-arrowhead",d:s,transform:`translate(${n}, ${a}), rotate(190)`}),d("ellipse",{cx:"0px",cy:"-15px",rx:o,ry:o,fill:"none"})]})}const km=x.mag(On);function qm(t){return x.withMag(t,km)}function Tm(t){const{gestureTarget:e,onMove:r,point:n,constrain:a=s=>s}=t,i=k.useRef([0,0]);ps(s=>{const{event:o,first:l,movement:u}=s;o==null||o.stopPropagation(),l&&(i.current=n),x.mag(u)!==0&&(r==null||r(a(x.add(i.current,u))))},{target:e,eventOptions:{passive:!1}})}So.__docgenInfo={description:"",methods:[],displayName:"Protractor"};const Mo="perseus_mafs_remove_button",xn=t=>{var A,O;const{state:e,dispatch:r,labels:n,readOnly:a,fullGraphAriaLabel:i,fullGraphAriaDescription:s}=t,[o,l]=t.box,u=t.step,m=`interactive-graph-description-${k.useId()}`,h=k.useRef(null),{viewboxX:p,viewboxY:c}=Wm(e.range,o,l),b=`${p} ${c} ${o} ${l}`,T={width:o,height:l,viewBox:b,preserveAspectRatio:"xMidYMin",x:p,y:c},{strings:R}=ea();return d(_s.Provider,{value:{range:e.range,snapStep:e.snapStep,markings:t.markings,tickStep:u,gridStep:t.gridStep,showTooltips:!!t.showTooltips,graphDimensionsInPixels:t.box,width:o,height:l,labels:n,disableKeyboardInteraction:a||!!t.static},children:q(K,{children:[q(K,{className:"mafs-graph",style:{position:"relative",padding:"25px 25px 0 0",boxSizing:"content-box",marginLeft:"20px",marginBottom:"30px",pointerEvents:t.static?"none":"auto",userSelect:"none",width:o,height:l},onKeyUp:f=>{jm(f,e,r)},"aria-label":i,"aria-describedby":s?m:void 0,ref:h,tabIndex:0,onFocus:f=>{Om(f,e,r)},onBlur:f=>{xm(f,e,r)},children:[s&&d(K,{id:m,tabIndex:-1,style:{width:0,height:0,overflow:"hidden"},children:s}),d(Hs,{box:t.box,backgroundImage:t.backgroundImage}),q(K,{style:{position:"absolute",bottom:0,left:0},children:[t.markings==="graph"&&d(U,{children:d(Ds,{})}),q(Ha,{preserveAspectRatio:!1,viewBox:{x:e.range[N],y:e.range[L],padding:0},pan:!1,zoom:!1,width:o,height:l,children:[d(Ao,{}),d("svg",{...T,children:d(Vs,{gridStep:t.gridStep,range:e.range,containerSizeClass:t.containerSizeClass,markings:t.markings,width:o,height:l})}),t.markings==="graph"&&q(U,{children:[d(Us,{}),d($s,{})]}),d("svg",{...T,children:t.lockedFigures&&d(Zs,{flags:t.flags,lockedFigures:t.lockedFigures,range:e.range})})]}),((O=(A=t.flags)==null?void 0:A.mafs)==null?void 0:O["interactive-graph-locked-features-labels"])&&t.lockedFigures&&d(zy,{flags:t.flags,lockedFigures:t.lockedFigures}),d(K,{style:{position:"absolute"},children:d(Ha,{preserveAspectRatio:!1,viewBox:{x:e.range[N],y:e.range[L],padding:0},pan:!1,zoom:!1,width:o,height:l,children:q("svg",{...T,children:[t.showProtractor&&d(So,{}),Cm({state:e,dispatch:r})]})})})]}),e.type==="point"&&e.showKeyboardInteractionInvitation&&d(K,{style:{textAlign:"center",backgroundColor:"white",border:"1px solid #21242C52",padding:"16px 0",boxShadow:"0px 8px 8px 0px #21242C14",top:"50%",transform:"translateY(-50%)"},children:d(ss,{children:R.graphKeyboardPrompt})})]}),Rm({state:e,dispatch:r,width:o,strings:R})]})})},Am=t=>{const{interactionMode:e,showRemovePointButton:r,focusedPointIndex:n}=t.state,{strings:a}=t,i=r&&n!==null;return q(K,{style:{flexDirection:"row",width:t.width},children:[e==="keyboard"&&d(Xe,{kind:"secondary",style:{width:"100%",marginLeft:"20px"},tabIndex:0,onClick:()=>{t.dispatch(S.pointGraph.addPoint([0,0]))},children:a.addPoint}),e==="mouse"&&d(Xe,{id:Mo,kind:"secondary",color:"destructive",tabIndex:-1,style:{width:"100%",marginLeft:"20px",visibility:i?"visible":"hidden"},onClick:s=>{t.dispatch(S.pointGraph.removePoint(t.state.focusedPointIndex))},children:a.removePoint})]})},Rm=t=>{const{state:e,dispatch:r,width:n,strings:a}=t,{type:i}=e;switch(i){case"point":return e.numPoints==="unlimited"?Am({state:e,dispatch:r,width:n,strings:a}):null;default:return null}};function Om(t,e,r){e.type==="point"&&e.numPoints==="unlimited"&&t.target.classList.contains("mafs-graph")&&e.interactionMode==="mouse"&&r(S.global.changeKeyboardInvitationVisibility(!0))}function xm(t,e,r){e.type==="point"&&e.numPoints==="unlimited"&&r(S.global.changeKeyboardInvitationVisibility(!1))}function jm(t,e,r){e.type==="point"&&e.numPoints==="unlimited"&&(t.key==="Backspace"?(r(S.global.deleteIntent()),document.activeElement.blur()):t.shiftKey&&t.key==="Enter"?r(S.global.changeInteractionMode("keyboard")):e.interactionMode==="keyboard"&&t.key==="a"&&r(S.pointGraph.addPoint([0,0])))}const Ni=t=>{const[e,r]=t;return Math.abs(r-e)},Wm=(t,e,r)=>{let n=0;const a=Ni(t[N]),i=e/a,s=t[N][ke];s>0&&(n=i*Math.abs(s)),s<0&&(n=-i*Math.abs(s));let o=-r;const l=Ni(t[L]),u=r/l,y=t[L][ke];return y>0&&(o=-r-u*Math.abs(y)),y<0&&(o=u*Math.abs(y)-r),{viewboxX:n,viewboxY:o}},Cm=t=>{const{state:e,dispatch:r}=t,{type:n}=e;switch(n){case"angle":return d(zo,{graphState:e,dispatch:r});case"segment":return d(wo,{graphState:e,dispatch:r});case"linear-system":return d(qo,{graphState:e,dispatch:r});case"linear":return d(ko,{graphState:e,dispatch:r});case"ray":return d(To,{graphState:e,dispatch:r});case"polygon":return d(Co,{graphState:e,dispatch:r});case"point":return d(Fo,{graphState:e,dispatch:r});case"circle":return d(Io,{graphState:e,dispatch:r});case"quadratic":return d(No,{graphState:e,dispatch:r});case"sinusoid":return d(Po,{graphState:e,dispatch:r});case"none":return null;default:throw new vr(n)}};xn.__docgenInfo={description:"",methods:[],displayName:"MafsGraph",props:{flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""},box:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},backgroundImage:{required:!1,tsType:{name:'intersection["backgroundImage"]',raw:'InteractiveGraphProps["backgroundImage"]'},description:""},lockedFigures:{required:!1,tsType:{name:'intersection["lockedFigures"]',raw:'InteractiveGraphProps["lockedFigures"]'},description:""},step:{required:!0,tsType:{name:'intersection["step"]',raw:'InteractiveGraphProps["step"]'},description:""},gridStep:{required:!0,tsType:{name:'intersection["gridStep"]',raw:'InteractiveGraphProps["gridStep"]'},description:""},containerSizeClass:{required:!0,tsType:{name:'intersection["containerSizeClass"]',raw:'InteractiveGraphProps["containerSizeClass"]'},description:""},markings:{required:!0,tsType:{name:'intersection["markings"]',raw:'InteractiveGraphProps["markings"]'},description:""},showTooltips:{required:!0,tsType:{name:"Required",elements:[{name:'intersection["showTooltips"]',raw:'InteractiveGraphProps["showTooltips"]'}],raw:'Required'},description:""},showProtractor:{required:!0,tsType:{name:"boolean"},description:""},labels:{required:!0,tsType:{name:'intersection["labels"]',raw:'InteractiveGraphProps["labels"]'},description:""},fullGraphAriaLabel:{required:!1,tsType:{name:'intersection["fullGraphAriaLabel"]',raw:'InteractiveGraphProps["fullGraphAriaLabel"]'},description:""},fullGraphAriaDescription:{required:!1,tsType:{name:'intersection["fullGraphAriaDescription"]',raw:'InteractiveGraphProps["fullGraphAriaDescription"]'},description:""},state:{required:!0,tsType:{name:"union",raw:`| AngleGraphState +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]},name:"action"}],return:{name:"unknown"}}},description:""}}};const Pm="https://ka-perseus-graphie.s3.amazonaws.com/e9d032f2ab8b95979f674fbfa67056442ba1ff6a.png",Hr=[-180,-170],On=[-176,-15];function $o(){const{range:t,snapStep:e}=Z(),[[r,n],[a,i]]=t,s=[Oi(r,n,.5),Oi(a,i,.25)],[o,l]=v.useState(s),[u,y]=v.useState(On),m=v.useRef(null);Xe({gestureTarget:m,onMove:l,point:o,constrainKeyboardMovement:w=>Qe({snapStep:e,range:t,point:w})});const h=v.useRef(null);Um({gestureTarget:h,onMove:y,point:u,constrain:Mm});const[p]=Q(o),c=A.add(p,Hr),b=Er(u)-Er(On);return f("g",{ref:m,transform:`translate(${c[C]}, ${c[L]}), rotate(${b})`,style:{transformOrigin:`${-Hr[C]}px ${-Hr[L]}px`},children:[d("image",{href:Pm}),d("g",{transform:`translate(5, ${-Hr[1]})`,ref:h,children:d(Fm,{})})]})}function Fm(){const r=Hy(10),n=175*(1-Math.cos(r)),a=175*-Math.sin(r),i=Tn().move(0,0).circularArc(175,n,a,{sweep:!0}).build(),s=Tn().move(-8,0).line(0,10).line(8,0).build(),o=ua/2;return f("g",{className:"protractor-rotation-handle",children:[d("path",{className:"protractor-rotation-handle-arrow-arc",d:i}),d("path",{className:"protractor-rotation-handle-arrowhead",d:s}),d("path",{className:"protractor-rotation-handle-arrowhead",d:s,transform:`translate(${n}, ${a}), rotate(190)`}),d("ellipse",{cx:"0px",cy:"-15px",rx:o,ry:o,fill:"none"})]})}const Sm=A.mag(On);function Mm(t){return A.withMag(t,Sm)}function Um(t){const{gestureTarget:e,onMove:r,point:n,constrain:a=s=>s}=t,i=v.useRef([0,0]);ds(s=>{const{event:o,first:l,movement:u}=s;o==null||o.stopPropagation(),l&&(i.current=n),A.mag(u)!==0&&(r==null||r(a(A.add(i.current,u))))},{target:e,eventOptions:{passive:!1}})}$o.__docgenInfo={description:"",methods:[],displayName:"Protractor"};const Ho="perseus_mafs_remove_button",xn=t=>{var k,T;const{state:e,dispatch:r,labels:n,readOnly:a,fullGraphAriaLabel:i,fullGraphAriaDescription:s}=t,[o,l]=t.box,u=t.step,m=`interactive-graph-description-${v.useId()}`,h=v.useRef(null),{viewboxX:p,viewboxY:c}=Bm(e.range,o,l),b=`${p} ${c} ${o} ${l}`,w={width:o,height:l,viewBox:b,preserveAspectRatio:"xMidYMin",x:p,y:c},{strings:q}=Jn();return d(Ds.Provider,{value:{range:e.range,snapStep:e.snapStep,markings:t.markings,tickStep:u,gridStep:t.gridStep,showTooltips:!!t.showTooltips,graphDimensionsInPixels:t.box,width:o,height:l,labels:n,disableKeyboardInteraction:a||!!t.static},children:f(G,{children:[f(G,{className:"mafs-graph",style:{position:"relative",padding:"25px 25px 0 0",boxSizing:"content-box",marginLeft:"20px",marginBottom:"30px",pointerEvents:t.static?"none":"auto",userSelect:"none",width:o,height:l},onKeyUp:O=>{Gm(O,e,r)},"aria-label":i,"aria-describedby":s?m:void 0,ref:h,tabIndex:0,onFocus:O=>{$m(O,e,r)},onBlur:O=>{Hm(O,e,r)},children:[s&&d(G,{id:m,tabIndex:-1,style:{width:0,height:0,overflow:"hidden"},children:s}),d(Ys,{box:t.box,backgroundImage:t.backgroundImage}),f(G,{style:{position:"absolute",bottom:0,left:0},children:[t.markings==="graph"&&d(D,{children:d(Bs,{})}),f(Va,{preserveAspectRatio:!1,viewBox:{x:e.range[C],y:e.range[L],padding:0},pan:!1,zoom:!1,width:o,height:l,children:[d(Wo,{}),d("svg",{...w,children:d(Xs,{gridStep:t.gridStep,range:e.range,containerSizeClass:t.containerSizeClass,markings:t.markings,width:o,height:l})}),t.markings==="graph"&&f(D,{children:[d(Ks,{}),d(Gs,{})]}),d("svg",{...w,children:t.lockedFigures&&d(ao,{flags:t.flags,lockedFigures:t.lockedFigures,range:e.range})})]}),((T=(k=t.flags)==null?void 0:k.mafs)==null?void 0:T["interactive-graph-locked-features-labels"])&&t.lockedFigures&&d(Zy,{flags:t.flags,lockedFigures:t.lockedFigures}),d(G,{style:{position:"absolute"},children:d(Va,{preserveAspectRatio:!1,viewBox:{x:e.range[C],y:e.range[L],padding:0},pan:!1,zoom:!1,width:o,height:l,children:f("svg",{...w,children:[t.showProtractor&&d($o,{}),Km({state:e,dispatch:r})]})})})]}),e.type==="point"&&e.showKeyboardInteractionInvitation&&d(G,{style:{textAlign:"center",backgroundColor:"white",border:"1px solid #21242C52",padding:"16px 0",boxShadow:"0px 8px 8px 0px #21242C14",top:"50%",transform:"translateY(-50%)"},children:d(ts,{children:q.graphKeyboardPrompt})})]}),Vm({state:e,dispatch:r,width:o,strings:q})]})})},Dm=t=>{const{interactionMode:e,showRemovePointButton:r,focusedPointIndex:n}=t.state,{strings:a}=t,i=r&&n!==null;return f(G,{style:{flexDirection:"row",width:t.width},children:[e==="keyboard"&&d(Ke,{kind:"secondary",style:{width:"100%",marginLeft:"20px"},tabIndex:0,onClick:()=>{t.dispatch(F.pointGraph.addPoint([0,0]))},children:a.addPoint}),e==="mouse"&&d(Ke,{id:Ho,kind:"secondary",color:"destructive",tabIndex:-1,style:{width:"100%",marginLeft:"20px",visibility:i?"visible":"hidden"},onClick:s=>{t.dispatch(F.pointGraph.removePoint(t.state.focusedPointIndex))},children:a.removePoint})]})},Vm=t=>{const{state:e,dispatch:r,width:n,strings:a}=t,{type:i}=e;switch(i){case"point":return e.numPoints==="unlimited"?Dm({state:e,dispatch:r,width:n,strings:a}):null;default:return null}};function $m(t,e,r){e.type==="point"&&e.numPoints==="unlimited"&&t.target.classList.contains("mafs-graph")&&e.interactionMode==="mouse"&&r(F.global.changeKeyboardInvitationVisibility(!0))}function Hm(t,e,r){e.type==="point"&&e.numPoints==="unlimited"&&r(F.global.changeKeyboardInvitationVisibility(!1))}function Gm(t,e,r){e.type==="point"&&e.numPoints==="unlimited"&&(t.key==="Backspace"?(r(F.global.deleteIntent()),document.activeElement.blur()):t.shiftKey&&t.key==="Enter"?r(F.global.changeInteractionMode("keyboard")):e.interactionMode==="keyboard"&&t.key==="a"&&r(F.pointGraph.addPoint([0,0])))}const Ei=t=>{const[e,r]=t;return Math.abs(r-e)},Bm=(t,e,r)=>{let n=0;const a=Ei(t[C]),i=e/a,s=t[C][ve];s>0&&(n=i*Math.abs(s)),s<0&&(n=-i*Math.abs(s));let o=-r;const l=Ei(t[L]),u=r/l,y=t[L][ve];return y>0&&(o=-r-u*Math.abs(y)),y<0&&(o=u*Math.abs(y)-r),{viewboxX:n,viewboxY:o}},Km=t=>{const{state:e,dispatch:r}=t,{type:n}=e;switch(n){case"angle":return d(Mo,{graphState:e,dispatch:r});case"segment":return d(Ro,{graphState:e,dispatch:r});case"linear-system":return d(xo,{graphState:e,dispatch:r});case"linear":return d(Oo,{graphState:e,dispatch:r});case"ray":return d(jo,{graphState:e,dispatch:r});case"polygon":return d(Lo,{graphState:e,dispatch:r});case"point":return d(Vo,{graphState:e,dispatch:r});case"circle":return d(_o,{graphState:e,dispatch:r});case"quadratic":return d(Po,{graphState:e,dispatch:r});case"sinusoid":return d(So,{graphState:e,dispatch:r});case"none":return null;default:throw new cr(n)}};xn.__docgenInfo={description:"",methods:[],displayName:"MafsGraph",props:{flags:{required:!1,tsType:{name:'Readonly["flags"]',raw:'APIOptions["flags"]'},description:""},box:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},backgroundImage:{required:!1,tsType:{name:'intersection["backgroundImage"]',raw:'InteractiveGraphProps["backgroundImage"]'},description:""},lockedFigures:{required:!1,tsType:{name:'intersection["lockedFigures"]',raw:'InteractiveGraphProps["lockedFigures"]'},description:""},step:{required:!0,tsType:{name:'intersection["step"]',raw:'InteractiveGraphProps["step"]'},description:""},gridStep:{required:!0,tsType:{name:'intersection["gridStep"]',raw:'InteractiveGraphProps["gridStep"]'},description:""},containerSizeClass:{required:!0,tsType:{name:'intersection["containerSizeClass"]',raw:'InteractiveGraphProps["containerSizeClass"]'},description:""},markings:{required:!0,tsType:{name:'intersection["markings"]',raw:'InteractiveGraphProps["markings"]'},description:""},showTooltips:{required:!0,tsType:{name:"Required",elements:[{name:'intersection["showTooltips"]',raw:'InteractiveGraphProps["showTooltips"]'}],raw:'Required'},description:""},showProtractor:{required:!0,tsType:{name:"boolean"},description:""},labels:{required:!0,tsType:{name:'intersection["labels"]',raw:'InteractiveGraphProps["labels"]'},description:""},fullGraphAriaLabel:{required:!1,tsType:{name:'intersection["fullGraphAriaLabel"]',raw:'InteractiveGraphProps["fullGraphAriaLabel"]'},description:""},fullGraphAriaDescription:{required:!1,tsType:{name:'intersection["fullGraphAriaDescription"]',raw:'InteractiveGraphProps["fullGraphAriaDescription"]'},description:""},state:{required:!0,tsType:{name:"union",raw:`| AngleGraphState | SegmentGraphState | LinearSystemGraphState | LinearGraphState @@ -44538,10 +59797,192 @@ the available choices.`}]}}],raw:`Readonly<{ | DeleteIntent | ClickPoint | ChangeInteractionMode -| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]}]},description:""},readOnly:{required:!0,tsType:{name:"boolean"},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""}}};function Im(t,e){switch(t.type){case"angle":return ie(e.type==="angle"),{...e,coords:t.coords};case"quadratic":return ie(e.type==="quadratic"),{...e,coords:t.coords};case"circle":return ie(e.type==="circle"),{...e,center:t.center,radius:ga(t)};case"linear":return ie(e.type==="linear"),{...e,coords:t.coords};case"ray":return ie(e.type==="ray"),{...e,coords:t.coords};case"sinusoid":return ie(e.type==="sinusoid"),{...e,coords:t.coords};case"segment":return ie(e.type==="segment"),{...e,coords:t.coords};case"linear-system":return ie(e.type==="linear-system"),{...e,coords:t.coords};case"polygon":return ie(e.type==="polygon"),{...e,coords:t.coords};case"point":return ie(e.type==="point"),{...e,coords:t.coords};case"none":return ie(e.type==="none"),{...e};default:throw new vr(t)}}function jn(t){const{graph:e,step:r,snapStep:n,range:a}=t,i={hasBeenInteractedWith:!1,range:a,snapStep:n};switch(e.type){case"segment":return{...i,type:"segment",coords:Em(e,a,r)};case"linear":return{...i,type:e.type,coords:Ei(e,a,r)};case"ray":return{...i,type:e.type,coords:Ei(e,a,r)};case"linear-system":return{...i,type:e.type,coords:Pm(e,a,r)};case"polygon":return{...i,type:"polygon",showAngles:!!e.showAngles,showSides:!!e.showSides,coords:zm(e,a,r),snapTo:e.snapTo??"grid"};case"point":return{...i,type:e.type,coords:Nm(e,a,r),numPoints:e.numPoints||0,focusedPointIndex:null,showRemovePointButton:!1,interactionMode:"mouse",showKeyboardInteractionInvitation:!1};case"circle":return{...i,type:e.type,...Fm(e)};case"quadratic":return{...i,type:e.type,coords:_m(e,a,r)};case"sinusoid":return{...i,type:e.type,coords:Lm(e,a,r)};case"angle":return{...i,type:e.type,showAngles:!!e.showAngles,coords:Sm({graph:e,range:a,step:r}),angleOffsetDeg:Number(e.angleOffsetDeg),allowReflexAngles:!!e.allowReflexAngles,snapDegrees:Number(e.snapDegrees)};case"none":return{...i,type:"none"};default:throw new vr(e)}}function Nm(t,e,r){var o,l;const n=t.numPoints||1;let a=(o=t.coords)==null?void 0:o.slice();if(a)return a;const i=(l=t.startCoords)==null?void 0:l.slice();if(i)return i;switch(n){case 1:a=[t.coord||[0,0]];break;case 2:a=[[-5,0],[5,0]];break;case 3:a=[[-5,0],[0,0],[5,0]];break;case 4:a=[[-6,0],[-2,0],[2,0],[6,0]];break;case 5:a=[[-6,0],[-3,0],[0,0],[3,0],[6,0]];break;case 6:a=[[-5,0],[-3,0],[-1,0],[1,0],[3,0],[5,0]];break;default:a=[];break}const s=da(a,[[-10,10],[-10,10]]);return Fe(e,r,s)}function Em(t,e,r){if(t.coords)return t.coords;if(t.startCoords)return t.startCoords;const n=i=>{switch(i){case 2:return[5,-5];case 3:return[5,0,-5];case 4:return[6,2,-2,-6];case 5:return[6,3,0,-3,-6];case 6:return[5,3,1,-1,-3,-5];default:return[5]}},a=[[-10,10],[-10,10]];return n(t.numSegments).map(i=>{let s=[[-5,i],[5,i]];return s=da(s,a),s=Fe(e,r,s),s})}const $o=[[[.25,.75],[.75,.75]],[[.25,.25],[.75,.25]]];function Ei(t,e,r){return t.coords?t.coords:t.startCoords?t.startCoords:Fe(e,r,$o[0])}function Pm(t,e,r){return t.coords?t.coords:t.startCoords?t.startCoords:$o.map(n=>Fe(e,r,n))}function zm(t,e,r){var o,l;let n=(o=t.coords)==null?void 0:o.slice();if(n)return n;const a=(l=t.startCoords)==null?void 0:l.slice();if(a)return a;const i=t.numSides||3;if(i==="unlimited")n=[];else{const u=2*Math.PI/i,y=(1/i-1/2)*Math.PI,m=t.snapTo==="sides"?Math.sqrt(3)/3*7:4;n=[...Array(i).keys()].map(h=>[m*Math.cos(h*u+y),m*Math.sin(h*u+y)])}n=da(n,[[-10,10],[-10,10]]);const s=!["angles","sides"].includes(t.snapTo||"");return n=Fe(e,r,n,!s),n}function Lm(t,e,r){if(t.coords)return[t.coords[0],t.coords[1]];if(t.startCoords)return[t.startCoords[0],t.startCoords[1]];let n=[[.5,.5],[.65,.6]];return n=Fe(e,r,n,!0),n}function _m(t,e,r){return t.coords?t.coords:t.startCoords?t.startCoords:Fe(e,r,[[.25,.75],[.5,.25],[.75,.75]],!0)}function Fm(t){var e;return t.center!=null&&t.radius!=null?{center:t.center,radiusPoint:x.add(t.center,[t.radius,0])}:(e=t.startCoords)!=null&&e.center&&t.startCoords.radius?{center:t.startCoords.center,radiusPoint:x.add(t.startCoords.center,[t.startCoords.radius,0])}:{center:[0,0],radiusPoint:[2,0]}}const Sm=t=>{const{graph:e,range:r,step:n}=t;if(e.coords)return e.coords;if(e.startCoords)return e.startCoords;const{snapDegrees:a,angleOffsetDeg:i}=e,s=a||1;let o=s;for(;o<20;)o+=s;o=o*Math.PI/180;const l=(i||0)*Math.PI/180;let u=[[.85,.5],[.5,.5]];u=Fe(r,n,u,!0);const y=ir(sr(...u)),m=[...u,[0,0]];return m[0]=[m[1][0]+y*Math.cos(l),m[1][1]+y*Math.sin(l)],m[2]=[m[1][0]+y*Math.cos(o+l),m[1][1]+y*Math.sin(o+l)],m},Wn=2;function Mm(t,e){switch(e.type){case bo:return jn(e.params);case mo:return Km(t,e);case ro:return Bm(t,e);case uo:return Ym(t,e);case yo:return Xm(t,e);case go:return Qm(t,e);case ho:return Jm(t,e);case po:return Zm(t,e);case co:return eg(t,e);case to:return rg(t,e);case no:return Do(t,e);case ao:return Dm(t,e);case io:return Um(t);case eo:return $m(t);case so:return Vm(t,e);case oo:return Hm(t,e);case lo:return Gm(t,e);default:throw new vr(e)}}function $m(t,e){return t.type==="point"&&t.numPoints==="unlimited"&&t.focusedPointIndex!==null?Do(t,S.pointGraph.removePoint(t.focusedPointIndex)):t}function Dm(t,e){switch(t.type){case"point":return{...t,focusedPointIndex:e.index};default:return t}}function Um(t,e){switch(t.type){case"point":return{...t,focusedPointIndex:null,showRemovePointButton:!1};default:return t}}function Vm(t,e){return t.type!=="point"?t:t.numPoints==="unlimited"?{...t,focusedPointIndex:e.index,showRemovePointButton:!0}:t}function Hm(t,e){if(t.type!=="point")return t;if(t.numPoints==="unlimited"){const r=e.mode==="keyboard"?!1:t.showKeyboardInteractionInvitation;return{...t,interactionMode:e.mode,showKeyboardInteractionInvitation:r}}return t}function Gm(t,e){return t.type!=="point"?t:t.numPoints==="unlimited"?{...t,showKeyboardInteractionInvitation:e.shouldShow,hasBeenInteractedWith:!0}:t}function Km(t,e){switch(t.type){case"segment":case"linear-system":{const r=gg({array:t.coords,index:e.figureIndex,update:a=>Oe({array:a,index:e.pointIndex,newValue:Ue(e.destination,t)})}),n=r[e.figureIndex];return mg(n)?t:{...t,hasBeenInteractedWith:!0,coords:r}}case"linear":case"ray":{const r=Oe({array:t.coords,index:e.pointIndex,newValue:Ue(e.destination,t)});return{...t,hasBeenInteractedWith:!0,coords:r}}case"angle":case"circle":throw new Error("FIXME implement circle reducer");case"none":case"point":case"polygon":case"quadratic":case"sinusoid":throw new Error(`Don't use movePointInFigure for ${t.type} graphs. Use movePoint instead!`);default:throw new vr(t)}}function Bm(t,e){const{snapStep:r,range:n}=t;switch(t.type){case"segment":case"linear-system":{if(e.itemIndex===void 0)throw new Error("Please provide index of line to move");const a=t.coords[e.itemIndex];if(!a)throw new Error("No line to move");const i=mt(a,e.delta,{snapStep:r,range:n}),s=[te(r,x.add(a[0],i)),te(r,x.add(a[1],i))],o=Oe({array:t.coords,index:e.itemIndex,newValue:s});return{...t,type:t.type,hasBeenInteractedWith:!0,coords:o}}case"linear":case"ray":{const a=t.coords,i=mt(a,e.delta,{snapStep:r,range:n}),s=[te(r,x.add(a[0],i)),te(r,x.add(a[1],i))];return{...t,type:t.type,hasBeenInteractedWith:!0,coords:s}}default:return t}}function Ym(t,e){const{snapStep:r,range:n}=t;switch(t.type){case"polygon":{let a;if(t.snapTo==="sides"||t.snapTo==="angles"){const i=mt(t.coords,e.delta,{snapStep:[0,0],range:n});a=t.coords.map(s=>x.add(s,i))}else{const i=mt(t.coords,e.delta,{snapStep:r,range:n});a=t.coords.map(s=>te(r,x.add(s,i)))}return{...t,hasBeenInteractedWith:!0,coords:a}}default:return t}}function Xm(t,e){switch(t.type){case"angle":const r=(()=>{if(e.index===1){const i=ag(t,e);return{...t,hasBeenInteractedWith:!0,coords:i}}return{...t,hasBeenInteractedWith:!0,coords:Oe({array:t.coords,index:e.index,newValue:sg(e.destination,t,e.index)})}})();return og(r)?t:r;case"polygon":let n;t.snapTo==="sides"?n=ug(e.destination,t,e.index):t.snapTo==="angles"?n=lg(e.destination,t,e.index):n=Ue(e.destination,t);const a=Oe({array:t.coords,index:e.index,newValue:n});return Ml(a)?t:{...t,hasBeenInteractedWith:!0,coords:a};case"point":return{...t,hasBeenInteractedWith:!0,coords:Oe({array:t.coords,index:e.index,newValue:Ue(e.destination,t)})};case"sinusoid":{const i=e.destination,s=Ue(i,t),o=[...t.coords];return o[e.index]=s,o[0][N]===o[1][N]?t:{...t,hasBeenInteractedWith:!0,coords:Oe({array:t.coords,index:e.index,newValue:s})}}case"quadratic":{const i=[...t.coords],s=Ue(e.destination,t);return i[e.index]=s,Eo(i)===void 0?t:{...t,hasBeenInteractedWith:!0,coords:Oe({array:t.coords,index:e.index,newValue:s})}}default:throw new Error("The movePoint action is only for point, quadratic, and polygon graphs")}}function Qm(t,e){switch(t.type){case"circle":{const r=Ue(e.destination,t),n=[...x.add(t.radiusPoint,x.sub(r,t.center))],[a,i]=t.range[N],[s]=n;if(si){const o=(s-r[N])*2,l=s-o;l>=a&&l<=i&&(n[N]=l)}return{...t,hasBeenInteractedWith:!0,center:r,radiusPoint:n}}default:throw new Error("The doMoveCenter action is only for circle graphs")}}function Jm(t,e){switch(t.type){case"circle":{const[r,n]=t.range[N],a=te(t.snapStep,[dr(e.destination[N]+0,r,n),t.center[1]]);return g.isEqual(a,t.center)?t:{...t,hasBeenInteractedWith:!0,radiusPoint:a}}default:throw new Error("The doMoveRadiusPoint action is only for circle graphs")}}function Zm(t,e){return g.isEqual(t.snapStep,e.snapStep)?t:{...t,snapStep:e.snapStep}}function eg(t,e){return g.isEqual(t.range,e.range)?t:{...t,range:e.range}}function rg(t,e){if(t.type!=="point")return t;const{snapStep:r}=t,n=te(r,e.location);for(const a of t.coords)if(a[N]===n[N]&&a[L]===n[L])return t;return{...t,hasBeenInteractedWith:!0,coords:[...t.coords,n],showRemovePointButton:!1}}function Do(t,e){return t.type!=="point"?t:{...t,coords:t.coords.filter((r,n)=>n!==e.index),focusedPointIndex:null,showRemovePointButton:!1}}const tg=(t,e,r)=>{const[n,a]=r,i=Math.min(...t.map(m=>m[N])),s=Math.min(...t.map(m=>m[L])),o=Math.max(...e.map(m=>m[N])),l=Math.max(...e.map(m=>m[L])),u=dr(n,o,i),y=dr(a,l,s);return[u,y]},mt=(t,e,r)=>{const n=t.map(o=>dg({...r,point:o})),a=t.map(o=>yg({...r,point:o})),[i,s]=tg(n,a,e);return[i,s]},ng=z.eq;function et(t,e){return t{a[y]=m}),a}function Pi(t,e,r){return x.dist(t,e)<2}function ig(t,e,r,n){const a=[r[0][0]+n[0],r[1][0]+n[0]],i=[r[0][1]-n[1],r[1][1]-n[1]];let s=t;return s[0]i[0]&&(s=[i[0],s[1]-(s[0]-i[0])*Math.tan(e)]),s[1]i[1]&&(s=[s[0]-(s[1]-i[1])/Math.tan(e),i[1]]),s}function sg(t,{range:e,coords:r,snapDegrees:n,angleOffsetDeg:a,snapStep:i},s){const o=n||1,l=a||0,u=[...r],y=[[e[0][0]+i[0],e[0][1]-i[0]],[e[1][0]+i[1],e[1][1]-i[1]]],m=Ze({snapStep:[0,0],range:y,point:t});u[s]=m;const h=r[1];let p=je(u[s],h);p=Math.round((p-l)/o)*o+l;const c=Wn+.01,b=Math.max(x.dist(u[s],h),c);return x.add(h,zr(b,p))}function og(t){return Pi(t.coords[0],t.coords[1],t.range)||Pi(t.coords[2],t.coords[1],t.range)}function lg(t,{range:e,coords:r},n){const a=r[n],i=[...r];i[n]=Ze({snapStep:[0,0],range:e,point:t});const s=us(i).map(b=>b*180/Math.PI),o=b=>(n+b+i.length)%i.length;g.each([-1,1],function(b){s[o(b)]=Math.round(s[o(b)])});const l=function(b,T,R){return(je(i[o(b)],i[o(R)],i[o(T)])+360)%360},u=[s[o(-1)]-l(-2,-1,1),s[o(1)]-l(-1,1,2)];if(u[2]=180-(u[0]+u[1]),u.some(function(b){return et(b,1)}))return a;const y=ir(sr(i[o(-1)],i[o(1)])),m=nt(at(i[o(-1)],i[o(1)],i[n]))===1,h=Math.sin(u[1]*Math.PI/180)/Math.sin(u[2]*Math.PI/180)*y,p=je(i[o(1)],i[o(-1)]),c=zr(h,p+(m?1:-1)*u[0]);return Ir(i[o(-1)],c)}function ug(t,{range:e,coords:r},n){const a=r[n],i=[...r];i[n]=Ze({snapStep:[0,0],range:e,point:t});const s=h=>(n+h+i.length)%i.length,o=g.map([[i[s(-1)],i[n]],[i[n],i[s(1)]],[i[s(-1)],i[s(1)]]],function(h){return ir(sr(...h))});if(g.each([0,1],function(h){o[h]=Math.round(o[h])}),et(o[1]+o[2],o[0])||et(o[0]+o[2],o[1])||et(o[0]+o[1],o[2]))return a;const l=ds(o[0],o[2],o[1]),u=je(i[s(1)],i[s(-1)]),y=nt(at(i[s(-1)],i[s(1)],i[n]))===1,m=zr(o[0],u+(y?1:-1)*l);return Ir(i[s(-1)],m)}function dg({snapStep:t,range:e,point:r}){const n=Ze({snapStep:t,range:e,point:[1/0,1/0]});return x.sub(n,r)}function yg({snapStep:t,range:e,point:r}){const n=Ze({snapStep:t,range:e,point:[-1/0,-1/0]});return x.sub(n,r)}const mg=t=>t.some((e,r)=>t.some((n,a)=>r!==a&&Dl(e,n)));function gg(t){const{array:e,index:r,update:n}=t,a=n(e[r]);return Oe({array:e,index:r,newValue:a})}function Oe(t){const{array:e,index:r,newValue:n}=t,a=[...e];return a[r]=n,a}const Uo=k.forwardRef((t,e)=>{const{onChange:r,graph:n}=t,[a,i]=k.useReducer(Mm,t,jn);k.useImperativeHandle(e,()=>({getUserInput:()=>lm(a,n)}));const s=k.useRef(a);k.useEffect(()=>{s.current!==a&&r({graph:Im(a,n)}),s.current=a},[r,a,n]);const[o,l]=t.snapStep;k.useEffect(()=>{i(Ky([o,l]))},[i,o,l]);const[[u,y],[m,h]]=t.range;k.useEffect(()=>{i(By([[u,y],[m,h]]))},[i,u,y,m,h]);const p=n.type==="segment"?n.numSegments:null,c=n.type==="point"?n.numPoints:null,b=n.type==="polygon"?n.numSides:null,T=n.type==="polygon"?n.snapTo:null,R=n.type==="polygon"?n.showAngles:null,A=n.type==="polygon"?n.showSides:null,O="startCoords"in n?n.startCoords:void 0,f=k.useRef(t),v=zl(t);return k.useEffect(()=>{v.current!==f.current&&i(Yy(v.current))},[n.type,c,p,b,T,R,A,v,O]),t.static?d(xn,{...t,state:jn({...t,graph:t.correct}),dispatch:i}):d(xn,{...t,state:a,dispatch:i})});Uo.__docgenInfo={description:"",methods:[{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:null}],displayName:"StatefulMafsGraph"};const zi=z.eq,Pe=z.deepEq;function Cn(t,e){var n,a,i;if(t.type==="none"&&e.correct.type==="none")return{type:"points",earned:0,total:0,message:null};const r=!!(t.coords||t.center&&t.radius);if(t.type===e.correct.type&&r){if(t.type==="linear"&&e.correct.type==="linear"&&t.coords!=null){const s=t.coords,o=e.correct.coords;if(Z(o[0],o[1],s[0])&&Z(o[0],o[1],s[1]))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="linear-system"&&e.correct.type==="linear-system"&&t.coords!=null){const s=t.coords,o=e.correct.coords;if(Z(o[0][0],o[0][1],s[0][0])&&Z(o[0][0],o[0][1],s[0][1])&&Z(o[1][0],o[1][1],s[1][0])&&Z(o[1][0],o[1][1],s[1][1])||Z(o[0][0],o[0][1],s[1][0])&&Z(o[0][0],o[0][1],s[1][1])&&Z(o[1][0],o[1][1],s[0][0])&&Z(o[1][0],o[1][1],s[0][1]))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="quadratic"&&e.correct.type==="quadratic"&&t.coords!=null){const s=En(t.coords),o=En(e.correct.coords);if(Pe(s,o))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="sinusoid"&&e.correct.type==="sinusoid"&&t.coords!=null){const s=Nn(t.coords),o=Nn(e.correct.coords),l=Fa(s),u=Fa(o);if(Pe(l,u))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="circle"&&e.correct.type==="circle"){if(Pe(t.center,e.correct.center)&&zi(t.radius,e.correct.radius))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="point"&&e.correct.type==="point"&&t.coords!=null){let s=e.correct.coords;if(s==null)throw new Error("Point graph rubric has null coords");const o=t.coords.slice();if(s=s.slice(),o==null||o.sort(),s.sort(),Pe(o,s))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="polygon"&&e.correct.type==="polygon"&&t.coords!=null){const s=(n=t.coords)==null?void 0:n.slice(),o=(a=e.correct.coords)==null?void 0:a.slice();let l;if(e.correct.match==="similar"?l=Gt(s,o,Number.POSITIVE_INFINITY):e.correct.match==="congruent"?l=Gt(s,o,Ol):e.correct.match==="approx"?l=Gt(s,o,.1):(s.sort(),o.sort(),l=Pe(s,o)),l)return{type:"points",earned:1,total:1,message:null}}else if(t.type==="segment"&&e.correct.type==="segment"&&t.coords!=null){let s=z.deepClone(t.coords),o=z.deepClone((i=e.correct)==null?void 0:i.coords);if(s=g.invoke(s,"sort").sort(),o=g.invoke(o,"sort").sort(),Pe(s,o))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="ray"&&e.correct.type==="ray"&&t.coords!=null){const s=t.coords,o=e.correct.coords;if(Pe(s[0],o[0])&&Z(o[0],o[1],s[1]))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="angle"&&e.correct.type==="angle"){const s=t.coords,o=e.correct.coords;let l;if(e.correct.match==="congruent"){const u=g.map([s,o],function(y){return(He.findAngle(y[2],y[0],y[1])+360)%360});l=zi(...u)}else l=Pe(s[1],o[1])&&Z(o[1],o[0],s[0])&&Z(o[1],o[2],s[2]);if(l)return{type:"points",earned:1,total:1,message:null}}}return!r||g.isEqual(t,e.graph)?{type:"invalid",message:null}:{type:"points",earned:0,total:1,message:null}}const hg="https://ka-perseus-graphie.s3.amazonaws.com/b1452c0d79fd0f7ff4c3af9488474a0a0decb361.png",Vo={url:null},In=z.eq,gr="unlimited";function pg(t,e){return t??e}function Kr(t,e){return tHo(t)&&(t.graph.coords==null||t.graph.coords.length===0),Ho=t=>t.graph.type==="point"&&t.graph.numPoints===gr||t.graph.type==="polygon"&&t.graph.numSides===gr,oe=(t,e)=>new Ye(`${t} called but current graph type is not a '${e}'`,xe.NotAllowed,{metadata:{graphType:e}});function Nn(t){const e=t[0],r=t[1],n=r[1]-e[1],a=Math.PI/(2*(r[0]-e[0])),i=e[0]*a,s=e[1];return[n,a,i,s]}function En(t){const e=t[0],r=t[1],n=t[2],a=(e[0]-r[0])*(e[0]-n[0])*(r[0]-n[0]);if(a===0)return;const i=(n[0]*(r[1]-e[1])+r[0]*(e[1]-n[1])+e[0]*(n[1]-r[1]))/a,s=(n[0]*n[0]*(e[1]-r[1])+r[0]*r[0]*(n[1]-e[1])+e[0]*e[0]*(r[1]-n[1]))/a,o=(r[0]*n[0]*(r[0]-n[0])*e[1]+n[0]*e[0]*(n[0]-e[0])*r[1]+e[0]*r[0]*(e[0]-r[0])*n[1])/a;return[i,s,o]}const Wt=class Wt extends k.Component{constructor(){super(...arguments),this.state={shouldShowInstructions:Li(this.props)},this._getShouldShowInstructions=e=>(e=e||this.props,this.isClickToAddPoints(e)&&(e.graph.coords==null||e.graph.coords.length===0)),this.setGraphie=e=>{this.graphie=e,this.setupGraphie()},this.handleAddPointsMouseDown=e=>{var r;if(!this.isClickToAddPoints())throw new Ye("handleAddPointsClick should not be registeredwhen isClickToAddPoints() is false",xe.NotAllowed);if(!this.isCoordInTrash(e)){let n;if(this.props.graph.type==="point"){if(n=this.createPointForPointsType(e,this.points.length),!n.constrain()){n.remove();return}this.points.push(n);const a=this.points.length-1;this.points[a].grab(e),this.updateCoordsFromPoints()}else if(this.props.graph.type==="polygon"){if((r=this.polygon)!=null&&r.closed())return;n=this.createPointForPolygonType(e,this.points.length),this.points.push(n);const a=this.points.length-1;this.points[a].grab(e),this.updatePolygon()}this.setState({shouldShowInstructions:!1})}},this.resetGraphie=()=>{var e;this.shouldResetGraphie=!1,this.parabola=null,this.sinusoid=null,(e=this.refs.graph)==null||e.reset()},this.setupGraphie=()=>{var r,n;this.setTrashCanVisibility(0),this.isClickToAddPoints()&&this.setTrashCanVisibility(.5),this.props.apiOptions.isMobile&&(this.horizHairline=new Nr(this.graphie,[0,0],[0,0],{normalStyle:{strokeWidth:1}}),this.horizHairline.attr({stroke:I.INTERACTIVE}),(r=this.horizHairline)==null||r.hide(),this.vertHairline=new Nr(this.graphie,[0,0],[0,0],{normalStyle:{strokeWidth:1}}),this.vertHairline.attr({stroke:I.INTERACTIVE}),(n=this.vertHairline)==null||n.hide());const e=this.props.graph.type;this["add"+rt(e)+"Controls"]()},this.showHairlines=e=>{var r,n,a,i;this.props.apiOptions.isMobile&&this.props.markings!=="none"&&((r=this.horizHairline)==null||r.moveTo([this.props.range[0][0],e[1]],[this.props.range[0][1],e[1]]),(n=this.horizHairline)==null||n.show(),(a=this.vertHairline)==null||a.moveTo([e[0],this.props.range[1][0]],[e[0],this.props.range[1][1]]),(i=this.vertHairline)==null||i.show())},this.hideHairlines=()=>{var e,r;this.props.apiOptions.isMobile&&((e=this.horizHairline)==null||e.hide(),(r=this.vertHairline)==null||r.hide())},this.setTrashCanVisibility=e=>{var n,a;const r=this.graphie;Qn(e,0)?this.trashCan&&(this.trashCan.remove(),this.trashCan=null):this.props.apiOptions.isMobile||(this.trashCan||(this.trashCan=(n=r==null?void 0:r.raphael)==null?void 0:n.image(hg,r.xpixels-40,r.ypixels-40,40,40)),(a=this.trashCan)==null||a.attr({opacity:e}))},this.isClickToAddPoints=e=>(e=e||this.props,Ho(e)),this._lineStroke=()=>this.props.isMobile?{"stroke-width":3}:{},this.addLine=e=>{const r=this,n=r.graphie,a=se.getLineCoords(r.props.graph,r.props),i=r.points=g.map(a,o=>E.addMaybeMobileMovablePoint(this,{coord:o,constraints:[E.MovablePoint.constraints.bound(),E.MovablePoint.constraints.snap()],onMove:()=>{const l=g.extend({},r.props.graph,{coords:g.invoke(i,"coord")});r.onChange({graph:l})}})),s={points:i,static:!0,normalStyle:{stroke:this.props.apiOptions.isMobile?I.BLUE_C:I.INTERACTIVE,...this._lineStroke()}};e==="line"?s.extendLine=!0:e==="ray"&&(s.extendRay=!0),r.line=E.addMovableLine(n,s),i[0].listen("constraints","isLine",o=>!Ie(o,i[1].coord())),i[1].listen("constraints","isLine",o=>!Ie(o,i[0].coord()))},this.removeLine=()=>{var e;g.invoke(this.points,"remove"),(e=this.line)==null||e.remove()},this.addNoneControls=()=>{},this.removeNoneControls=()=>{},this.addLinearControls=()=>{this.addLine("line")},this.removeLinearControls=()=>{this.removeLine()},this.addQuadraticControls=()=>{if(this.props.graph.type!=="quadratic")throw oe("addQuadraticControls","quadratic");let e=this.props.graph.coords;e||(e=se.defaultQuadraticCoords(this.props));const r=()=>{const s=g.extend({},this.props.graph,{coords:[n.coord(),a.coord(),i.coord()]});this.onChange({graph:s}),this.updateQuadratic()};let n=null;n=this.pointA=E.addMaybeMobileMovablePoint(this,{coord:e[0],constraints:[E.MovablePoint.constraints.bound(),E.MovablePoint.constraints.snap(),s=>!n||s[0]!==a.coord()[0]&&s[0]!==i.coord()[0]],onMove:r});let a=null;a=this.pointB=E.addMaybeMobileMovablePoint(this,{coord:e[1],constraints:[E.MovablePoint.constraints.bound(),E.MovablePoint.constraints.snap(),s=>!a||s[0]!==n.coord()[0]&&s[0]!==i.coord()[0]],onMove:r});let i=null;i=this.pointC=E.addMaybeMobileMovablePoint(this,{coord:e[2],constraints:[E.MovablePoint.constraints.bound(),E.MovablePoint.constraints.snap(),s=>!i||s[0]!==n.coord()[0]&&s[0]!==a.coord()[0]],onMove:r}),this.updateQuadratic()},this.updateQuadratic=()=>{var i,s,o,l,u;const e=se.getCurrentQuadraticCoefficients(this.props);if(!e)return;const r=e[0],n=e[1],a=e[2];if(this.parabola){const y=(i=this.graphie)==null?void 0:i.svgParabolaPath(r,n,a);(s=this.parabola)==null||s.attr({path:y})}else this.parabola=(o=this.graphie)==null?void 0:o.parabola(r,n,a),(l=this.parabola)==null||l.attr({stroke:this.props.apiOptions.isMobile?I.BLUE_C:I.DYNAMIC,...this._lineStroke()}),(u=this.parabola)==null||u.toBack()},this.removeQuadraticControls=()=>{var e,r,n;(e=this.pointA)==null||e.remove(),(r=this.pointB)==null||r.remove(),(n=this.pointC)==null||n.remove(),this.parabola&&(this.parabola.remove(),this.parabola=null)},this.addSinusoidControls=()=>{if(this.props.graph.type!=="sinusoid")throw oe("addSinusoidControls","sinusoid");let e=this.props.graph.coords;e||(e=se.defaultSinusoidCoords(this.props));const r=()=>{const i=g.extend({},this.props.graph,{coords:[n.coord(),a.coord()]});this.onChange({graph:i}),this.updateSinusoid()};let n=null;n=this.pointA=E.addMaybeMobileMovablePoint(this,{coord:e[0],constraints:[E.MovablePoint.constraints.bound(),E.MovablePoint.constraints.snap(),i=>!n||i[0]!==a.coord()[0]],onMove:r});const a=this.pointB=E.addMaybeMobileMovablePoint(this,{coord:e[1],constraints:[E.MovablePoint.constraints.bound(),E.MovablePoint.constraints.snap(),i=>!n||i[0]!==n.coord()[0]],onMove:r});this.updateSinusoid()},this.updateSinusoid=()=>{var s,o,l,u,y;const e=se.getCurrentSinusoidCoefficients(this.props);if(!e)return;const r=e[0],n=e[1],a=e[2],i=e[3];if(this.sinusoid){const m=(s=this.graphie)==null?void 0:s.svgSinusoidPath(r,n,a,i);(o=this.sinusoid)==null||o.attr({path:m})}else this.sinusoid=(l=this.graphie)==null?void 0:l.sinusoid(r,n,a,i),(u=this.sinusoid)==null||u.attr({stroke:this.props.apiOptions.isMobile?I.BLUE_C:I.DYNAMIC,...this._lineStroke()}),(y=this.sinusoid)==null||y.toBack()},this.removeSinusoidControls=()=>{var e,r;(e=this.pointA)==null||e.remove(),(r=this.pointB)==null||r.remove(),this.sinusoid&&(this.sinusoid.remove(),this.sinusoid=null)},this.addCircleControls=()=>{const e=this.graphie,r=g.min(e.snap),n=this.circle=e==null?void 0:e.addCircleGraph({center:this.props.graph.center||[0,0],radius:this.props.graph.radius||g.min(this.props.step),snapX:e.snap[0],snapY:e.snap[1],minRadius:r,snapRadius:r});_(n).on("move",()=>{const a=g.extend({},this.props.graph,{center:n.center,radius:n.radius});this.onChange({graph:a})})},this.removeCircleControls=()=>{var e;(e=this.circle)==null||e.remove()},this.addLinearSystemControls=()=>{const e=this.graphie,r=se.getLinearSystemCoords(this.props.graph,this.props),n=[I.INTERACTIVE,I.GREEN],a=this.points=g.map(r,(i,s)=>{const o=[];for(let l=0;l{const m=o[1-l];if(m)return!Ie(y,m.coord())}],onMove:()=>{const y=g.extend({},this.props.graph,{coords:g.map(this.points,m=>g.invoke(m,"coord"))});this.onChange({graph:y})},normalStyle:{fill:n[s]},highlightStyle:{fill:n[s]}}))}return o});this.lines=g.map(a,(i,s)=>E.addMovableLine(e,{points:i,static:!0,extendLine:!0,normalStyle:{stroke:n[s]}}))},this.removeLinearSystemControls=()=>{g.invoke(this.lines,"remove"),g.map(this.points,e=>g.invoke(e,"remove"))},this.isCoordInTrash=e=>{if(this.props.apiOptions.isMobile)return!1;const r=this.graphie,n=r==null?void 0:r.scalePoint(e);return n[0]>=r.xpixels-40&&n[1]>=r.ypixels-40},this.createPointForPointsType=(e,r)=>{const n=this,a=()=>{n.points=g.filter(n.points,function(s){return s!==i}),n.updateCoordsFromPoints(),setTimeout(i.remove.bind(i),0)};let i=null;return i=E.addMaybeMobileMovablePoint(this,{coord:e,constraints:[E.MovablePoint.constraints.bound(),E.MovablePoint.constraints.snap(),function(s){return g.all(n.points,function(o){return i===o||!Ie(s,o.coord())})}],onMoveStart:function(){n.isClickToAddPoints()&&n.setTrashCanVisibility(1)},onMove:n.updateCoordsFromPoints,onMoveEnd:function(s){n.isClickToAddPoints()&&(n.isCoordInTrash(s)&&a(),n.setTrashCanVisibility(.5))},...this.props.apiOptions.isMobile&&n.isClickToAddPoints()?{onRemove:a}:{}}),i},this.removePoint=e=>{let r=null;return this.points=g.filter(this.points,function(n,a){return n===e?(r=a,!1):!0}),r},this.createPointForPolygonType=(e,r)=>{if(this.props.graph.type!=="polygon")throw oe("createPointForPolygonType","polygon");const n=!g.contains(["angles","sides"],this.props.graph.snapTo),a=y=>(r+y+this.points.length)%this.points.length,i=()=>{var m,h;const y=this.removePoint(u);(m=this.polygon)!=null&&m.closed()&&(this.points=Ma(this.points,y),(h=this.polygon)==null||h.update({closed:!1})),this.updatePolygon(),this.clearCoords(),setTimeout(u.remove.bind(u),0)},s=ky((y,m)=>{y.state.isInitialMove=m},1e3),o=y=>{var h,p,c,b,T,R;const m=this.points.length>1&&(u===this.points[0]&&Ie(y,g.last(this.points).coord())||u===g.last(this.points)&&Ie(y,this.points[0].coord()));if(this.isClickToAddPoints()){if(this.isCoordInTrash(y))i();else if(m){const A=this.points.pop();this.points.length>2?((h=this.polygon)==null||h.update({closed:!0}),this.updateCoordsFromPoints()):((p=this.polygon)==null||p.update({closed:!1}),this.clearCoords()),this.updatePolygon(),setTimeout(A.remove.bind(A),0)}else if(g.any(this.points,function(O){return O!==u&&Ie(O.coord(),y)}))this.removePoint(u),this.points.length<3?((c=this.polygon)==null||c.update({closed:!1}),this.clearCoords()):(b=this.polygon)!=null&&b.closed()&&this.updateCoordsFromPoints(),this.updatePolygon(),setTimeout(u.remove.bind(u),0);else{const O=u===g.head(this.points)||u===g.last(this.points),f=!u.hasMoved(),v=!u.state.isInitialMove,w=!((T=this.polygon)!=null&&T.closed()),C=this.points.length>2;O&&f&&v&&w&&C&&((R=this.polygon)==null||R.update({closed:!0}),this.updatePolygon(),this.updateCoordsFromPoints())}this.setTrashCanVisibility(.5)}s(u,!1)},l=y=>{var h,p;if(this.points==null||this.points.length===0)return!0;const m=g.invoke(this.points,"coord");if(m[r]=y,!this.isClickToAddPoints()){if(Z(m[a(-2)],m[a(-1)],m[r])||Z(m[a(-1)],m[r],m[a(1)])||Z(m[r],m[a(1)],m[a(2)]))return!1;const c=g.zip(m,Ma(m));if(this.points.length>3)for(let b=-1;b<=0;b++){const T=c[a(b)],R=g.without(c,T,c[a(b-1)],c[a(b+1)]);for(let A=0;A2){const c=g.map(us(m),function(w){return w*180/Math.PI});g.each([-1,1],function(w){c[a(w)]=Math.round(c[a(w)])});const b=function(w,C,W){return(He.findAngle(m[a(w)],m[a(W)],m[a(C)])+360)%360},T=[c[a(-1)]-b(-2,-1,1),c[a(1)]-b(-1,1,2)];if(T[2]=180-(T[0]+T[1]),g.any(T,function(w){return Kr(w,1)}))return!1;const R=ir(sr(m[a(-1)],m[a(1)])),A=nt(at(m[a(-1)],m[a(1)],m[r]))===1,O=Math.sin(T[1]*Math.PI/180)/Math.sin(T[2]*Math.PI/180)*R,f=He.findAngle(m[a(1)],m[a(-1)]),v=$a(O,f+(A?1:-1)*T[0]);return(h=this.graphie)==null?void 0:h.addPoints(m[a(-1)],v)}if(this.props.graph.snapTo==="sides"&&this.points.length>1){const c=g.map([[m[a(-1)],m[r]],[m[r],m[a(1)]],[m[a(-1)],m[a(1)]]],function(O){return ir(sr(...O))});if(g.each([0,1],function(O){c[O]=Math.round(c[O])}),Kr(c[1]+c[2],c[0])||Kr(c[0]+c[2],c[1])||Kr(c[0]+c[1],c[2]))return!1;const b=ds(c[0],c[2],c[1]),T=He.findAngle(m[a(1)],m[a(-1)]),R=nt(at(m[a(-1)],m[a(1)],m[r]))===1,A=$a(c[0],T+(R?1:-1)*b);return(p=this.graphie)==null?void 0:p.addPoints(m[a(-1)],A)}return!0},u=E.addMaybeMobileMovablePoint(this,{coord:e,constraints:[E.MovablePoint.constraints.bound(),n?E.MovablePoint.constraints.snap():null,l],onMoveStart:()=>{this.isClickToAddPoints()&&this.setTrashCanVisibility(1)},onMove:()=>{var y;(y=this.polygon)!=null&&y.closed()&&this.updateCoordsFromPoints()},onMoveEnd:o,...this.props.apiOptions.isMobile&&this.isClickToAddPoints()?{onRemove:i}:{}});return u.state.isInitialMove=!0,u},this.updateCoordsFromPoints=()=>{const e=g.extend({},this.props.graph,{coords:g.map(this.points,function(r){return g.result(r,"coord")})});this.onChange({graph:e})},this.clearCoords=()=>{const e=g.extend({},this.props.graph,{coords:null});this.onChange({graph:e})},this.onChange=e=>{this.props.onChange(e),this.props.trackInteraction()},this.addPointControls=()=>{if(this.props.graph.type!=="point")throw oe("addPointControls","point");const e=se.getPointCoords(this.props.graph,this.props);this.points=[],this.points=g.map(e,this.createPointForPointsType,this)},this.removePointControls=()=>{g.invoke(this.points,"remove")},this.addSegmentControls=()=>{if(this.props.graph.type!=="segment")throw oe("addSegmentControls","segment");const e=this,r=this.graphie,n=se.getSegmentCoords(this.props.graph,this.props),a=i=>E.addMaybeMobileMovablePoint(this,i);this.points=[],this.lines=g.map(n,function(i,s){const o=function(){const y=g.extend({},e.props.graph,{coords:g.invoke(e.lines,"coords")});e.onChange({graph:y})},l=[];for(let y=0;y{const p=l[1-y];return p?!Ie(h,p.coord()):!1}],onMove:o}))}e.points=e.points.concat(l);const u=E.addMovableLine(r,{points:l,static:!1,constraints:[E.MovableLine.constraints.bound(),E.MovableLine.constraints.snap()],onMove:[E.MovableLine.onMove.updatePoints,o],normalStyle:{stroke:this.props.apiOptions.isMobile?I.BLUE_C:I.INTERACTIVE,...this._lineStroke()},highlightStyle:{stroke:this.props.apiOptions.isMobile?I.BLUE_C:I.INTERACTING,...this._lineStroke()}});return g.invoke(l,"toFront"),u},this)},this.removeSegmentControls=()=>{g.invoke(this.points,"remove"),g.invoke(this.lines,"remove")},this.addRayControls=()=>{this.addLine("ray")},this.removeRayControls=()=>{this.removeLine()},this.addPolygonControls=()=>{this.polygon=null;const e=se.getPolygonCoords(this.props.graph,this.props);this.points=[],this.points=g.map(e,this.createPointForPolygonType,this),this.updatePolygon()},this.updatePolygon=()=>{if(this.props.graph.type!=="polygon")throw oe("updatePolygon","polygon");let e;this.polygon?e=this.polygon.closed():this.points.length>=3?e=!0:e=!1;const r=this.graphie,n=this.points.length,a=!g.contains(["angles","sides"],this.props.graph.snapTo),i=g.times(n,function(u){return!this.props.graph.showAngles||!e&&(u===0||u===n-1)?"":this.props.graph.snapTo==="angles"?"$deg0":"$deg1"},this),s=g.times(n,function(u){return e||u!==0&&u!==n-1},this),o=g.times(n,function(u){return this.props.graph.showAngles&&(e||u!==0&&u!==n-1)?1:0},this),l=g.times(n,function(u){return!this.props.graph.showSides||!e&&u===n-1?"":this.props.graph.snapTo==="sides"?"$len0":"$len1"},this);if(this.polygon==null){const u=this;u.polygon=E.addMovablePolygon(r,{constraints:[E.MovablePolygon.constraints.bound(),a?E.MovablePolygon.constraints.snap():null],closed:e,points:u.points,angleLabels:i,showRightAngleMarkers:s,numArcs:o,sideLabels:l,onMove:[E.MovablePolygon.onMove.updatePoints,function(){this.closed()&&u.updateCoordsFromPoints()}],normalStyle:{stroke:this.props.apiOptions.isMobile?I.BLUE_C:I.INTERACTIVE,...this._lineStroke()}})}else this.polygon.update({closed:e,points:this.points,angleLabels:i,showRightAngleMarkers:s,numArcs:o,sideLabels:l})},this.removePolygonControls=()=>{var e;g.invoke(this.points,"remove"),(e=this.polygon)==null||e.remove()},this.addAngleControls=()=>{if(this.props.graph.type!=="angle")throw oe("addAngleControls","angle");const e=this.props.graph,r=this.graphie,n=se.getAngleCoords(this.props.graph,this.props);this.points=n.map(function(a,i){return r==null?void 0:r.addMovablePoint(g.extend({coord:a,normalStyle:{stroke:I.INTERACTIVE,fill:I.INTERACTIVE}},i===1?{snapX:r.snap[0],snapY:r.snap[1]}:{}))}),this.angle=r==null?void 0:r.addMovableAngle({points:this.points,snapDegrees:e.snapDegrees||1,snapOffsetDeg:e.angleOffsetDeg||0,angleLabel:e.showAngles?"$deg0":"",pushOut:2,allowReflex:pg(e.allowReflexAngles,!0)}),_(this.angle).on("move",()=>{var a;this.onChange({graph:{...e,coords:(a=this.angle)==null?void 0:a.getClockwiseCoords()}})})},this.removeAngleControls=()=>{var e;g.invoke(this.points,"remove"),(e=this.angle)==null||e.remove()},this.toggleShowSides=()=>{if(this.props.graph.type!=="polygon")throw oe("toggleShowSides","polygon");const e=g.extend({},this.props.graph,{showSides:!this.props.graph.showSides});this.onChange({graph:e})},this.focus=_.noop}componentDidMount(){this.refs.graph&&this.setGraphie(this.refs.graph.graphie())}UNSAFE_componentWillReceiveProps(e){var r,n;this.isClickToAddPoints()!==this.isClickToAddPoints(e)&&(this.shouldResetGraphie=!0,this.setState({shouldShowInstructions:Li(e)})),(((r=this.props.backgroundImage)==null?void 0:r.url)!==((n=e.backgroundImage)==null?void 0:n.url)||this.props.backgroundImage!==e.backgroundImage||this.props.containerSizeClass!==e.containerSizeClass)&&(this.shouldResetGraphie=!0)}componentDidUpdate(e,r){const n=e.graph.type,a=this.props.graph.type;(n!==a||e.graph.type==="angle"&&this.props.graph.type==="angle"&&this.areAngleGraphsEqual(e.graph,this.props.graph)||e.graph.type==="point"&&this.props.graph.type==="point"&&this.arePointGraphsEqual(e.graph,this.props.graph)||e.graph.type==="polygon"&&this.props.graph.type==="polygon"&&this.arePolygonGraphsEqual(e.graph,this.props.graph)||e.graph.type==="segment"&&this.props.graph.type==="segment"&&this.areSegmentGraphsEqual(e.graph,this.props.graph))&&(this["remove"+rt(n)+"Controls"](),this["add"+rt(a)+"Controls"]()),this.shouldResetGraphie&&this.resetGraphie()}areAngleGraphsEqual(e,r){return e.allowReflexAngles!==r.allowReflexAngles||e.angleOffsetDeg!==r.angleOffsetDeg||e.snapDegrees!==r.snapDegrees}arePointGraphsEqual(e,r){return e.numPoints!==r.numPoints}arePolygonGraphsEqual(e,r){return e.numSides!==r.numSides||e.showAngles!==r.showAngles||e.showSides!==r.showSides||e.snapTo!==r.snapTo}areSegmentGraphsEqual(e,r){return e.numSegments!==r.numSegments}getUserInput(){return se.getUserInputFromProps(this.props)}simpleValidate(e){return Cn(this.getUserInput(),e)}render(){const e=Jn(this.props.containerSizeClass),r=this.props.gridStep||z.getGridStep(this.props.range,this.props.step,e[0]),n=this.props.snapStep||z.snapStepFromGridStep(r);let a;this.isClickToAddPoints()&&this.state.shouldShowInstructions?this.props.graph.type==="point"?a=this.context.strings.addPoints:this.props.graph.type==="polygon"&&(a=this.context.strings.addVertices):a=void 0;let i;this.isClickToAddPoints()&&(i=this.handleAddPointsMouseDown);const s=this.props.apiOptions.isMobile;return d("div",{className:"perseus-widget perseus-widget-interactive-graph",style:{width:e[0],height:e[1]},children:d(vu,{instructions:a,ref:"graph",box:e,labels:this.props.labels,range:this.props.range,step:s?z.constrainedTickStepsFromTickSteps(this.props.step,this.props.range):this.props.step,gridStep:r,snapStep:n,markings:this.props.markings,backgroundImage:this.props.backgroundImage,showProtractor:this.props.showProtractor,onMouseDown:i,onGraphieUpdated:this.setGraphie,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable,isMobile:s})})}};Wt.contextType=M,Wt.defaultProps={labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],backgroundImage:Vo,markings:"graph",showTooltips:!1,showProtractor:!1,graph:{type:"linear"}};let Pn=Wt;const $=class $ extends k.Component{constructor(){super(...arguments),this.legacyGraphRef=k.createRef(),this.mafsRef=k.createRef()}getUserInput(){var e,r;if((e=this.mafsRef.current)!=null&&e.getUserInput)return this.mafsRef.current.getUserInput();if((r=this.legacyGraphRef.current)!=null&&r.getUserInput)return this.legacyGraphRef.current.getUserInput();throw new Ye("Cannot getUserInput from a graph that has never rendered",xe.NotAllowed)}simpleValidate(e){return Cn(this.getUserInput(),e)}render(){var r,n,a,i;const e=(n=(r=this.props.apiOptions)==null?void 0:r.flags)==null?void 0:n.mafs;if(bg(e,this.props.graph)){const s=Jn(this.props.containerSizeClass),o=this.props.gridStep||z.getGridStep(this.props.range,this.props.step,s[0]),l=this.props.snapStep||z.snapStepFromGridStep(o);return d(Uo,{...this.props,flags:(a=this.props.apiOptions)==null?void 0:a.flags,ref:this.mafsRef,gridStep:o,snapStep:l,box:s,showTooltips:!!this.props.showTooltips,readOnly:(i=this.props.apiOptions)==null?void 0:i.readOnly})}return d(Pn,{ref:this.legacyGraphRef,...this.props})}static getLineCoords(e,r){return e.coords||$.pointsFromNormalized(r,[[.25,.75],[.75,.75]])}static getPointCoords(e,r){const n=e.numPoints||1;let a=e.coords;if(a)return a;switch(n){case 1:a=[e.coord||[0,0]];break;case 2:a=[[-5,0],[5,0]];break;case 3:a=[[-5,0],[0,0],[5,0]];break;case 4:a=[[-6,0],[-2,0],[2,0],[6,0]];break;case 5:a=[[-6,0],[-3,0],[0,0],[3,0],[6,0]];break;case 6:a=[[-5,0],[-3,0],[-1,0],[1,0],[3,0],[5,0]];break;case gr:a=[];break}const i=[[-10,10],[-10,10]],s=$.normalizeCoords(a,i);return $.pointsFromNormalized(r,s)}static getLinearSystemCoords(e,r){return e.coords||g.map([[[.25,.75],[.75,.75]],[[.25,.25],[.75,.25]]],n=>$.pointsFromNormalized(r,n))}static getPolygonCoords(e,r){if(e.type!=="polygon")throw oe("toggleShowSides","polygon");let n=e.coords;if(n)return n;const a=e.numSides||3;if(a===gr)n=[];else{const o=2*Math.PI/a,l=(1/a-1/2)*Math.PI,u=e.snapTo==="sides"?Math.sqrt(3)/3*7:4;n=g.times(a,function(y){return[u*Math.cos(y*o+l),u*Math.sin(y*o+l)]})}const i=[[-10,10],[-10,10]];n=$.normalizeCoords(n,i);const s=!g.contains(["angles","sides"],e.snapTo);return n=$.pointsFromNormalized(r,n,!s),n}static getSegmentCoords(e,r){const n=e.coords;if(n)return n;const a=e.numSegments||1,i={1:[5],2:[5,-5],3:[5,0,-5],4:[6,2,-2,-6],5:[6,3,0,-3,-6],6:[5,3,1,-1,-3,-5]}[a],s=[[-10,10],[-10,10]];return i.map(function(o){let l=[[-5,o],[5,o]];return l=$.normalizeCoords(l,s),l=$.pointsFromNormalized(r,l),l})}static getAngleCoords(e,r){let n=e.coords;if(n)return n;const a=e.snapDegrees||1;let i=a;for(;i<20;)i+=a;i=i*Math.PI/180;const s=(e.angleOffsetDeg||0)*Math.PI/180;n=$.pointsFromNormalized(r,[[.85,.5],[.5,.5]]);const o=ir(sr(...n));return n[0]=[n[1][0]+o*Math.cos(s),n[1][1]+o*Math.sin(s)],n[2]=[n[1][0]+o*Math.cos(i+s),n[1][1]+o*Math.sin(i+s)],n}static normalizeCoords(e,r){return g.map(e,function(n){return g.map(n,function(a,i){const s=r[i][1]-r[i][0];return(a+r[i][1])/s})})}static getEquationString(e){const r=e.graph.type,n="get"+rt(r)+"EquationString";return $[n](e)}static pointsFromNormalized(e,r,n){return g.map(r,function(a){return g.map(a,function(i,s){const o=e.range[s];if(n)return o[0]+(o[1]-o[0])*i;const l=e.step[s],u=cg(o,l),y=Math.round(i*u);return o[0]+l*y})})}static getNoneEquationString(){return""}static getLinearEquationString(e){const r=$.getLineCoords(e.graph,e);if(In(r[0][0],r[1][0]))return"x = "+r[0][0].toFixed(3);const n=(r[1][1]-r[0][1])/(r[1][0]-r[0][0]),a=r[0][1]-n*r[0][0];return In(n,0)?"y = "+a.toFixed(3):"y = "+n.toFixed(3)+"x + "+a.toFixed(3)}static getCurrentQuadraticCoefficients(e){const r=e.graph.coords||$.defaultQuadraticCoords(e);return En(r)}static defaultQuadraticCoords(e){const r=[[.25,.75],[.5,.25],[.75,.75]];return $.pointsFromNormalized(e,r)}static getQuadraticEquationString(e){const r=$.getCurrentQuadraticCoefficients(e);return"y = "+r[0].toFixed(3)+"x^2 + "+r[1].toFixed(3)+"x + "+r[2].toFixed(3)}static getCurrentSinusoidCoefficients(e){const r=e.graph.coords||$.defaultSinusoidCoords(e);return Nn(r)}static defaultSinusoidCoords(e){const r=[[.5,.5],[.65,.6]];return $.pointsFromNormalized(e,r)}static getSinusoidEquationString(e){const r=$.getCurrentSinusoidCoefficients(e);return"y = "+r[0].toFixed(3)+"sin("+r[1].toFixed(3)+"x - "+r[2].toFixed(3)+") + "+r[3].toFixed(3)}static getCircleEquationString(e){const r=e.graph,n=r.center||[0,0],a=r.radius||2;return"center ("+n[0]+", "+n[1]+"), radius "+a}static getLinearSystemEquationString(e){const r=$.getLinearSystemCoords(e.graph,e);return` -`+Sa(r[0][0],r[0][1])+` -`+Sa(r[1][0],r[1][1])+` -`+Ul(r[0],r[1])}static getPointEquationString(e){if(e.graph.type!=="point")throw oe("getPointEquationString","point");return $.getPointCoords(e.graph,e).map(function(n){return"("+n[0]+", "+n[1]+")"}).join(", ")}static getSegmentEquationString(e){if(e.graph.type!=="segment")throw oe("getSegmentEquationString","segment");const r=$.getSegmentCoords(e.graph,e);return g.map(r,function(n){return"["+g.map(n,function(a){return"("+a.join(", ")+")"}).join(" ")+"]"}).join(" ")}static getRayEquationString(e){if(e.graph.type!=="ray")throw oe("createPointForPolygonType","ray");const r=$.getLineCoords(e.graph,e),n=r[0],a=r[1];let i=$.getLinearEquationString(e);return n[0]>a[0]?i+=" (for x <= "+n[0].toFixed(3)+")":n[0]= "+n[0].toFixed(3)+")":n[1]>a[1]?i+=" (for y <= "+n[1].toFixed(3)+")":i+=" (for y >= "+n[1].toFixed(3)+")",i}static getPolygonEquationString(e){if(e.graph.type!=="polygon")throw oe("getPolygonEquationString","polygon");const r=$.getPolygonCoords(e.graph,e);return g.map(r,function(n){return"("+n.join(", ")+")"}).join(" ")}static getAngleEquationString(e){if(e.graph.type!=="angle")throw oe("getAngleEquationString","angle");const r=$.getAngleCoords(e.graph,e);return He.findAngle(r[2],r[0],r[1]).toFixed(0)+"° angle at ("+r[1].join(", ")+")"}static validate(e,r){return Cn(e,r)}static getUserInputFromProps(e){return e.graph}};$.defaultProps={labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],backgroundImage:Vo,markings:"graph",showTooltips:!1,showProtractor:!1,graph:{type:"linear"}};let se=$;function bg(t,e){if(typeof t=="boolean"||typeof t>"u")return!1;switch(e.type){case"none":return!0;case"point":return e.numPoints===gr?!!t["unlimited-point"]:!!t.point;case"polygon":return e.numSides===gr?!1:!!t.polygon;default:return!!t[e.type]}}const vg=g.identity,fg={name:"interactive-graph",displayName:"Interactive graph (Assessments only)",widget:se,staticTransform:vg},tr={white:"#FFFFFF",gray98:"#FAFAFA",gray97:"#F6F7F7",gray95:"#F0F1F2",gray90:"#E3E5E6",gray85:"#D6D8DA",gray76:"#BABEC2",gray72:"#999A9D",gray68:"#888D93",gray55:"#707378",gray41:"#626569",gray25:"#3B3E40",gray17:"#21242C",gray10:"#1499af",black:"#000000",alertRed:su,homepageBlue:ou,kaBlue:lu,kaBlueLight:uu,kaGreen:du,kaGreenLight:yu,learnstormBlue:mu,backgroundBlue:gu,adminGreen:"#78C008",kaBlueExtraLight:"#39c2db",kaBlueHover:"#0c7f99",kaGreenHover:"#518005",skyDark:"#001f4d",recommendationGold:"#ffbe26",starAced:"#ff9c39",google:"#C1432f",modernGoogle:"#be2612",modernGoogleHover:"#8c1c0d",facebook:"#4267B2",modernFacebook:"#4267B2",modernFacebookHover:"#00294a",wonderBlocksGold:"#FFB100",wonderBlocksLightBlue:"#37C5FD",breadcrumbs:"rgba(255, 255, 255, 0.7)"},wg=4,_i={color:tr.breadcrumbs,fontFamily:"inherit",fontSize:15,fontWeight:"bold",letterSpacing:.8,lineHeight:"19px",textTransform:"uppercase",MozOsxFontSmoothing:"grayscale",WebkitFontSmoothing:"antialiased"},Me={regular:"inherit"},Go={subjectHeadingDesktop:{fontFamily:"inherit",fontSize:50,fontWeight:"bold",lineHeight:"61px"},subjectHeadingMobile:{fontFamily:"inherit",fontSize:35,fontWeight:"bold",lineHeight:"37px"},conceptHeadingDesktop:{fontFamily:"inherit",fontSize:35,fontWeight:"bold",lineHeight:"37px"},conceptHeadingMobile:{fontFamily:"inherit",fontSize:23,fontWeight:"bold",lineHeight:"27px"},subheadingDesktop:{fontFamily:"inherit",fontSize:23,fontWeight:"bold",lineHeight:"27px"},subheadingMobile:{fontFamily:"inherit",fontSize:20,fontWeight:"bold",lineHeight:"24px"},smallSubheadingDesktop:{fontFamily:"inherit",fontSize:20,lineHeight:1.25},smallSubheadingMobile:{fontFamily:"inherit",fontSize:15,lineHeight:1.25},smallHeading:{color:tr.gray25,fontFamily:"inherit",fontSize:17,fontWeight:"bold",lineHeight:"23px"},smallHeadingMobile:{color:tr.gray25,fontFamily:"inherit",fontSize:15,fontWeight:"bold",lineHeight:"18px"},accentHeading:{color:tr.gray68,fontFamily:"inherit",fontSize:15,fontWeight:"bold",letterSpacing:.8,lineHeight:"19px",textTransform:"uppercase"},bodyLarge:{fontFamily:Me.regular,fontSize:20,lineHeight:"30px"},bodySmall:{fontFamily:Me.regular,fontSize:17,fontWeight:"normal",lineHeight:"23px"},bodySmallBold:{fontFamily:Me.regular,fontSize:17,fontWeight:"bold",lineHeight:"23px"},bodyXsmall:{fontFamily:Me.regular,fontSize:15,lineHeight:"22px"},bodyXsmallBold:{fontFamily:"inherit",fontSize:15,fontWeight:"bold",lineHeight:"22px"},breadcrumb:_i,breadcrumbSmall:{..._i,fontSize:12,lineHeight:"13px"},labelLarge:{fontFamily:"inherit",fontSize:23,fontWeight:"bold",lineHeight:"27px"},labelMedium:{fontFamily:"inherit",fontSize:15,fontWeight:"bold",lineHeight:"18px"},labelSmall:{fontFamily:Me.regular,fontSize:12,lineHeight:"14px"},caption:{fontFamily:Me.regular,fontSize:14,fontStyle:"italic",lineHeight:"17px"},desktopScalingOnMobile:{MozTextSizeAdjust:"100%",MsTextSizeAdjust:"100%",WebkitTextSizeAdjust:"100%"},modalSubtitle:{fontSize:12,lineHeight:1.65,WebkitFontSmoothing:"antialiased",fontWeight:"bold"},wonderBlocksHeader:{paddingLeft:16,paddingRight:16,paddingBottom:24,paddingTop:34,[Er.mdOrLarger]:{paddingBottom:32}},wonderBlocksTitle:{color:tr.white,fontWeight:900,fontSize:28,lineHeight:"32px",margin:0,[Er.mdOrLarger]:{fontSize:36,lineHeight:"40px"}},wonderBlocksLabelLarge:{fontSize:16,lineHeight:"20px",fontWeight:700}},Lc=Object.freeze(Object.defineProperty({__proto__:null,borderRadius:wg,colors:tr,fonts:Me,typography:Go},Symbol.toStringTag,{value:"Module"})),Ut={color:{bg:{switch:{off:P.offBlack50,disabledOff:P.offBlack32,activeOff:P.offBlack64,on:P.blue,disabledOn:P.fadedBlue,activeOn:P.activeBlue},slider:{on:P.white,off:P.white},icon:{on:P.blue,disabledOn:P.fadedBlue,off:P.offBlack50,disabledOff:P.offBlack32}},outline:{default:P.blue}},border:{radius:{small:me.small_12,full:Kl.radius.full}},size:{height:{none:0,medium:20,large:me.large_24},width:{none:0,small:me.xxxxSmall_2,medium:20,large:40},offset:{default:1}},spacing:{slider:{position:me.xxxxSmall_2},icon:{position:me.xxxSmall_4},transform:{default:`translateX(${me.medium_16}px)`,transition:"transform 0.15s ease-in-out"}}},kg=Au(Ut,{color:{bg:{switch:{off:P.white50,disabledOff:P.white32,activeOff:P.white64,disabledOn:P.white32,on:P.white,activeOn:P.offWhite},slider:{off:P.eggplant,on:P.eggplant},icon:{on:P.white,off:P.white,disabledOff:P.white50,disabledOn:P.white50}},outline:{default:P.white}}}),qg={default:Ut,khanmigo:kg},Ko=Ru(Ut);function Tg(t){const e=k.useContext(ju),r=qg[e]||Ut;return k.createElement(Ko.Provider,{value:r},t.children)}const Ag=as("span"),Rg=as("input"),Og=k.forwardRef(function(e,r){const{"aria-label":n,"aria-labelledby":a,"aria-describedby":i,checked:s,disabled:o=!1,icon:l,id:u,onChange:y,testId:m}=e,h=is("labeled-field"),p=u??h.get("labeled-field-id"),{theme:c,themeName:b}=Ou(Ko),T=xu(xg,c),R=()=>{!o&&y&&y(!s)},A=()=>{},O=jg(s,y!==void 0,o,c,b);let f;return l&&(f=k.cloneElement(l,{size:"small",style:[T.icon,O.icon],"aria-hidden":!0})),k.createElement(K,{onClick:R,style:[T.switch,O.switch,o&&T.disabled],testId:m},k.createElement(Rg,{"aria-describedby":i,"aria-label":n,"aria-labelledby":a,checked:s,"aria-disabled":o,id:p,onChange:A,ref:r,role:"switch",style:T.hidden,type:"checkbox"}),l&&f,k.createElement(Ag,{style:[T.slider,O.slider]}))}),xg=t=>({hidden:{opacity:0,height:t.size.height.none,width:t.size.width.none},switch:{display:"inline-flex",height:t.size.height.large,width:t.size.width.large,borderRadius:t.border.radius.small,flexShrink:0,":hover":{outlineOffset:t.size.offset.default},":focus-within":{outline:`solid ${t.size.width.small}px ${t.color.outline.default}`,outlineOffset:t.size.offset.default}},disabled:{cursor:"not-allowed",":hover":{outline:"none"}},slider:{position:"absolute",top:t.spacing.slider.position,left:t.spacing.slider.position,height:t.size.height.medium,width:t.size.width.medium,borderRadius:t.border.radius.full,backgroundColor:t.color.bg.slider.on,transition:t.spacing.transform.transition},icon:{position:"absolute",top:t.spacing.icon.position,left:t.spacing.icon.position,zIndex:1,transition:t.spacing.transform.transition}}),Br={},jg=(t,e,r,n,a)=>{const i=`${t}-${e}-${r}-${a}`;if(Br[i])return Br[i];let s={};const o={cursor:e?"pointer":"auto",":hover":{outline:e?`solid ${n.size.width.small}px ${n.color.outline.default}`:"none"}};return t?s={switch:rn({backgroundColor:r?n.color.bg.switch.disabledOn:n.color.bg.switch.on,":active":{backgroundColor:!r&&e?n.color.bg.switch.activeOn:void 0}},o),slider:{transform:n.spacing.transform.default},icon:{color:r?n.color.bg.icon.disabledOn:n.color.bg.icon.on,transform:n.spacing.transform.default}}:s={switch:rn({backgroundColor:r?n.color.bg.switch.disabledOff:n.color.bg.switch.off,":active":{backgroundColor:!r&&e?n.color.bg.switch.activeOff:void 0}},o),slider:{backgroundColor:n.color.bg.slider.off},icon:{color:r?n.color.bg.icon.disabledOff:n.color.bg.icon.off}},Br[i]=j.StyleSheet.create(s),Br[i]},Bo=k.forwardRef(function(e,r){return k.createElement(Tg,null,k.createElement(Og,rn({},e,{ref:r})))});Bo.displayName="Switch";const Yo=t=>{const e=is(),r=e.get("hide-answers-toggle"),n=e.get("hide-answers-label"),{strings:a}=ea();return q(K,{style:Wg.switchWrapper,children:[d(Bo,{id:r,checked:t.areAnswersHidden,onChange:t.onChange,"aria-labelledby":n}),d(ss,{id:n,htmlFor:r,tag:"label",children:a.hideAnswersToggleLabel})]})},Wg=j.StyleSheet.create({switchWrapper:{display:"flex",flexDirection:"row",flexWrap:"wrap-reverse",alignItems:"center",gap:"0.5em",marginTop:"1em"}});Yo.__docgenInfo={description:"",methods:[],displayName:"HideAnswersToggle",props:{areAnswersHidden:{required:!0,tsType:{name:"boolean"},description:""},onChange:{required:!0,tsType:{name:'ReactComponentPropsWithoutRef["onChange"]',raw:'React.ComponentPropsWithoutRef["onChange"]'},description:""}}};function zn(t){const e={hasAnswers:!1,isCorrect:!1};return t.selected&&t.selected.length>0&&(e.hasAnswers=!0),t.answers.length>0?t.selected&&t.selected.length===t.answers.length&&(e.isCorrect=t.selected.every(r=>t.answers.includes(r))):(!t.selected||t.selected.length===0)&&(e.isCorrect=!0),e}function Ln(t,e){let r=0,n=0;for(const a of t.markers){const i=zn(a);i.hasAnswers&&r++,i.isCorrect&&n++}return r!==t.markers.length?{type:"invalid",message:null}:{type:"points",earned:n===t.markers.length?1:0,total:1,message:null}}const ar=class ar extends k.Component{constructor(e){super(e),this._mounted=!1,this._markers=[],this.state={activeMarkerIndex:-1,markersInteracted:!1,hideAnswers:!1}}static validate(e,r){return Ln(e)}static pointInTriangle(e,r,n,a){const i=(u,y,m)=>(u.x-m.x)*(y.y-m.y)-(y.x-m.x)*(u.y-m.y),s=i(e,r,n)<0,o=i(e,n,a)<0,l=i(e,a,r)<0;return s===o&&o===l}static imageSideForMarkerPosition(e,r,n){if(n&&n!=="NONE"){if(n==="LEFT"&&e>20)return"right";if(n==="RIGHT"&&e<80)return"left";if(n==="UP"&&r>20)return"bottom";if(n==="DOWN"&&r<80)return"top"}if(e<20)return"left";if(e>80)return"right";const a={x:20,y:0},i={x:80,y:0},s={x:80,y:100},o={x:20,y:100},l={x:50,y:50},u={top:[a,i,l],right:[l,i,s],bottom:[o,l,s],left:[a,l,o]},y={x:e,y:r};for(const m of Object.keys(u)){const h=u[m];if(ar.pointInTriangle(y,...h))return m}return"center"}static navigateToMarkerIndex(e,r,n){const a=r[n],i=r.map((s,o)=>{const l=s.x-a.x,u=s.y-a.y,y=Math.sqrt(l**2+u**2);return{index:o,dist:y,dir:{x:y!==0?l/y:0,y:y!==0?u/y:0}}}).filter(s=>s.index===n?!1:r[s.index].showCorrectness!=="correct").sort((s,o)=>{const l=Math.round(s.dist*(e.x*s.dir.x+e.y*s.dir.y)),u=Math.round(o.dist*(e.x*o.dir.x+e.y*o.dir.y));let y,m;return e.x>0?(y=s.dir.x>0&&l!==0,m=o.dir.x>0&&u!==0):e.x<0?(y=s.dir.x<0&&l!==0,m=o.dir.x<0&&u!==0):e.y>0?(y=s.dir.y>0&&l!==0,m=o.dir.y>0&&u!==0):e.y<0&&(y=s.dir.y<0&&l!==0,m=o.dir.y<0&&u!==0),y!==m?y?-1:1:l-u});return i.length>0?i[0].index:n}componentDidMount(){this._mounted=!0}componentWillUnmount(){this._mounted=!1}simpleValidate(e){return Ln(this.getUserInput())}getUserInput(){const{markers:e}=this.props;return{markers:e}}showRationalesForCurrentlySelectedChoices(e){const{markers:r}=this.props,{onChange:n}=this.props,a=r.map(i=>{const s=zn(i);return{...i,showCorrectness:s.hasAnswers?s.isCorrect?"correct":"incorrect":void 0}});n({markers:a},null,!0)}handleMarkerChange(e,r){const{markers:n,onChange:a}=this.props,i=[...n.slice(0,e),{...r,showCorrectness:void 0},...n.slice(e+1)];a({markers:i})}activateMarker(e,r){var a;(a=this.props.analytics)==null||a.onAnalyticsEvent({type:"perseus:label-image:marker-interacted-with",payload:null});const{activeMarkerIndex:n}=this.state;n!==e&&r?this.setState({activeMarkerIndex:e,markersInteracted:!0}):this.setState({activeMarkerIndex:-1})}handleMarkerKeyDown(e,r){const{markers:n}=this.props;if(n.length<2)return;const a={ArrowUp:{x:0,y:-1},ArrowRight:{x:1,y:0},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0}}[r.key];if(!a)return;r.preventDefault();const i=this._markers[ar.navigateToMarkerIndex(a,n,e)];i&&Ar.findDOMNode(i).focus()}handleAnswerChoicesChangeForMarker(e,r){const{choices:n,markers:a}=this.props,i=n.filter((s,o)=>r[o]);this.handleMarkerChange(e,{...a[e],selected:i.length?i:void 0})}renderMarkers(){const{markers:e,questionCompleted:r,preferredPopoverDirection:n}=this.props,{activeMarkerIndex:a,markersInteracted:i}=this.state,s=this._mounted&&window.matchMedia(Er.xsOrSmaller.replace("@media ","")).matches,o=this.props.imageWidth/2>this.props.imageHeight;return e.map((l,u)=>{let y,m;s||o?(y=l.y>50?"top":"bottom",m=l.y>50?"bottom":"top"):(m=ar.imageSideForMarkerPosition(l.x,l.y,n),m==="center"&&(m="bottom"),y={left:"right",top:"bottom",right:"left",bottom:"top"}[m]);const h=zn(l),p=r&&h.hasAnswers&&h.isCorrect?"correct":l.showCorrectness,c=p==="correct",b={[`margin${m.charAt(0).toUpperCase()+m.slice(1)}`]:10},T=u===a,R=l.selected&&!T&&!this.state.hideAnswers;return d(K,{style:{position:"absolute",left:`${l.x}%`,top:`${l.y}%`,zIndex:"unset"},children:d(cu,{choices:this.props.choices.map(A=>({content:A,checked:l.selected?l.selected.includes(A):!1})),multipleSelect:this.props.multipleAnswers,onChange:A=>{var O;(O=this.props.analytics)==null||O.onAnalyticsEvent({type:"perseus:label-image:choiced-interacted-with",payload:null}),this.handleAnswerChoicesChangeForMarker(u,A)},onToggle:A=>this.activateMarker(u,A),disabled:c,opener:({opened:A})=>d(aa,{role:"button","aria-expanded":A,children:({hovered:O,focused:f,pressed:v})=>d(Wu,{...l,showCorrectness:p,showSelected:A,showPulsate:!i,ref:w=>this._markers[u]=w,showAnswer:R,answerSide:y,answerStyles:b,analytics:this.props.analytics,focused:f||v,hovered:O})},`marker-${l.x}.${l.y}`)},`answers-${l.x}.${l.y}`)},u)})}renderInstructions(){const{apiOptions:{isMobile:e},choices:r,multipleAnswers:n,hideChoicesFromInstructions:a}=this.props,{strings:i}=this.context,s=e?n?i.tapMultiple:i.tapSingle:n?i.clickMultiple:i.clickSingle,o=i.choices;return q("div",{className:We("perseus-label-image-widget-instructions",j.css(Se.instructions)),children:[q("div",{className:j.css(Se.instructionsCaption),children:[s," ",!a&&o]}),!a&&d("div",{className:j.css(Se.instructionsChoices),children:r.map((l,u)=>d("div",{className:j.css(Se.instructionsChoice),children:d(H,{content:l,strings:i})},u))})]})}render(){const{imageAlt:e,imageUrl:r,imageWidth:n,imageHeight:a}=this.props,{activeMarkerIndex:i}=this.state;return q("div",{children:[this.renderInstructions(),q("div",{className:j.css(Se.markersCanvas),style:{maxWidth:n,maxHeight:a},children:[d("div",{className:j.css(Se.imageContainer,i!==-1&&Se.imageInteractionDisabled),children:d(ia.Consumer,{children:({setAssetStatus:s})=>d(_r,{alt:e,src:r,width:n,height:a,setAssetStatus:s})})}),this.renderMarkers()]}),d(Yo,{areAnswersHidden:this.state.hideAnswers,onChange:s=>{var o;(o=this.props.analytics)==null||o.onAnalyticsEvent({type:"perseus:label-image:toggle-answers-hidden",payload:null}),this.setState({hideAnswers:s})}})]})}};ar.contextType=M;let gt=ar;const Se=j.StyleSheet.create({instructions:{paddingBottom:16},instructionsCaption:{...Go.bodyXsmallBold,paddingBottom:16},instructionsChoices:{display:"flex",flexWrap:"wrap",margin:"-8px 0"},instructionsChoice:{display:"flex",alignItems:"center",margin:"8px 0",":not(:last-child)":{"::after":{content:"''",display:"inline-block",position:"relative",width:2,height:2,marginLeft:5,marginRight:5,background:"rgba(33, 36, 44, 0.32)",borderRadius:2}}},markersCanvas:{position:"relative"},imageContainer:{display:"flex"},imageInteractionDisabled:{pointerEvents:"none"}}),Xo=k.forwardRef((t,e)=>{const r=ls();return d(gt,{ref:e,analytics:r.analytics,...t})});Xo.validate=Ln;const Cg={name:"label-image",displayName:"Label Image",widget:Xo,accessible:!0,isLintable:!0};gt.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[{name:"state",optional:!1,type:{name:"signature",type:"object",raw:`{ +| ChangeKeyboardInvitationVisibility`,elements:[{name:"Reinitialize"},{name:"MovePointInFigure"},{name:"MoveLine"},{name:"MoveAll"},{name:"MovePoint"},{name:"MoveCenter"},{name:"MoveRadiusPoint"},{name:"ChangeSnapStep"},{name:"ChangeRange"},{name:"AddPoint"},{name:"RemovePoint"},{name:"FocusPoint"},{name:"BlurPoint"},{name:"DeleteIntent"},{name:"ClickPoint"},{name:"ChangeInteractionMode"},{name:"ChangeKeyboardInvitationVisibility"}]}]},description:""},readOnly:{required:!0,tsType:{name:"boolean"},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""}}};function Xm(t,e){switch(t.type){case"angle":return te(e.type==="angle"),{...e,coords:t.coords};case"quadratic":return te(e.type==="quadratic"),{...e,coords:t.coords};case"circle":return te(e.type==="circle"),{...e,center:t.center,radius:ga(t)};case"linear":return te(e.type==="linear"),{...e,coords:t.coords};case"ray":return te(e.type==="ray"),{...e,coords:t.coords};case"sinusoid":return te(e.type==="sinusoid"),{...e,coords:t.coords};case"segment":return te(e.type==="segment"),{...e,coords:t.coords};case"linear-system":return te(e.type==="linear-system"),{...e,coords:t.coords};case"polygon":return te(e.type==="polygon"),{...e,coords:t.coords};case"point":return te(e.type==="point"),{...e,coords:t.coords};case"none":return te(e.type==="none"),{...e};default:throw new cr(t)}}function jn(t){const{graph:e,step:r,snapStep:n,range:a}=t,i={hasBeenInteractedWith:!1,range:a,snapStep:n};switch(e.type){case"segment":return{...i,type:"segment",coords:Qm(e,a,r)};case"linear":return{...i,type:e.type,coords:zi(e,a,r)};case"ray":return{...i,type:e.type,coords:zi(e,a,r)};case"linear-system":return{...i,type:e.type,coords:Jm(e,a,r)};case"polygon":return{...i,type:"polygon",showAngles:!!e.showAngles,showSides:!!e.showSides,coords:Zm(e,a,r),snapTo:e.snapTo??"grid"};case"point":return{...i,type:e.type,coords:Ym(e,a,r),numPoints:e.numPoints||0,focusedPointIndex:null,showRemovePointButton:!1,interactionMode:"mouse",showKeyboardInteractionInvitation:!1};case"circle":return{...i,type:e.type,...tg(e)};case"quadratic":return{...i,type:e.type,coords:rg(e,a,r)};case"sinusoid":return{...i,type:e.type,coords:eg(e,a,r)};case"angle":return{...i,type:e.type,showAngles:!!e.showAngles,coords:ng({graph:e,range:a,step:r}),angleOffsetDeg:Number(e.angleOffsetDeg),allowReflexAngles:!!e.allowReflexAngles,snapDegrees:Number(e.snapDegrees)};case"none":return{...i,type:"none"};default:throw new cr(e)}}function Ym(t,e,r){var o,l;const n=t.numPoints||1;let a=(o=t.coords)==null?void 0:o.slice();if(a)return a;const i=(l=t.startCoords)==null?void 0:l.slice();if(i)return i;switch(n){case 1:a=[t.coord||[0,0]];break;case 2:a=[[-5,0],[5,0]];break;case 3:a=[[-5,0],[0,0],[5,0]];break;case 4:a=[[-6,0],[-2,0],[2,0],[6,0]];break;case 5:a=[[-6,0],[-3,0],[0,0],[3,0],[6,0]];break;case 6:a=[[-5,0],[-3,0],[-1,0],[1,0],[3,0],[5,0]];break;default:a=[];break}const s=da(a,[[-10,10],[-10,10]]);return Le(e,r,s)}function Qm(t,e,r){if(t.coords)return t.coords;if(t.startCoords)return t.startCoords;const n=i=>{switch(i){case 2:return[5,-5];case 3:return[5,0,-5];case 4:return[6,2,-2,-6];case 5:return[6,3,0,-3,-6];case 6:return[5,3,1,-1,-3,-5];default:return[5]}},a=[[-10,10],[-10,10]];return n(t.numSegments).map(i=>{let s=[[-5,i],[5,i]];return s=da(s,a),s=Le(e,r,s),s})}const Go=[[[.25,.75],[.75,.75]],[[.25,.25],[.75,.25]]];function zi(t,e,r){return t.coords?t.coords:t.startCoords?t.startCoords:Le(e,r,Go[0])}function Jm(t,e,r){return t.coords?t.coords:t.startCoords?t.startCoords:Go.map(n=>Le(e,r,n))}function Zm(t,e,r){var o,l;let n=(o=t.coords)==null?void 0:o.slice();if(n)return n;const a=(l=t.startCoords)==null?void 0:l.slice();if(a)return a;const i=t.numSides||3;if(i==="unlimited")n=[];else{const u=2*Math.PI/i,y=(1/i-1/2)*Math.PI,m=t.snapTo==="sides"?Math.sqrt(3)/3*7:4;n=[...Array(i).keys()].map(h=>[m*Math.cos(h*u+y),m*Math.sin(h*u+y)])}n=da(n,[[-10,10],[-10,10]]);const s=!["angles","sides"].includes(t.snapTo||"");return n=Le(e,r,n,!s),n}function eg(t,e,r){if(t.coords)return[t.coords[0],t.coords[1]];if(t.startCoords)return[t.startCoords[0],t.startCoords[1]];let n=[[.5,.5],[.65,.6]];return n=Le(e,r,n,!0),n}function rg(t,e,r){return t.coords?t.coords:t.startCoords?t.startCoords:Le(e,r,[[.25,.75],[.5,.25],[.75,.75]],!0)}function tg(t){var e;return t.center!=null&&t.radius!=null?{center:t.center,radiusPoint:A.add(t.center,[t.radius,0])}:(e=t.startCoords)!=null&&e.center&&t.startCoords.radius?{center:t.startCoords.center,radiusPoint:A.add(t.startCoords.center,[t.startCoords.radius,0])}:{center:[0,0],radiusPoint:[2,0]}}const ng=t=>{const{graph:e,range:r,step:n}=t;if(e.coords)return e.coords;if(e.startCoords)return e.startCoords;const{snapDegrees:a,angleOffsetDeg:i}=e,s=a||1;let o=s;for(;o<20;)o+=s;o=o*Math.PI/180;const l=(i||0)*Math.PI/180;let u=[[.85,.5],[.5,.5]];u=Le(r,n,u,!0);const y=nr(ar(...u)),m=[...u,[0,0]];return m[0]=[m[1][0]+y*Math.cos(l),m[1][1]+y*Math.sin(l)],m[2]=[m[1][0]+y*Math.cos(o+l),m[1][1]+y*Math.sin(o+l)],m},Wn=2;function ag(t,e){switch(e.type){case qo:return jn(e.params);case bo:return yg(t,e);case so:return mg(t,e);case po:return gg(t,e);case co:return hg(t,e);case vo:return pg(t,e);case fo:return cg(t,e);case wo:return bg(t,e);case ko:return vg(t,e);case oo:return fg(t,e);case lo:return Bo(t,e);case uo:return sg(t,e);case yo:return og(t);case io:return ig(t);case mo:return lg(t,e);case go:return ug(t,e);case ho:return dg(t,e);default:throw new cr(e)}}function ig(t,e){return t.type==="point"&&t.numPoints==="unlimited"&&t.focusedPointIndex!==null?Bo(t,F.pointGraph.removePoint(t.focusedPointIndex)):t}function sg(t,e){switch(t.type){case"point":return{...t,focusedPointIndex:e.index};default:return t}}function og(t,e){switch(t.type){case"point":return{...t,focusedPointIndex:null,showRemovePointButton:!1};default:return t}}function lg(t,e){return t.type!=="point"?t:t.numPoints==="unlimited"?{...t,focusedPointIndex:e.index,showRemovePointButton:!0}:t}function ug(t,e){if(t.type!=="point")return t;if(t.numPoints==="unlimited"){const r=e.mode==="keyboard"?!1:t.showKeyboardInteractionInvitation;return{...t,interactionMode:e.mode,showKeyboardInteractionInvitation:r}}return t}function dg(t,e){return t.type!=="point"?t:t.numPoints==="unlimited"?{...t,showKeyboardInteractionInvitation:e.shouldShow,hasBeenInteractedWith:!0}:t}function yg(t,e){switch(t.type){case"segment":case"linear-system":{const r=Ig({array:t.coords,index:e.figureIndex,update:a=>qe({array:a,index:e.pointIndex,newValue:Ue(e.destination,t)})}),n=r[e.figureIndex];return Cg(n)?t:{...t,hasBeenInteractedWith:!0,coords:r}}case"linear":case"ray":{const r=qe({array:t.coords,index:e.pointIndex,newValue:Ue(e.destination,t)});return{...t,hasBeenInteractedWith:!0,coords:r}}case"angle":case"circle":throw new Error("FIXME implement circle reducer");case"none":case"point":case"polygon":case"quadratic":case"sinusoid":throw new Error(`Don't use movePointInFigure for ${t.type} graphs. Use movePoint instead!`);default:throw new cr(t)}}function mg(t,e){const{snapStep:r,range:n}=t;switch(t.type){case"segment":case"linear-system":{if(e.itemIndex===void 0)throw new Error("Please provide index of line to move");const a=t.coords[e.itemIndex];if(!a)throw new Error("No line to move");const i=mt(a,e.delta,{snapStep:r,range:n}),s=[ee(r,A.add(a[0],i)),ee(r,A.add(a[1],i))],o=qe({array:t.coords,index:e.itemIndex,newValue:s});return{...t,type:t.type,hasBeenInteractedWith:!0,coords:o}}case"linear":case"ray":{const a=t.coords,i=mt(a,e.delta,{snapStep:r,range:n}),s=[ee(r,A.add(a[0],i)),ee(r,A.add(a[1],i))];return{...t,type:t.type,hasBeenInteractedWith:!0,coords:s}}default:return t}}function gg(t,e){const{snapStep:r,range:n}=t;switch(t.type){case"polygon":{let a;if(t.snapTo==="sides"||t.snapTo==="angles"){const i=mt(t.coords,e.delta,{snapStep:[0,0],range:n});a=t.coords.map(s=>A.add(s,i))}else{const i=mt(t.coords,e.delta,{snapStep:r,range:n});a=t.coords.map(s=>ee(r,A.add(s,i)))}return{...t,hasBeenInteractedWith:!0,coords:a}}default:return t}}function hg(t,e){switch(t.type){case"angle":const r=(()=>{if(e.index===1){const i=qg(t,e);return{...t,hasBeenInteractedWith:!0,coords:i}}return{...t,hasBeenInteractedWith:!0,coords:qe({array:t.coords,index:e.index,newValue:Ag(e.destination,t,e.index)})}})();return Rg(r)?t:r;case"polygon":let n;t.snapTo==="sides"?n=xg(e.destination,t,e.index):t.snapTo==="angles"?n=Og(e.destination,t,e.index):n=Ue(e.destination,t);const a=qe({array:t.coords,index:e.index,newValue:n});return _l(a)?t:{...t,hasBeenInteractedWith:!0,coords:a};case"point":return{...t,hasBeenInteractedWith:!0,coords:qe({array:t.coords,index:e.index,newValue:Ue(e.destination,t)})};case"sinusoid":{const i=e.destination,s=Ue(i,t),o=[...t.coords];return o[e.index]=s,o[0][C]===o[1][C]?t:{...t,hasBeenInteractedWith:!0,coords:qe({array:t.coords,index:e.index,newValue:s})}}case"quadratic":{const i=[...t.coords],s=Ue(e.destination,t);return i[e.index]=s,Fo(i)===void 0?t:{...t,hasBeenInteractedWith:!0,coords:qe({array:t.coords,index:e.index,newValue:s})}}default:throw new Error("The movePoint action is only for point, quadratic, and polygon graphs")}}function pg(t,e){switch(t.type){case"circle":{const r=Ue(e.destination,t),n=[...A.add(t.radiusPoint,A.sub(r,t.center))],[a,i]=t.range[C],[s]=n;if(si){const o=(s-r[C])*2,l=s-o;l>=a&&l<=i&&(n[C]=l)}return{...t,hasBeenInteractedWith:!0,center:r,radiusPoint:n}}default:throw new Error("The doMoveCenter action is only for circle graphs")}}function cg(t,e){switch(t.type){case"circle":{const[r,n]=t.range[C],a=ee(t.snapStep,[lr(e.destination[C]+0,r,n),t.center[1]]);return g.isEqual(a,t.center)?t:{...t,hasBeenInteractedWith:!0,radiusPoint:a}}default:throw new Error("The doMoveRadiusPoint action is only for circle graphs")}}function bg(t,e){return g.isEqual(t.snapStep,e.snapStep)?t:{...t,snapStep:e.snapStep}}function vg(t,e){return g.isEqual(t.range,e.range)?t:{...t,range:e.range}}function fg(t,e){if(t.type!=="point")return t;const{snapStep:r}=t,n=ee(r,e.location);for(const a of t.coords)if(a[C]===n[C]&&a[L]===n[L])return t;return{...t,hasBeenInteractedWith:!0,coords:[...t.coords,n],showRemovePointButton:!1}}function Bo(t,e){return t.type!=="point"?t:{...t,coords:t.coords.filter((r,n)=>n!==e.index),focusedPointIndex:null,showRemovePointButton:!1}}const wg=(t,e,r)=>{const[n,a]=r,i=Math.min(...t.map(m=>m[C])),s=Math.min(...t.map(m=>m[L])),o=Math.max(...e.map(m=>m[C])),l=Math.max(...e.map(m=>m[L])),u=lr(n,o,i),y=lr(a,l,s);return[u,y]},mt=(t,e,r)=>{const n=t.map(o=>jg({...r,point:o})),a=t.map(o=>Wg({...r,point:o})),[i,s]=wg(n,a,e);return[i,s]},kg=z.eq;function Jr(t,e){return t{a[y]=m}),a}function Li(t,e,r){return A.dist(t,e)<2}function Tg(t,e,r,n){const a=[r[0][0]+n[0],r[1][0]+n[0]],i=[r[0][1]-n[1],r[1][1]-n[1]];let s=t;return s[0]i[0]&&(s=[i[0],s[1]-(s[0]-i[0])*Math.tan(e)]),s[1]i[1]&&(s=[s[0]-(s[1]-i[1])/Math.tan(e),i[1]]),s}function Ag(t,{range:e,coords:r,snapDegrees:n,angleOffsetDeg:a,snapStep:i},s){const o=n||1,l=a||0,u=[...r],y=[[e[0][0]+i[0],e[0][1]-i[0]],[e[1][0]+i[1],e[1][1]-i[1]]],m=Qe({snapStep:[0,0],range:y,point:t});u[s]=m;const h=r[1];let p=Ae(u[s],h);p=Math.round((p-l)/o)*o+l;const c=Wn+.01,b=Math.max(A.dist(u[s],h),c);return A.add(h,zr(b,p))}function Rg(t){return Li(t.coords[0],t.coords[1],t.range)||Li(t.coords[2],t.coords[1],t.range)}function Og(t,{range:e,coords:r},n){const a=r[n],i=[...r];i[n]=Qe({snapStep:[0,0],range:e,point:t});const s=is(i).map(b=>b*180/Math.PI),o=b=>(n+b+i.length)%i.length;g.each([-1,1],function(b){s[o(b)]=Math.round(s[o(b)])});const l=function(b,w,q){return(Ae(i[o(b)],i[o(q)],i[o(w)])+360)%360},u=[s[o(-1)]-l(-2,-1,1),s[o(1)]-l(-1,1,2)];if(u[2]=180-(u[0]+u[1]),u.some(function(b){return Jr(b,1)}))return a;const y=nr(ar(i[o(-1)],i[o(1)])),m=rt(tt(i[o(-1)],i[o(1)],i[n]))===1,h=Math.sin(u[1]*Math.PI/180)/Math.sin(u[2]*Math.PI/180)*y,p=Ae(i[o(1)],i[o(-1)]),c=zr(h,p+(m?1:-1)*u[0]);return Wr(i[o(-1)],c)}function xg(t,{range:e,coords:r},n){const a=r[n],i=[...r];i[n]=Qe({snapStep:[0,0],range:e,point:t});const s=h=>(n+h+i.length)%i.length,o=g.map([[i[s(-1)],i[n]],[i[n],i[s(1)]],[i[s(-1)],i[s(1)]]],function(h){return nr(ar(...h))});if(g.each([0,1],function(h){o[h]=Math.round(o[h])}),Jr(o[1]+o[2],o[0])||Jr(o[0]+o[2],o[1])||Jr(o[0]+o[1],o[2]))return a;const l=ss(o[0],o[2],o[1]),u=Ae(i[s(1)],i[s(-1)]),y=rt(tt(i[s(-1)],i[s(1)],i[n]))===1,m=zr(o[0],u+(y?1:-1)*l);return Wr(i[s(-1)],m)}function jg({snapStep:t,range:e,point:r}){const n=Qe({snapStep:t,range:e,point:[1/0,1/0]});return A.sub(n,r)}function Wg({snapStep:t,range:e,point:r}){const n=Qe({snapStep:t,range:e,point:[-1/0,-1/0]});return A.sub(n,r)}const Cg=t=>t.some((e,r)=>t.some((n,a)=>r!==a&&Fl(e,n)));function Ig(t){const{array:e,index:r,update:n}=t,a=n(e[r]);return qe({array:e,index:r,newValue:a})}function qe(t){const{array:e,index:r,newValue:n}=t,a=[...e];return a[r]=n,a}const Ko=v.forwardRef((t,e)=>{const{onChange:r,graph:n}=t,[a,i]=v.useReducer(ag,t,jn);v.useImperativeHandle(e,()=>({getUserInput:()=>Om(a,n)}));const s=v.useRef(a);v.useEffect(()=>{s.current!==a&&r({graph:Xm(a,n)}),s.current=a},[r,a,n]);const[o,l]=t.snapStep;v.useEffect(()=>{i(ym([o,l]))},[i,o,l]);const[[u,y],[m,h]]=t.range;v.useEffect(()=>{i(mm([[u,y],[m,h]]))},[i,u,y,m,h]);const p=n.type==="segment"?n.numSegments:null,c=n.type==="point"?n.numPoints:null,b=n.type==="polygon"?n.numSides:null,w=n.type==="polygon"?n.snapTo:null,q=n.type==="polygon"?n.showAngles:null,k=n.type==="polygon"?n.showSides:null,T="startCoords"in n?n.startCoords:void 0,O=v.useRef(t),W=Cl(t);return v.useEffect(()=>{W.current!==O.current&&i(gm(W.current))},[n.type,c,p,b,w,q,k,W,T]),t.static?d(xn,{...t,state:jn({...t,graph:t.correct}),dispatch:i}):d(xn,{...t,state:a,dispatch:i})});Ko.__docgenInfo={description:"",methods:[{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:null}],displayName:"StatefulMafsGraph"};const _i=z.eq,Ie=z.deepEq;function Cn(t,e){var n,a,i;if(t.type==="none"&&e.correct.type==="none")return{type:"points",earned:0,total:0,message:null};const r=!!(t.coords||t.center&&t.radius);if(t.type===e.correct.type&&r){if(t.type==="linear"&&e.correct.type==="linear"&&t.coords!=null){const s=t.coords,o=e.correct.coords;if(J(o[0],o[1],s[0])&&J(o[0],o[1],s[1]))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="linear-system"&&e.correct.type==="linear-system"&&t.coords!=null){const s=t.coords,o=e.correct.coords;if(J(o[0][0],o[0][1],s[0][0])&&J(o[0][0],o[0][1],s[0][1])&&J(o[1][0],o[1][1],s[1][0])&&J(o[1][0],o[1][1],s[1][1])||J(o[0][0],o[0][1],s[1][0])&&J(o[0][0],o[0][1],s[1][1])&&J(o[1][0],o[1][1],s[0][0])&&J(o[1][0],o[1][1],s[0][1]))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="quadratic"&&e.correct.type==="quadratic"&&t.coords!=null){const s=En(t.coords),o=En(e.correct.coords);if(Ie(s,o))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="sinusoid"&&e.correct.type==="sinusoid"&&t.coords!=null){const s=Nn(t.coords),o=Nn(e.correct.coords),l=_a(s),u=_a(o);if(Ie(l,u))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="circle"&&e.correct.type==="circle"){if(Ie(t.center,e.correct.center)&&_i(t.radius,e.correct.radius))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="point"&&e.correct.type==="point"&&t.coords!=null){let s=e.correct.coords;if(s==null)throw new Error("Point graph rubric has null coords");const o=t.coords.slice();if(s=s.slice(),o==null||o.sort(),s.sort(),Ie(o,s))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="polygon"&&e.correct.type==="polygon"&&t.coords!=null){const s=(n=t.coords)==null?void 0:n.slice(),o=(a=e.correct.coords)==null?void 0:a.slice();let l;if(e.correct.match==="similar"?l=Vt(s,o,Number.POSITIVE_INFINITY):e.correct.match==="congruent"?l=Vt(s,o,kl):e.correct.match==="approx"?l=Vt(s,o,.1):(s.sort(),o.sort(),l=Ie(s,o)),l)return{type:"points",earned:1,total:1,message:null}}else if(t.type==="segment"&&e.correct.type==="segment"&&t.coords!=null){let s=z.deepClone(t.coords),o=z.deepClone((i=e.correct)==null?void 0:i.coords);if(s=g.invoke(s,"sort").sort(),o=g.invoke(o,"sort").sort(),Ie(s,o))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="ray"&&e.correct.type==="ray"&&t.coords!=null){const s=t.coords,o=e.correct.coords;if(Ie(s[0],o[0])&&J(o[0],o[1],s[1]))return{type:"points",earned:1,total:1,message:null}}else if(t.type==="angle"&&e.correct.type==="angle"){const s=t.coords,o=e.correct.coords;let l;if(e.correct.match==="congruent"){const u=g.map([s,o],function(y){return(Ve.findAngle(y[2],y[0],y[1])+360)%360});l=_i(...u)}else l=Ie(s[1],o[1])&&J(o[1],o[0],s[0])&&J(o[1],o[2],s[2]);if(l)return{type:"points",earned:1,total:1,message:null}}}return!r||g.isEqual(t,e.graph)?{type:"invalid",message:null}:{type:"points",earned:0,total:1,message:null}}const Ng="https://ka-perseus-graphie.s3.amazonaws.com/b1452c0d79fd0f7ff4c3af9488474a0a0decb361.png",Xo={url:null},In=z.eq,yr="unlimited";function Eg(t,e){return t??e}function Gr(t,e){return tYo(t)&&(t.graph.coords==null||t.graph.coords.length===0),Yo=t=>t.graph.type==="point"&&t.graph.numPoints===yr||t.graph.type==="polygon"&&t.graph.numSides===yr,ae=(t,e)=>new Be(`${t} called but current graph type is not a '${e}'`,Te.NotAllowed,{metadata:{graphType:e}});function Nn(t){const e=t[0],r=t[1],n=r[1]-e[1],a=Math.PI/(2*(r[0]-e[0])),i=e[0]*a,s=e[1];return[n,a,i,s]}function En(t){const e=t[0],r=t[1],n=t[2],a=(e[0]-r[0])*(e[0]-n[0])*(r[0]-n[0]);if(a===0)return;const i=(n[0]*(r[1]-e[1])+r[0]*(e[1]-n[1])+e[0]*(n[1]-r[1]))/a,s=(n[0]*n[0]*(e[1]-r[1])+r[0]*r[0]*(n[1]-e[1])+e[0]*e[0]*(r[1]-n[1]))/a,o=(r[0]*n[0]*(r[0]-n[0])*e[1]+n[0]*e[0]*(n[0]-e[0])*r[1]+e[0]*r[0]*(e[0]-r[0])*n[1])/a;return[i,s,o]}const Ot=class Ot extends v.Component{constructor(){super(...arguments),this.state={shouldShowInstructions:Pi(this.props)},this._getShouldShowInstructions=e=>(e=e||this.props,this.isClickToAddPoints(e)&&(e.graph.coords==null||e.graph.coords.length===0)),this.setGraphie=e=>{this.graphie=e,this.setupGraphie()},this.handleAddPointsMouseDown=e=>{var r;if(!this.isClickToAddPoints())throw new Be("handleAddPointsClick should not be registeredwhen isClickToAddPoints() is false",Te.NotAllowed);if(!this.isCoordInTrash(e)){let n;if(this.props.graph.type==="point"){if(n=this.createPointForPointsType(e,this.points.length),!n.constrain()){n.remove();return}this.points.push(n);const a=this.points.length-1;this.points[a].grab(e),this.updateCoordsFromPoints()}else if(this.props.graph.type==="polygon"){if((r=this.polygon)!=null&&r.closed())return;n=this.createPointForPolygonType(e,this.points.length),this.points.push(n);const a=this.points.length-1;this.points[a].grab(e),this.updatePolygon()}this.setState({shouldShowInstructions:!1})}},this.resetGraphie=()=>{var e;this.shouldResetGraphie=!1,this.parabola=null,this.sinusoid=null,(e=this.refs.graph)==null||e.reset()},this.setupGraphie=()=>{var r,n;this.setTrashCanVisibility(0),this.isClickToAddPoints()&&this.setTrashCanVisibility(.5),this.props.apiOptions.isMobile&&(this.horizHairline=new Cr(this.graphie,[0,0],[0,0],{normalStyle:{strokeWidth:1}}),this.horizHairline.attr({stroke:j.INTERACTIVE}),(r=this.horizHairline)==null||r.hide(),this.vertHairline=new Cr(this.graphie,[0,0],[0,0],{normalStyle:{strokeWidth:1}}),this.vertHairline.attr({stroke:j.INTERACTIVE}),(n=this.vertHairline)==null||n.hide());const e=this.props.graph.type;this["add"+Zr(e)+"Controls"]()},this.showHairlines=e=>{var r,n,a,i;this.props.apiOptions.isMobile&&this.props.markings!=="none"&&((r=this.horizHairline)==null||r.moveTo([this.props.range[0][0],e[1]],[this.props.range[0][1],e[1]]),(n=this.horizHairline)==null||n.show(),(a=this.vertHairline)==null||a.moveTo([e[0],this.props.range[1][0]],[e[0],this.props.range[1][1]]),(i=this.vertHairline)==null||i.show())},this.hideHairlines=()=>{var e,r;this.props.apiOptions.isMobile&&((e=this.horizHairline)==null||e.hide(),(r=this.vertHairline)==null||r.hide())},this.setTrashCanVisibility=e=>{var n,a;const r=this.graphie;Xn(e,0)?this.trashCan&&(this.trashCan.remove(),this.trashCan=null):this.props.apiOptions.isMobile||(this.trashCan||(this.trashCan=(n=r==null?void 0:r.raphael)==null?void 0:n.image(Ng,r.xpixels-40,r.ypixels-40,40,40)),(a=this.trashCan)==null||a.attr({opacity:e}))},this.isClickToAddPoints=e=>(e=e||this.props,Yo(e)),this._lineStroke=()=>this.props.isMobile?{"stroke-width":3}:{},this.addLine=e=>{const r=this,n=r.graphie,a=ne.getLineCoords(r.props.graph,r.props),i=r.points=g.map(a,o=>I.addMaybeMobileMovablePoint(this,{coord:o,constraints:[I.MovablePoint.constraints.bound(),I.MovablePoint.constraints.snap()],onMove:()=>{const l=g.extend({},r.props.graph,{coords:g.invoke(i,"coord")});r.onChange({graph:l})}})),s={points:i,static:!0,normalStyle:{stroke:this.props.apiOptions.isMobile?j.BLUE_C:j.INTERACTIVE,...this._lineStroke()}};e==="line"?s.extendLine=!0:e==="ray"&&(s.extendRay=!0),r.line=I.addMovableLine(n,s),i[0].listen("constraints","isLine",o=>!je(o,i[1].coord())),i[1].listen("constraints","isLine",o=>!je(o,i[0].coord()))},this.removeLine=()=>{var e;g.invoke(this.points,"remove"),(e=this.line)==null||e.remove()},this.addNoneControls=()=>{},this.removeNoneControls=()=>{},this.addLinearControls=()=>{this.addLine("line")},this.removeLinearControls=()=>{this.removeLine()},this.addQuadraticControls=()=>{if(this.props.graph.type!=="quadratic")throw ae("addQuadraticControls","quadratic");let e=this.props.graph.coords;e||(e=ne.defaultQuadraticCoords(this.props));const r=()=>{const s=g.extend({},this.props.graph,{coords:[n.coord(),a.coord(),i.coord()]});this.onChange({graph:s}),this.updateQuadratic()};let n=null;n=this.pointA=I.addMaybeMobileMovablePoint(this,{coord:e[0],constraints:[I.MovablePoint.constraints.bound(),I.MovablePoint.constraints.snap(),s=>!n||s[0]!==a.coord()[0]&&s[0]!==i.coord()[0]],onMove:r});let a=null;a=this.pointB=I.addMaybeMobileMovablePoint(this,{coord:e[1],constraints:[I.MovablePoint.constraints.bound(),I.MovablePoint.constraints.snap(),s=>!a||s[0]!==n.coord()[0]&&s[0]!==i.coord()[0]],onMove:r});let i=null;i=this.pointC=I.addMaybeMobileMovablePoint(this,{coord:e[2],constraints:[I.MovablePoint.constraints.bound(),I.MovablePoint.constraints.snap(),s=>!i||s[0]!==n.coord()[0]&&s[0]!==a.coord()[0]],onMove:r}),this.updateQuadratic()},this.updateQuadratic=()=>{var i,s,o,l,u;const e=ne.getCurrentQuadraticCoefficients(this.props);if(!e)return;const r=e[0],n=e[1],a=e[2];if(this.parabola){const y=(i=this.graphie)==null?void 0:i.svgParabolaPath(r,n,a);(s=this.parabola)==null||s.attr({path:y})}else this.parabola=(o=this.graphie)==null?void 0:o.parabola(r,n,a),(l=this.parabola)==null||l.attr({stroke:this.props.apiOptions.isMobile?j.BLUE_C:j.DYNAMIC,...this._lineStroke()}),(u=this.parabola)==null||u.toBack()},this.removeQuadraticControls=()=>{var e,r,n;(e=this.pointA)==null||e.remove(),(r=this.pointB)==null||r.remove(),(n=this.pointC)==null||n.remove(),this.parabola&&(this.parabola.remove(),this.parabola=null)},this.addSinusoidControls=()=>{if(this.props.graph.type!=="sinusoid")throw ae("addSinusoidControls","sinusoid");let e=this.props.graph.coords;e||(e=ne.defaultSinusoidCoords(this.props));const r=()=>{const i=g.extend({},this.props.graph,{coords:[n.coord(),a.coord()]});this.onChange({graph:i}),this.updateSinusoid()};let n=null;n=this.pointA=I.addMaybeMobileMovablePoint(this,{coord:e[0],constraints:[I.MovablePoint.constraints.bound(),I.MovablePoint.constraints.snap(),i=>!n||i[0]!==a.coord()[0]],onMove:r});const a=this.pointB=I.addMaybeMobileMovablePoint(this,{coord:e[1],constraints:[I.MovablePoint.constraints.bound(),I.MovablePoint.constraints.snap(),i=>!n||i[0]!==n.coord()[0]],onMove:r});this.updateSinusoid()},this.updateSinusoid=()=>{var s,o,l,u,y;const e=ne.getCurrentSinusoidCoefficients(this.props);if(!e)return;const r=e[0],n=e[1],a=e[2],i=e[3];if(this.sinusoid){const m=(s=this.graphie)==null?void 0:s.svgSinusoidPath(r,n,a,i);(o=this.sinusoid)==null||o.attr({path:m})}else this.sinusoid=(l=this.graphie)==null?void 0:l.sinusoid(r,n,a,i),(u=this.sinusoid)==null||u.attr({stroke:this.props.apiOptions.isMobile?j.BLUE_C:j.DYNAMIC,...this._lineStroke()}),(y=this.sinusoid)==null||y.toBack()},this.removeSinusoidControls=()=>{var e,r;(e=this.pointA)==null||e.remove(),(r=this.pointB)==null||r.remove(),this.sinusoid&&(this.sinusoid.remove(),this.sinusoid=null)},this.addCircleControls=()=>{const e=this.graphie,r=g.min(e.snap),n=this.circle=e==null?void 0:e.addCircleGraph({center:this.props.graph.center||[0,0],radius:this.props.graph.radius||g.min(this.props.step),snapX:e.snap[0],snapY:e.snap[1],minRadius:r,snapRadius:r});_(n).on("move",()=>{const a=g.extend({},this.props.graph,{center:n.center,radius:n.radius});this.onChange({graph:a})})},this.removeCircleControls=()=>{var e;(e=this.circle)==null||e.remove()},this.addLinearSystemControls=()=>{const e=this.graphie,r=ne.getLinearSystemCoords(this.props.graph,this.props),n=[j.INTERACTIVE,j.GREEN],a=this.points=g.map(r,(i,s)=>{const o=[];for(let l=0;l{const m=o[1-l];if(m)return!je(y,m.coord())}],onMove:()=>{const y=g.extend({},this.props.graph,{coords:g.map(this.points,m=>g.invoke(m,"coord"))});this.onChange({graph:y})},normalStyle:{fill:n[s]},highlightStyle:{fill:n[s]}}))}return o});this.lines=g.map(a,(i,s)=>I.addMovableLine(e,{points:i,static:!0,extendLine:!0,normalStyle:{stroke:n[s]}}))},this.removeLinearSystemControls=()=>{g.invoke(this.lines,"remove"),g.map(this.points,e=>g.invoke(e,"remove"))},this.isCoordInTrash=e=>{if(this.props.apiOptions.isMobile)return!1;const r=this.graphie,n=r==null?void 0:r.scalePoint(e);return n[0]>=r.xpixels-40&&n[1]>=r.ypixels-40},this.createPointForPointsType=(e,r)=>{const n=this,a=()=>{n.points=g.filter(n.points,function(s){return s!==i}),n.updateCoordsFromPoints(),setTimeout(i.remove.bind(i),0)};let i=null;return i=I.addMaybeMobileMovablePoint(this,{coord:e,constraints:[I.MovablePoint.constraints.bound(),I.MovablePoint.constraints.snap(),function(s){return g.all(n.points,function(o){return i===o||!je(s,o.coord())})}],onMoveStart:function(){n.isClickToAddPoints()&&n.setTrashCanVisibility(1)},onMove:n.updateCoordsFromPoints,onMoveEnd:function(s){n.isClickToAddPoints()&&(n.isCoordInTrash(s)&&a(),n.setTrashCanVisibility(.5))},...this.props.apiOptions.isMobile&&n.isClickToAddPoints()?{onRemove:a}:{}}),i},this.removePoint=e=>{let r=null;return this.points=g.filter(this.points,function(n,a){return n===e?(r=a,!1):!0}),r},this.createPointForPolygonType=(e,r)=>{if(this.props.graph.type!=="polygon")throw ae("createPointForPolygonType","polygon");const n=!g.contains(["angles","sides"],this.props.graph.snapTo),a=y=>(r+y+this.points.length)%this.points.length,i=()=>{var m,h;const y=this.removePoint(u);(m=this.polygon)!=null&&m.closed()&&(this.points=Fa(this.points,y),(h=this.polygon)==null||h.update({closed:!1})),this.updatePolygon(),this.clearCoords(),setTimeout(u.remove.bind(u),0)},s=Sy((y,m)=>{y.state.isInitialMove=m},1e3),o=y=>{var h,p,c,b,w,q;const m=this.points.length>1&&(u===this.points[0]&&je(y,g.last(this.points).coord())||u===g.last(this.points)&&je(y,this.points[0].coord()));if(this.isClickToAddPoints()){if(this.isCoordInTrash(y))i();else if(m){const k=this.points.pop();this.points.length>2?((h=this.polygon)==null||h.update({closed:!0}),this.updateCoordsFromPoints()):((p=this.polygon)==null||p.update({closed:!1}),this.clearCoords()),this.updatePolygon(),setTimeout(k.remove.bind(k),0)}else if(g.any(this.points,function(T){return T!==u&&je(T.coord(),y)}))this.removePoint(u),this.points.length<3?((c=this.polygon)==null||c.update({closed:!1}),this.clearCoords()):(b=this.polygon)!=null&&b.closed()&&this.updateCoordsFromPoints(),this.updatePolygon(),setTimeout(u.remove.bind(u),0);else{const T=u===g.head(this.points)||u===g.last(this.points),O=!u.hasMoved(),W=!u.state.isInitialMove,R=!((w=this.polygon)!=null&&w.closed()),E=this.points.length>2;T&&O&&W&&R&&E&&((q=this.polygon)==null||q.update({closed:!0}),this.updatePolygon(),this.updateCoordsFromPoints())}this.setTrashCanVisibility(.5)}s(u,!1)},l=y=>{var h,p;if(this.points==null||this.points.length===0)return!0;const m=g.invoke(this.points,"coord");if(m[r]=y,!this.isClickToAddPoints()){if(J(m[a(-2)],m[a(-1)],m[r])||J(m[a(-1)],m[r],m[a(1)])||J(m[r],m[a(1)],m[a(2)]))return!1;const c=g.zip(m,Fa(m));if(this.points.length>3)for(let b=-1;b<=0;b++){const w=c[a(b)],q=g.without(c,w,c[a(b-1)],c[a(b+1)]);for(let k=0;k2){const c=g.map(is(m),function(R){return R*180/Math.PI});g.each([-1,1],function(R){c[a(R)]=Math.round(c[a(R)])});const b=function(R,E,P){return(Ve.findAngle(m[a(R)],m[a(P)],m[a(E)])+360)%360},w=[c[a(-1)]-b(-2,-1,1),c[a(1)]-b(-1,1,2)];if(w[2]=180-(w[0]+w[1]),g.any(w,function(R){return Gr(R,1)}))return!1;const q=nr(ar(m[a(-1)],m[a(1)])),k=rt(tt(m[a(-1)],m[a(1)],m[r]))===1,T=Math.sin(w[1]*Math.PI/180)/Math.sin(w[2]*Math.PI/180)*q,O=Ve.findAngle(m[a(1)],m[a(-1)]),W=Sa(T,O+(k?1:-1)*w[0]);return(h=this.graphie)==null?void 0:h.addPoints(m[a(-1)],W)}if(this.props.graph.snapTo==="sides"&&this.points.length>1){const c=g.map([[m[a(-1)],m[r]],[m[r],m[a(1)]],[m[a(-1)],m[a(1)]]],function(T){return nr(ar(...T))});if(g.each([0,1],function(T){c[T]=Math.round(c[T])}),Gr(c[1]+c[2],c[0])||Gr(c[0]+c[2],c[1])||Gr(c[0]+c[1],c[2]))return!1;const b=ss(c[0],c[2],c[1]),w=Ve.findAngle(m[a(1)],m[a(-1)]),q=rt(tt(m[a(-1)],m[a(1)],m[r]))===1,k=Sa(c[0],w+(q?1:-1)*b);return(p=this.graphie)==null?void 0:p.addPoints(m[a(-1)],k)}return!0},u=I.addMaybeMobileMovablePoint(this,{coord:e,constraints:[I.MovablePoint.constraints.bound(),n?I.MovablePoint.constraints.snap():null,l],onMoveStart:()=>{this.isClickToAddPoints()&&this.setTrashCanVisibility(1)},onMove:()=>{var y;(y=this.polygon)!=null&&y.closed()&&this.updateCoordsFromPoints()},onMoveEnd:o,...this.props.apiOptions.isMobile&&this.isClickToAddPoints()?{onRemove:i}:{}});return u.state.isInitialMove=!0,u},this.updateCoordsFromPoints=()=>{const e=g.extend({},this.props.graph,{coords:g.map(this.points,function(r){return g.result(r,"coord")})});this.onChange({graph:e})},this.clearCoords=()=>{const e=g.extend({},this.props.graph,{coords:null});this.onChange({graph:e})},this.onChange=e=>{this.props.onChange(e),this.props.trackInteraction()},this.addPointControls=()=>{if(this.props.graph.type!=="point")throw ae("addPointControls","point");const e=ne.getPointCoords(this.props.graph,this.props);this.points=[],this.points=g.map(e,this.createPointForPointsType,this)},this.removePointControls=()=>{g.invoke(this.points,"remove")},this.addSegmentControls=()=>{if(this.props.graph.type!=="segment")throw ae("addSegmentControls","segment");const e=this,r=this.graphie,n=ne.getSegmentCoords(this.props.graph,this.props),a=i=>I.addMaybeMobileMovablePoint(this,i);this.points=[],this.lines=g.map(n,function(i,s){const o=function(){const y=g.extend({},e.props.graph,{coords:g.invoke(e.lines,"coords")});e.onChange({graph:y})},l=[];for(let y=0;y{const p=l[1-y];return p?!je(h,p.coord()):!1}],onMove:o}))}e.points=e.points.concat(l);const u=I.addMovableLine(r,{points:l,static:!1,constraints:[I.MovableLine.constraints.bound(),I.MovableLine.constraints.snap()],onMove:[I.MovableLine.onMove.updatePoints,o],normalStyle:{stroke:this.props.apiOptions.isMobile?j.BLUE_C:j.INTERACTIVE,...this._lineStroke()},highlightStyle:{stroke:this.props.apiOptions.isMobile?j.BLUE_C:j.INTERACTING,...this._lineStroke()}});return g.invoke(l,"toFront"),u},this)},this.removeSegmentControls=()=>{g.invoke(this.points,"remove"),g.invoke(this.lines,"remove")},this.addRayControls=()=>{this.addLine("ray")},this.removeRayControls=()=>{this.removeLine()},this.addPolygonControls=()=>{this.polygon=null;const e=ne.getPolygonCoords(this.props.graph,this.props);this.points=[],this.points=g.map(e,this.createPointForPolygonType,this),this.updatePolygon()},this.updatePolygon=()=>{if(this.props.graph.type!=="polygon")throw ae("updatePolygon","polygon");let e;this.polygon?e=this.polygon.closed():this.points.length>=3?e=!0:e=!1;const r=this.graphie,n=this.points.length,a=!g.contains(["angles","sides"],this.props.graph.snapTo),i=g.times(n,function(u){return!this.props.graph.showAngles||!e&&(u===0||u===n-1)?"":this.props.graph.snapTo==="angles"?"$deg0":"$deg1"},this),s=g.times(n,function(u){return e||u!==0&&u!==n-1},this),o=g.times(n,function(u){return this.props.graph.showAngles&&(e||u!==0&&u!==n-1)?1:0},this),l=g.times(n,function(u){return!this.props.graph.showSides||!e&&u===n-1?"":this.props.graph.snapTo==="sides"?"$len0":"$len1"},this);if(this.polygon==null){const u=this;u.polygon=I.addMovablePolygon(r,{constraints:[I.MovablePolygon.constraints.bound(),a?I.MovablePolygon.constraints.snap():null],closed:e,points:u.points,angleLabels:i,showRightAngleMarkers:s,numArcs:o,sideLabels:l,onMove:[I.MovablePolygon.onMove.updatePoints,function(){this.closed()&&u.updateCoordsFromPoints()}],normalStyle:{stroke:this.props.apiOptions.isMobile?j.BLUE_C:j.INTERACTIVE,...this._lineStroke()}})}else this.polygon.update({closed:e,points:this.points,angleLabels:i,showRightAngleMarkers:s,numArcs:o,sideLabels:l})},this.removePolygonControls=()=>{var e;g.invoke(this.points,"remove"),(e=this.polygon)==null||e.remove()},this.addAngleControls=()=>{if(this.props.graph.type!=="angle")throw ae("addAngleControls","angle");const e=this.props.graph,r=this.graphie,n=ne.getAngleCoords(this.props.graph,this.props);this.points=n.map(function(a,i){return r==null?void 0:r.addMovablePoint(g.extend({coord:a,normalStyle:{stroke:j.INTERACTIVE,fill:j.INTERACTIVE}},i===1?{snapX:r.snap[0],snapY:r.snap[1]}:{}))}),this.angle=r==null?void 0:r.addMovableAngle({points:this.points,snapDegrees:e.snapDegrees||1,snapOffsetDeg:e.angleOffsetDeg||0,angleLabel:e.showAngles?"$deg0":"",pushOut:2,allowReflex:Eg(e.allowReflexAngles,!0)}),_(this.angle).on("move",()=>{var a;this.onChange({graph:{...e,coords:(a=this.angle)==null?void 0:a.getClockwiseCoords()}})})},this.removeAngleControls=()=>{var e;g.invoke(this.points,"remove"),(e=this.angle)==null||e.remove()},this.toggleShowSides=()=>{if(this.props.graph.type!=="polygon")throw ae("toggleShowSides","polygon");const e=g.extend({},this.props.graph,{showSides:!this.props.graph.showSides});this.onChange({graph:e})},this.focus=_.noop}componentDidMount(){this.refs.graph&&this.setGraphie(this.refs.graph.graphie())}UNSAFE_componentWillReceiveProps(e){var r,n;this.isClickToAddPoints()!==this.isClickToAddPoints(e)&&(this.shouldResetGraphie=!0,this.setState({shouldShowInstructions:Pi(e)})),(((r=this.props.backgroundImage)==null?void 0:r.url)!==((n=e.backgroundImage)==null?void 0:n.url)||this.props.backgroundImage!==e.backgroundImage||this.props.containerSizeClass!==e.containerSizeClass)&&(this.shouldResetGraphie=!0)}componentDidUpdate(e,r){const n=e.graph.type,a=this.props.graph.type;(n!==a||e.graph.type==="angle"&&this.props.graph.type==="angle"&&this.areAngleGraphsEqual(e.graph,this.props.graph)||e.graph.type==="point"&&this.props.graph.type==="point"&&this.arePointGraphsEqual(e.graph,this.props.graph)||e.graph.type==="polygon"&&this.props.graph.type==="polygon"&&this.arePolygonGraphsEqual(e.graph,this.props.graph)||e.graph.type==="segment"&&this.props.graph.type==="segment"&&this.areSegmentGraphsEqual(e.graph,this.props.graph))&&(this["remove"+Zr(n)+"Controls"](),this["add"+Zr(a)+"Controls"]()),this.shouldResetGraphie&&this.resetGraphie()}areAngleGraphsEqual(e,r){return e.allowReflexAngles!==r.allowReflexAngles||e.angleOffsetDeg!==r.angleOffsetDeg||e.snapDegrees!==r.snapDegrees}arePointGraphsEqual(e,r){return e.numPoints!==r.numPoints}arePolygonGraphsEqual(e,r){return e.numSides!==r.numSides||e.showAngles!==r.showAngles||e.showSides!==r.showSides||e.snapTo!==r.snapTo}areSegmentGraphsEqual(e,r){return e.numSegments!==r.numSegments}getUserInput(){return ne.getUserInputFromProps(this.props)}simpleValidate(e){return Cn(this.getUserInput(),e)}render(){const e=Yn(this.props.containerSizeClass),r=this.props.gridStep||z.getGridStep(this.props.range,this.props.step,e[0]),n=this.props.snapStep||z.snapStepFromGridStep(r);let a;this.isClickToAddPoints()&&this.state.shouldShowInstructions?this.props.graph.type==="point"?a=this.context.strings.addPoints:this.props.graph.type==="polygon"&&(a=this.context.strings.addVertices):a=void 0;let i;this.isClickToAddPoints()&&(i=this.handleAddPointsMouseDown);const s=this.props.apiOptions.isMobile;return d("div",{className:"perseus-widget perseus-widget-interactive-graph",style:{width:e[0],height:e[1]},children:d(pu,{instructions:a,ref:"graph",box:e,labels:this.props.labels,range:this.props.range,step:s?z.constrainedTickStepsFromTickSteps(this.props.step,this.props.range):this.props.step,gridStep:r,snapStep:n,markings:this.props.markings,backgroundImage:this.props.backgroundImage,showProtractor:this.props.showProtractor,onMouseDown:i,onGraphieUpdated:this.setGraphie,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable,isMobile:s})})}};Ot.contextType=S,Ot.defaultProps={labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],backgroundImage:Xo,markings:"graph",showTooltips:!1,showProtractor:!1,graph:{type:"linear"}};let zn=Ot;const M=class M extends v.Component{constructor(){super(...arguments),this.legacyGraphRef=v.createRef(),this.mafsRef=v.createRef()}getUserInput(){var e,r;if((e=this.mafsRef.current)!=null&&e.getUserInput)return this.mafsRef.current.getUserInput();if((r=this.legacyGraphRef.current)!=null&&r.getUserInput)return this.legacyGraphRef.current.getUserInput();throw new Be("Cannot getUserInput from a graph that has never rendered",Te.NotAllowed)}simpleValidate(e){return Cn(this.getUserInput(),e)}render(){var r,n,a,i;const e=(n=(r=this.props.apiOptions)==null?void 0:r.flags)==null?void 0:n.mafs;if(Lg(e,this.props.graph)){const s=Yn(this.props.containerSizeClass),o=this.props.gridStep||z.getGridStep(this.props.range,this.props.step,s[0]),l=this.props.snapStep||z.snapStepFromGridStep(o);return d(Ko,{...this.props,flags:(a=this.props.apiOptions)==null?void 0:a.flags,ref:this.mafsRef,gridStep:o,snapStep:l,box:s,showTooltips:!!this.props.showTooltips,readOnly:(i=this.props.apiOptions)==null?void 0:i.readOnly})}return d(zn,{ref:this.legacyGraphRef,...this.props})}static getLineCoords(e,r){return e.coords||M.pointsFromNormalized(r,[[.25,.75],[.75,.75]])}static getPointCoords(e,r){const n=e.numPoints||1;let a=e.coords;if(a)return a;switch(n){case 1:a=[e.coord||[0,0]];break;case 2:a=[[-5,0],[5,0]];break;case 3:a=[[-5,0],[0,0],[5,0]];break;case 4:a=[[-6,0],[-2,0],[2,0],[6,0]];break;case 5:a=[[-6,0],[-3,0],[0,0],[3,0],[6,0]];break;case 6:a=[[-5,0],[-3,0],[-1,0],[1,0],[3,0],[5,0]];break;case yr:a=[];break}const i=[[-10,10],[-10,10]],s=M.normalizeCoords(a,i);return M.pointsFromNormalized(r,s)}static getLinearSystemCoords(e,r){return e.coords||g.map([[[.25,.75],[.75,.75]],[[.25,.25],[.75,.25]]],n=>M.pointsFromNormalized(r,n))}static getPolygonCoords(e,r){if(e.type!=="polygon")throw ae("toggleShowSides","polygon");let n=e.coords;if(n)return n;const a=e.numSides||3;if(a===yr)n=[];else{const o=2*Math.PI/a,l=(1/a-1/2)*Math.PI,u=e.snapTo==="sides"?Math.sqrt(3)/3*7:4;n=g.times(a,function(y){return[u*Math.cos(y*o+l),u*Math.sin(y*o+l)]})}const i=[[-10,10],[-10,10]];n=M.normalizeCoords(n,i);const s=!g.contains(["angles","sides"],e.snapTo);return n=M.pointsFromNormalized(r,n,!s),n}static getSegmentCoords(e,r){const n=e.coords;if(n)return n;const a=e.numSegments||1,i={1:[5],2:[5,-5],3:[5,0,-5],4:[6,2,-2,-6],5:[6,3,0,-3,-6],6:[5,3,1,-1,-3,-5]}[a],s=[[-10,10],[-10,10]];return i.map(function(o){let l=[[-5,o],[5,o]];return l=M.normalizeCoords(l,s),l=M.pointsFromNormalized(r,l),l})}static getAngleCoords(e,r){let n=e.coords;if(n)return n;const a=e.snapDegrees||1;let i=a;for(;i<20;)i+=a;i=i*Math.PI/180;const s=(e.angleOffsetDeg||0)*Math.PI/180;n=M.pointsFromNormalized(r,[[.85,.5],[.5,.5]]);const o=nr(ar(...n));return n[0]=[n[1][0]+o*Math.cos(s),n[1][1]+o*Math.sin(s)],n[2]=[n[1][0]+o*Math.cos(i+s),n[1][1]+o*Math.sin(i+s)],n}static normalizeCoords(e,r){return g.map(e,function(n){return g.map(n,function(a,i){const s=r[i][1]-r[i][0];return(a+r[i][1])/s})})}static getEquationString(e){const r=e.graph.type,n="get"+Zr(r)+"EquationString";return M[n](e)}static pointsFromNormalized(e,r,n){return g.map(r,function(a){return g.map(a,function(i,s){const o=e.range[s];if(n)return o[0]+(o[1]-o[0])*i;const l=e.step[s],u=zg(o,l),y=Math.round(i*u);return o[0]+l*y})})}static getNoneEquationString(){return""}static getLinearEquationString(e){const r=M.getLineCoords(e.graph,e);if(In(r[0][0],r[1][0]))return"x = "+r[0][0].toFixed(3);const n=(r[1][1]-r[0][1])/(r[1][0]-r[0][0]),a=r[0][1]-n*r[0][0];return In(n,0)?"y = "+a.toFixed(3):"y = "+n.toFixed(3)+"x + "+a.toFixed(3)}static getCurrentQuadraticCoefficients(e){const r=e.graph.coords||M.defaultQuadraticCoords(e);return En(r)}static defaultQuadraticCoords(e){const r=[[.25,.75],[.5,.25],[.75,.75]];return M.pointsFromNormalized(e,r)}static getQuadraticEquationString(e){const r=M.getCurrentQuadraticCoefficients(e);return"y = "+r[0].toFixed(3)+"x^2 + "+r[1].toFixed(3)+"x + "+r[2].toFixed(3)}static getCurrentSinusoidCoefficients(e){const r=e.graph.coords||M.defaultSinusoidCoords(e);return Nn(r)}static defaultSinusoidCoords(e){const r=[[.5,.5],[.65,.6]];return M.pointsFromNormalized(e,r)}static getSinusoidEquationString(e){const r=M.getCurrentSinusoidCoefficients(e);return"y = "+r[0].toFixed(3)+"sin("+r[1].toFixed(3)+"x - "+r[2].toFixed(3)+") + "+r[3].toFixed(3)}static getCircleEquationString(e){const r=e.graph,n=r.center||[0,0],a=r.radius||2;return"center ("+n[0]+", "+n[1]+"), radius "+a}static getLinearSystemEquationString(e){const r=M.getLinearSystemCoords(e.graph,e);return` +`+Pa(r[0][0],r[0][1])+` +`+Pa(r[1][0],r[1][1])+` +`+Sl(r[0],r[1])}static getPointEquationString(e){if(e.graph.type!=="point")throw ae("getPointEquationString","point");return M.getPointCoords(e.graph,e).map(function(n){return"("+n[0]+", "+n[1]+")"}).join(", ")}static getSegmentEquationString(e){if(e.graph.type!=="segment")throw ae("getSegmentEquationString","segment");const r=M.getSegmentCoords(e.graph,e);return g.map(r,function(n){return"["+g.map(n,function(a){return"("+a.join(", ")+")"}).join(" ")+"]"}).join(" ")}static getRayEquationString(e){if(e.graph.type!=="ray")throw ae("createPointForPolygonType","ray");const r=M.getLineCoords(e.graph,e),n=r[0],a=r[1];let i=M.getLinearEquationString(e);return n[0]>a[0]?i+=" (for x <= "+n[0].toFixed(3)+")":n[0]= "+n[0].toFixed(3)+")":n[1]>a[1]?i+=" (for y <= "+n[1].toFixed(3)+")":i+=" (for y >= "+n[1].toFixed(3)+")",i}static getPolygonEquationString(e){if(e.graph.type!=="polygon")throw ae("getPolygonEquationString","polygon");const r=M.getPolygonCoords(e.graph,e);return g.map(r,function(n){return"("+n.join(", ")+")"}).join(" ")}static getAngleEquationString(e){if(e.graph.type!=="angle")throw ae("getAngleEquationString","angle");const r=M.getAngleCoords(e.graph,e);return Ve.findAngle(r[2],r[0],r[1]).toFixed(0)+"° angle at ("+r[1].join(", ")+")"}static validate(e,r){return Cn(e,r)}static getUserInputFromProps(e){return e.graph}};M.defaultProps={labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],backgroundImage:Xo,markings:"graph",showTooltips:!1,showProtractor:!1,graph:{type:"linear"}};let ne=M;function Lg(t,e){if(typeof t=="boolean"||typeof t>"u")return!1;switch(e.type){case"none":return!0;case"point":return e.numPoints===yr?!!t["unlimited-point"]:!!t.point;case"polygon":return e.numSides===yr?!1:!!t.polygon;default:return!!t[e.type]}}const _g=g.identity,Pg={name:"interactive-graph",displayName:"Interactive graph (Assessments only)",widget:ne,staticTransform:_g},er={white:"#FFFFFF",gray98:"#FAFAFA",gray97:"#F6F7F7",gray95:"#F0F1F2",gray90:"#E3E5E6",gray85:"#D6D8DA",gray76:"#BABEC2",gray72:"#999A9D",gray68:"#888D93",gray55:"#707378",gray41:"#626569",gray25:"#3B3E40",gray17:"#21242C",gray10:"#1499af",black:"#000000",alertRed:tu,homepageBlue:nu,kaBlue:au,kaBlueLight:iu,kaGreen:su,kaGreenLight:ou,learnstormBlue:lu,backgroundBlue:uu,adminGreen:"#78C008",kaBlueExtraLight:"#39c2db",kaBlueHover:"#0c7f99",kaGreenHover:"#518005",skyDark:"#001f4d",recommendationGold:"#ffbe26",starAced:"#ff9c39",google:"#C1432f",modernGoogle:"#be2612",modernGoogleHover:"#8c1c0d",facebook:"#4267B2",modernFacebook:"#4267B2",modernFacebookHover:"#00294a",wonderBlocksGold:"#FFB100",wonderBlocksLightBlue:"#37C5FD",breadcrumbs:"rgba(255, 255, 255, 0.7)"},Fg=4,Fi={color:er.breadcrumbs,fontFamily:"inherit",fontSize:15,fontWeight:"bold",letterSpacing:.8,lineHeight:"19px",textTransform:"uppercase",MozOsxFontSmoothing:"grayscale",WebkitFontSmoothing:"antialiased"},Fe={regular:"inherit"},Qo={subjectHeadingDesktop:{fontFamily:"inherit",fontSize:50,fontWeight:"bold",lineHeight:"61px"},subjectHeadingMobile:{fontFamily:"inherit",fontSize:35,fontWeight:"bold",lineHeight:"37px"},conceptHeadingDesktop:{fontFamily:"inherit",fontSize:35,fontWeight:"bold",lineHeight:"37px"},conceptHeadingMobile:{fontFamily:"inherit",fontSize:23,fontWeight:"bold",lineHeight:"27px"},subheadingDesktop:{fontFamily:"inherit",fontSize:23,fontWeight:"bold",lineHeight:"27px"},subheadingMobile:{fontFamily:"inherit",fontSize:20,fontWeight:"bold",lineHeight:"24px"},smallSubheadingDesktop:{fontFamily:"inherit",fontSize:20,lineHeight:1.25},smallSubheadingMobile:{fontFamily:"inherit",fontSize:15,lineHeight:1.25},smallHeading:{color:er.gray25,fontFamily:"inherit",fontSize:17,fontWeight:"bold",lineHeight:"23px"},smallHeadingMobile:{color:er.gray25,fontFamily:"inherit",fontSize:15,fontWeight:"bold",lineHeight:"18px"},accentHeading:{color:er.gray68,fontFamily:"inherit",fontSize:15,fontWeight:"bold",letterSpacing:.8,lineHeight:"19px",textTransform:"uppercase"},bodyLarge:{fontFamily:Fe.regular,fontSize:20,lineHeight:"30px"},bodySmall:{fontFamily:Fe.regular,fontSize:17,fontWeight:"normal",lineHeight:"23px"},bodySmallBold:{fontFamily:Fe.regular,fontSize:17,fontWeight:"bold",lineHeight:"23px"},bodyXsmall:{fontFamily:Fe.regular,fontSize:15,lineHeight:"22px"},bodyXsmallBold:{fontFamily:"inherit",fontSize:15,fontWeight:"bold",lineHeight:"22px"},breadcrumb:Fi,breadcrumbSmall:{...Fi,fontSize:12,lineHeight:"13px"},labelLarge:{fontFamily:"inherit",fontSize:23,fontWeight:"bold",lineHeight:"27px"},labelMedium:{fontFamily:"inherit",fontSize:15,fontWeight:"bold",lineHeight:"18px"},labelSmall:{fontFamily:Fe.regular,fontSize:12,lineHeight:"14px"},caption:{fontFamily:Fe.regular,fontSize:14,fontStyle:"italic",lineHeight:"17px"},desktopScalingOnMobile:{MozTextSizeAdjust:"100%",MsTextSizeAdjust:"100%",WebkitTextSizeAdjust:"100%"},modalSubtitle:{fontSize:12,lineHeight:1.65,WebkitFontSmoothing:"antialiased",fontWeight:"bold"},wonderBlocksHeader:{paddingLeft:16,paddingRight:16,paddingBottom:24,paddingTop:34,[Ir.mdOrLarger]:{paddingBottom:32}},wonderBlocksTitle:{color:er.white,fontWeight:900,fontSize:28,lineHeight:"32px",margin:0,[Ir.mdOrLarger]:{fontSize:36,lineHeight:"40px"}},wonderBlocksLabelLarge:{fontSize:16,lineHeight:"20px",fontWeight:700}},bc=Object.freeze(Object.defineProperty({__proto__:null,borderRadius:Fg,colors:er,fonts:Fe,typography:Qo},Symbol.toStringTag,{value:"Module"})),Dt={color:{bg:{switch:{off:N.offBlack50,disabledOff:N.offBlack32,activeOff:N.offBlack64,on:N.blue,disabledOn:N.fadedBlue,activeOn:N.activeBlue},slider:{on:N.white,off:N.white},icon:{on:N.blue,disabledOn:N.fadedBlue,off:N.offBlack50,disabledOff:N.offBlack32}},outline:{default:N.blue}},border:{radius:{small:oe.small_12,full:Vl.radius.full}},size:{height:{none:0,medium:20,large:oe.large_24},width:{none:0,small:oe.xxxxSmall_2,medium:20,large:40},offset:{default:1}},spacing:{slider:{position:oe.xxxxSmall_2},icon:{position:oe.xxxSmall_4},transform:{default:`translateX(${oe.medium_16}px)`,transition:"transform 0.15s ease-in-out"}}},Sg=ku(Dt,{color:{bg:{switch:{off:N.white50,disabledOff:N.white32,activeOff:N.white64,disabledOn:N.white32,on:N.white,activeOn:N.offWhite},slider:{off:N.eggplant,on:N.eggplant},icon:{on:N.white,off:N.white,disabledOff:N.white50,disabledOn:N.white50}},outline:{default:N.white}}}),Mg={default:Dt,khanmigo:Sg},Jo=qu(Dt);function Ug(t){const e=v.useContext(Ru),r=Mg[e]||Dt;return v.createElement(Jo.Provider,{value:r},t.children)}const Dg=es("span"),Vg=es("input"),$g=v.forwardRef(function(e,r){const{"aria-label":n,"aria-labelledby":a,"aria-describedby":i,checked:s,disabled:o=!1,icon:l,id:u,onChange:y,testId:m}=e,h=rs("labeled-field"),p=u??h.get("labeled-field-id"),{theme:c,themeName:b}=Tu(Jo),w=Au(Hg,c),q=()=>{!o&&y&&y(!s)},k=()=>{},T=Gg(s,y!==void 0,o,c,b);let O;return l&&(O=v.cloneElement(l,{size:"small",style:[w.icon,T.icon],"aria-hidden":!0})),v.createElement(G,{onClick:q,style:[w.switch,T.switch,o&&w.disabled],testId:m},v.createElement(Vg,{"aria-describedby":i,"aria-label":n,"aria-labelledby":a,checked:s,"aria-disabled":o,id:p,onChange:k,ref:r,role:"switch",style:w.hidden,type:"checkbox"}),l&&O,v.createElement(Dg,{style:[w.slider,T.slider]}))}),Hg=t=>({hidden:{opacity:0,height:t.size.height.none,width:t.size.width.none},switch:{display:"inline-flex",height:t.size.height.large,width:t.size.width.large,borderRadius:t.border.radius.small,flexShrink:0,":hover":{outlineOffset:t.size.offset.default},":focus-within":{outline:`solid ${t.size.width.small}px ${t.color.outline.default}`,outlineOffset:t.size.offset.default}},disabled:{cursor:"not-allowed",":hover":{outline:"none"}},slider:{position:"absolute",top:t.spacing.slider.position,left:t.spacing.slider.position,height:t.size.height.medium,width:t.size.width.medium,borderRadius:t.border.radius.full,backgroundColor:t.color.bg.slider.on,transition:t.spacing.transform.transition},icon:{position:"absolute",top:t.spacing.icon.position,left:t.spacing.icon.position,zIndex:1,transition:t.spacing.transform.transition}}),Br={},Gg=(t,e,r,n,a)=>{const i=`${t}-${e}-${r}-${a}`;if(Br[i])return Br[i];let s={};const o={cursor:e?"pointer":"auto",":hover":{outline:e?`solid ${n.size.width.small}px ${n.color.outline.default}`:"none"}};return t?s={switch:Jt({backgroundColor:r?n.color.bg.switch.disabledOn:n.color.bg.switch.on,":active":{backgroundColor:!r&&e?n.color.bg.switch.activeOn:void 0}},o),slider:{transform:n.spacing.transform.default},icon:{color:r?n.color.bg.icon.disabledOn:n.color.bg.icon.on,transform:n.spacing.transform.default}}:s={switch:Jt({backgroundColor:r?n.color.bg.switch.disabledOff:n.color.bg.switch.off,":active":{backgroundColor:!r&&e?n.color.bg.switch.activeOff:void 0}},o),slider:{backgroundColor:n.color.bg.slider.off},icon:{color:r?n.color.bg.icon.disabledOff:n.color.bg.icon.off}},Br[i]=x.StyleSheet.create(s),Br[i]},Zo=v.forwardRef(function(e,r){return v.createElement(Ug,null,v.createElement($g,Jt({},e,{ref:r})))});Zo.displayName="Switch";const el=t=>{const e=rs(),r=e.get("hide-answers-toggle"),n=e.get("hide-answers-label"),{strings:a}=Jn();return f(G,{style:Bg.switchWrapper,children:[d(Zo,{id:r,checked:t.areAnswersHidden,onChange:t.onChange,"aria-labelledby":n}),d(ts,{id:n,htmlFor:r,tag:"label",children:a.hideAnswersToggleLabel})]})},Bg=x.StyleSheet.create({switchWrapper:{display:"flex",flexDirection:"row",flexWrap:"wrap-reverse",alignItems:"center",gap:"0.5em",marginTop:"1em"}});el.__docgenInfo={description:"",methods:[],displayName:"HideAnswersToggle",props:{areAnswersHidden:{required:!0,tsType:{name:"boolean"},description:""},onChange:{required:!0,tsType:{name:'ReactComponentPropsWithoutRef["onChange"]',raw:'React.ComponentPropsWithoutRef["onChange"]'},description:""}}};function Ln(t){const e={hasAnswers:!1,isCorrect:!1};return t.selected&&t.selected.length>0&&(e.hasAnswers=!0),t.answers.length>0?t.selected&&t.selected.length===t.answers.length&&(e.isCorrect=t.selected.every(r=>t.answers.includes(r))):(!t.selected||t.selected.length===0)&&(e.isCorrect=!0),e}function _n(t,e){let r=0,n=0;for(const a of t.markers){const i=Ln(a);i.hasAnswers&&r++,i.isCorrect&&n++}return r!==t.markers.length?{type:"invalid",message:null}:{type:"points",earned:n===t.markers.length?1:0,total:1,message:null}}const tr=class tr extends v.Component{constructor(e){super(e),this._mounted=!1,this._markers=[],this.state={activeMarkerIndex:-1,markersInteracted:!1,hideAnswers:!1}}static validate(e,r){return _n(e)}static pointInTriangle(e,r,n,a){const i=(u,y,m)=>(u.x-m.x)*(y.y-m.y)-(y.x-m.x)*(u.y-m.y),s=i(e,r,n)<0,o=i(e,n,a)<0,l=i(e,a,r)<0;return s===o&&o===l}static imageSideForMarkerPosition(e,r,n){if(n&&n!=="NONE"){if(n==="LEFT"&&e>20)return"right";if(n==="RIGHT"&&e<80)return"left";if(n==="UP"&&r>20)return"bottom";if(n==="DOWN"&&r<80)return"top"}if(e<20)return"left";if(e>80)return"right";const a={x:20,y:0},i={x:80,y:0},s={x:80,y:100},o={x:20,y:100},l={x:50,y:50},u={top:[a,i,l],right:[l,i,s],bottom:[o,l,s],left:[a,l,o]},y={x:e,y:r};for(const m of Object.keys(u)){const h=u[m];if(tr.pointInTriangle(y,...h))return m}return"center"}static navigateToMarkerIndex(e,r,n){const a=r[n],i=r.map((s,o)=>{const l=s.x-a.x,u=s.y-a.y,y=Math.sqrt(l**2+u**2);return{index:o,dist:y,dir:{x:y!==0?l/y:0,y:y!==0?u/y:0}}}).filter(s=>s.index===n?!1:r[s.index].showCorrectness!=="correct").sort((s,o)=>{const l=Math.round(s.dist*(e.x*s.dir.x+e.y*s.dir.y)),u=Math.round(o.dist*(e.x*o.dir.x+e.y*o.dir.y));let y,m;return e.x>0?(y=s.dir.x>0&&l!==0,m=o.dir.x>0&&u!==0):e.x<0?(y=s.dir.x<0&&l!==0,m=o.dir.x<0&&u!==0):e.y>0?(y=s.dir.y>0&&l!==0,m=o.dir.y>0&&u!==0):e.y<0&&(y=s.dir.y<0&&l!==0,m=o.dir.y<0&&u!==0),y!==m?y?-1:1:l-u});return i.length>0?i[0].index:n}componentDidMount(){this._mounted=!0}componentWillUnmount(){this._mounted=!1}simpleValidate(e){return _n(this.getUserInput())}getUserInput(){const{markers:e}=this.props;return{markers:e}}showRationalesForCurrentlySelectedChoices(e){const{markers:r}=this.props,{onChange:n}=this.props,a=r.map(i=>{const s=Ln(i);return{...i,showCorrectness:s.hasAnswers?s.isCorrect?"correct":"incorrect":void 0}});n({markers:a},null,!0)}handleMarkerChange(e,r){const{markers:n,onChange:a}=this.props,i=[...n.slice(0,e),{...r,showCorrectness:void 0},...n.slice(e+1)];a({markers:i})}activateMarker(e,r){var a;(a=this.props.analytics)==null||a.onAnalyticsEvent({type:"perseus:label-image:marker-interacted-with",payload:null});const{activeMarkerIndex:n}=this.state;n!==e&&r?this.setState({activeMarkerIndex:e,markersInteracted:!0}):this.setState({activeMarkerIndex:-1})}handleMarkerKeyDown(e,r){const{markers:n}=this.props;if(n.length<2)return;const a={ArrowUp:{x:0,y:-1},ArrowRight:{x:1,y:0},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0}}[r.key];if(!a)return;r.preventDefault();const i=this._markers[tr.navigateToMarkerIndex(a,n,e)];i&&qr.findDOMNode(i).focus()}handleAnswerChoicesChangeForMarker(e,r){const{choices:n,markers:a}=this.props,i=n.filter((s,o)=>r[o]);this.handleMarkerChange(e,{...a[e],selected:i.length?i:void 0})}renderMarkers(){const{markers:e,questionCompleted:r,preferredPopoverDirection:n}=this.props,{activeMarkerIndex:a,markersInteracted:i}=this.state,s=this._mounted&&window.matchMedia(Ir.xsOrSmaller.replace("@media ","")).matches,o=this.props.imageWidth/2>this.props.imageHeight;return e.map((l,u)=>{let y,m;s||o?(y=l.y>50?"top":"bottom",m=l.y>50?"bottom":"top"):(m=tr.imageSideForMarkerPosition(l.x,l.y,n),m==="center"&&(m="bottom"),y={left:"right",top:"bottom",right:"left",bottom:"top"}[m]);const h=Ln(l),p=r&&h.hasAnswers&&h.isCorrect?"correct":l.showCorrectness,c=p==="correct",b={[`margin${m.charAt(0).toUpperCase()+m.slice(1)}`]:10},w=u===a,q=l.selected&&!w&&!this.state.hideAnswers;return d(G,{style:{position:"absolute",left:`${l.x}%`,top:`${l.y}%`,zIndex:"unset"},children:d(mu,{choices:this.props.choices.map(k=>({content:k,checked:l.selected?l.selected.includes(k):!1})),multipleSelect:this.props.multipleAnswers,onChange:k=>{var T;(T=this.props.analytics)==null||T.onAnalyticsEvent({type:"perseus:label-image:choiced-interacted-with",payload:null}),this.handleAnswerChoicesChangeForMarker(u,k)},onToggle:k=>this.activateMarker(u,k),disabled:c,opener:({opened:k})=>d(ta,{role:"button","aria-expanded":k,children:({hovered:T,focused:O,pressed:W})=>d(Ou,{...l,showCorrectness:p,showSelected:k,showPulsate:!i,ref:R=>this._markers[u]=R,showAnswer:q,answerSide:y,answerStyles:b,analytics:this.props.analytics,focused:O||W,hovered:T})},`marker-${l.x}.${l.y}`)},`answers-${l.x}.${l.y}`)},u)})}renderInstructions(){const{apiOptions:{isMobile:e},choices:r,multipleAnswers:n,hideChoicesFromInstructions:a}=this.props,{strings:i}=this.context,s=e?n?i.tapMultiple:i.tapSingle:n?i.clickMultiple:i.clickSingle,o=i.choices;return f("div",{className:Re("perseus-label-image-widget-instructions",x.css(Pe.instructions)),children:[f("div",{className:x.css(Pe.instructionsCaption),children:[s," ",!a&&o]}),!a&&d("div",{className:x.css(Pe.instructionsChoices),children:r.map((l,u)=>d("div",{className:x.css(Pe.instructionsChoice),children:d($,{content:l,strings:i})},u))})]})}render(){const{imageAlt:e,imageUrl:r,imageWidth:n,imageHeight:a}=this.props,{activeMarkerIndex:i}=this.state;return f("div",{children:[this.renderInstructions(),f("div",{className:x.css(Pe.markersCanvas),style:{maxWidth:n,maxHeight:a},children:[d("div",{className:x.css(Pe.imageContainer,i!==-1&&Pe.imageInteractionDisabled),children:d(na.Consumer,{children:({setAssetStatus:s})=>d(_r,{alt:e,src:r,width:n,height:a,setAssetStatus:s})})}),this.renderMarkers()]}),d(el,{areAnswersHidden:this.state.hideAnswers,onChange:s=>{var o;(o=this.props.analytics)==null||o.onAnalyticsEvent({type:"perseus:label-image:toggle-answers-hidden",payload:null}),this.setState({hideAnswers:s})}})]})}};tr.contextType=S;let gt=tr;const Pe=x.StyleSheet.create({instructions:{paddingBottom:16},instructionsCaption:{...Qo.bodyXsmallBold,paddingBottom:16},instructionsChoices:{display:"flex",flexWrap:"wrap",margin:"-8px 0"},instructionsChoice:{display:"flex",alignItems:"center",margin:"8px 0",":not(:last-child)":{"::after":{content:"''",display:"inline-block",position:"relative",width:2,height:2,marginLeft:5,marginRight:5,background:"rgba(33, 36, 44, 0.32)",borderRadius:2}}},markersCanvas:{position:"relative"},imageContainer:{display:"flex"},imageInteractionDisabled:{pointerEvents:"none"}}),rl=v.forwardRef((t,e)=>{const r=as();return d(gt,{ref:e,analytics:r.analytics,...t})});rl.validate=_n;const Kg={name:"label-image",displayName:"Label Image",widget:rl,accessible:!0,isLintable:!0};gt.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[{name:"state",optional:!1,type:{name:"signature",type:"object",raw:`{ + markers: ReadonlyArray; +}`,signature:{properties:[{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { + // The user selected list of answers, used to grade the question. + selected?: ReadonlyArray; + // Reveal the correctness state of the user selected answers for the marker. + showCorrectness?: "correct" | "incorrect"; + focused?: boolean; +}`,elements:[{name:"signature",type:"object",raw:`{ + // The list of correct answers expected for the marker. + answers: ReadonlyArray; + // The marker title or description. + label: string; + // The marker coordinates on the question image as percent of image size. + x: number; + y: number; +}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ + // The user selected list of answers, used to grade the question. + selected?: ReadonlyArray; + // Reveal the correctness state of the user selected answers for the marker. + showCorrectness?: "correct" | "incorrect"; + focused?: boolean; +}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}}]},alias:"PerseusLabelImageUserInput"}},{name:"rubric",optional:!0,type:{name:"signature",type:"object",raw:`{ + // Translatable Text; Tex representation of choices + choices: ReadonlyArray; + // The URL of the image + imageUrl: string; + // Translatable Text; To show up in the img.alt attribute + imageAlt: string; + // The height of the image + imageHeight: number; + // The width of the image + imageWidth: number; + // A list of markers to display on the image + markers: ReadonlyArray; + // Do not display answer choices in instructions + hideChoicesFromInstructions: boolean; + // Allow multiple answers per marker + multipleAnswers: boolean; + // Always false. Not used for this widget + static: boolean; +}`,signature:{properties:[{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"imageUrl",value:{name:"string",required:!0}},{key:"imageAlt",value:{name:"string",required:!0}},{key:"imageHeight",value:{name:"number",required:!0}},{key:"imageWidth",value:{name:"number",required:!0}},{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + // A list of correct answers for this marker. Often only one but can have multiple + answers: ReadonlyArray; + // Translatable Text; The text to show for the marker. Not displayed directly to the user + label: string; + // X Coordiate location of the marker on the image + x: number; + // Y Coordinate location of the marker on the image + y: number; +}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"hideChoicesFromInstructions",value:{name:"boolean",required:!0}},{key:"multipleAnswers",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}}]},alias:"PerseusLabelImageRubric"}}],returns:{type:{name:"union",raw:`| { + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; + } +| { + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; + }`,elements:[{name:"signature",type:"object",raw:`{ + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"pointInTriangle",docblock:`Test whether point is contained within triangle. + +Implementation taken from: https://stackoverflow.com/a/2049593`,modifiers:["static"],params:[{name:"p",optional:!1,type:{name:"signature",type:"object",raw:`{ + x: number; + y: number; +}`,signature:{properties:[{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]},alias:"Point"}},{name:"a",optional:!1,type:{name:"signature",type:"object",raw:`{ + x: number; + y: number; +}`,signature:{properties:[{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]},alias:"Point"}},{name:"b",optional:!1,type:{name:"signature",type:"object",raw:`{ + x: number; + y: number; +}`,signature:{properties:[{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]},alias:"Point"}},{name:"c",optional:!1,type:{name:"signature",type:"object",raw:`{ + x: number; + y: number; +}`,signature:{properties:[{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]},alias:"Point"}}],returns:{type:{name:"boolean"}},description:`Test whether point is contained within triangle. + +Implementation taken from: https://stackoverflow.com/a/2049593`},{name:"imageSideForMarkerPosition",docblock:"Determine the image side given a marker position (as percent of size).",modifiers:["static"],params:[{name:"x",optional:!1,type:{name:"number"}},{name:"y",optional:!1,type:{name:"number"}},{name:"preferredDirection",optional:!1,type:{name:"union",raw:"PreferredPopoverDirection | undefined",elements:[{name:"union",raw:`| "NONE" +| "UP" +| "DOWN" +| "LEFT" +| "RIGHT"`,elements:[{name:"literal",value:'"NONE"'},{name:"literal",value:'"UP"'},{name:"literal",value:'"DOWN"'},{name:"literal",value:'"LEFT"'},{name:"literal",value:'"RIGHT"'}]},{name:"undefined"}]}}],returns:{type:{name:"union",raw:'"bottom" | "left" | "right" | "top" | "center"',elements:[{name:"literal",value:'"bottom"'},{name:"literal",value:'"left"'},{name:"literal",value:'"right"'},{name:"literal",value:'"top"'},{name:"literal",value:'"center"'}]}},description:"Determine the image side given a marker position (as percent of size)."},{name:"navigateToMarkerIndex",docblock:`Calculate the next marker to navigate to, from the "this marker". + +Given a cardinal navigation direction (in the x or y axis), return the +next marker index to visit.`,modifiers:["static"],params:[{name:"navigateDirection",optional:!1,type:{name:"union",raw:`| { + x: 0; + y: 1 | -1; + } +| { + x: 1 | -1; + y: 0; + } +| { + x: 0; + y: 0; + }`,elements:[{name:"signature",type:"object",raw:`{ + x: 0; + y: 1 | -1; +}`,signature:{properties:[{key:"x",value:{name:"literal",value:"0",required:!0}},{key:"y",value:{name:"union",raw:"1 | -1",elements:[{name:"literal",value:"1"},{name:"literal",value:"-1"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ + x: 1 | -1; + y: 0; +}`,signature:{properties:[{key:"x",value:{name:"union",raw:"1 | -1",elements:[{name:"literal",value:"1"},{name:"literal",value:"-1"}],required:!0}},{key:"y",value:{name:"literal",value:"0",required:!0}}]}},{name:"signature",type:"object",raw:`{ + x: 0; + y: 0; +}`,signature:{properties:[{key:"x",value:{name:"literal",value:"0",required:!0}},{key:"y",value:{name:"literal",value:"0",required:!0}}]}}],alias:"Direction"}},{name:"markers",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { + // The user selected list of answers, used to grade the question. + selected?: ReadonlyArray; + // Reveal the correctness state of the user selected answers for the marker. + showCorrectness?: "correct" | "incorrect"; + focused?: boolean; +}`,elements:[{name:"signature",type:"object",raw:`{ + // The list of correct answers expected for the marker. + answers: ReadonlyArray; + // The marker title or description. + label: string; + // The marker coordinates on the question image as percent of image size. + x: number; + y: number; +}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ + // The user selected list of answers, used to grade the question. + selected?: ReadonlyArray; + // Reveal the correctness state of the user selected answers for the marker. + showCorrectness?: "correct" | "incorrect"; + focused?: boolean; +}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",alias:"ReadonlyArray"}},{name:"thisIndex",optional:!1,type:{name:"number"}}],returns:{type:{name:"number"}},description:`Calculate the next marker to navigate to, from the "this marker". + +Given a cardinal navigation direction (in the x or y axis), return the +next marker index to visit.`},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // Translatable Text; Tex representation of choices + choices: ReadonlyArray; + // The URL of the image + imageUrl: string; + // Translatable Text; To show up in the img.alt attribute + imageAlt: string; + // The height of the image + imageHeight: number; + // The width of the image + imageWidth: number; + // A list of markers to display on the image + markers: ReadonlyArray; + // Do not display answer choices in instructions + hideChoicesFromInstructions: boolean; + // Allow multiple answers per marker + multipleAnswers: boolean; + // Always false. Not used for this widget + static: boolean; +}`,signature:{properties:[{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"imageUrl",value:{name:"string",required:!0}},{key:"imageAlt",value:{name:"string",required:!0}},{key:"imageHeight",value:{name:"number",required:!0}},{key:"imageWidth",value:{name:"number",required:!0}},{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ + // A list of correct answers for this marker. Often only one but can have multiple + answers: ReadonlyArray; + // Translatable Text; The text to show for the marker. Not displayed directly to the user + label: string; + // X Coordiate location of the marker on the image + x: number; + // Y Coordinate location of the marker on the image + y: number; +}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"hideChoicesFromInstructions",value:{name:"boolean",required:!0}},{key:"multipleAnswers",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}}]},alias:"PerseusLabelImageRubric"}}],returns:{type:{name:"union",raw:`| { + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; + } +| { + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; + }`,elements:[{name:"signature",type:"object",raw:`{ + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"signature",type:"object",raw:`{ markers: ReadonlyArray; }`,signature:{properties:[{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { // The user selected list of answers, used to grade the question. @@ -44563,484 +60004,3159 @@ the available choices.`}]}}],raw:`Readonly<{ // Reveal the correctness state of the user selected answers for the marker. showCorrectness?: "correct" | "incorrect"; focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}}]},alias:"PerseusLabelImageUserInput"}},{name:"rubric",optional:!0,type:{name:"signature",type:"object",raw:`{ - // Translatable Text; Tex representation of choices - choices: ReadonlyArray; - // The URL of the image - imageUrl: string; - // Translatable Text; To show up in the img.alt attribute - imageAlt: string; - // The height of the image - imageHeight: number; - // The width of the image - imageWidth: number; - // A list of markers to display on the image - markers: ReadonlyArray; - // Do not display answer choices in instructions - hideChoicesFromInstructions: boolean; - // Allow multiple answers per marker - multipleAnswers: boolean; - // Always false. Not used for this widget +}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}}]}}}},{name:"showRationalesForCurrentlySelectedChoices",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"intersection",raw:`ChangeableProps & +DependencyProps & { + apiOptions: APIOptions; + // The list of possible answer choices. + choices: ReadonlyArray; + // The question image properties. + imageAlt: string; + imageUrl: string; + imageWidth: number; + imageHeight: number; + // The list of label markers on the question image. + markers: ReadonlyArray; + // Whether multiple answer choices may be selected for markers. + multipleAnswers: boolean; + // Whether to hide answer choices from user instructions. + hideChoicesFromInstructions: boolean; + // Whether the question has been answered by the user. + questionCompleted: boolean; + // preferred placement for popover (preference, not MUST) + preferredPopoverDirection?: PreferredPopoverDirection; +}`,elements:[{name:"signature",type:"object",raw:`{ + onChange: ( + values: { + [key: string]: any; + }, + callback?: (() => unknown) | null | undefined, + silent?: boolean, + ) => unknown; +}`,signature:{properties:[{key:"onChange",value:{name:"signature",type:"function",raw:`( + values: { + [key: string]: any; + }, + callback?: (() => unknown) | null | undefined, + silent?: boolean, +) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + [key: string]: any; +}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"values"},{type:{name:"union",raw:"(() => unknown) | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}}]}},{name:"Partial",elements:[{name:"ReactContextType",raw:"React.ContextType",elements:[{name:"DependenciesContext"}]}],raw:`Partial< + React.ContextType +>`},{name:"signature",type:"object",raw:`{ + apiOptions: APIOptions; + // The list of possible answer choices. + choices: ReadonlyArray; + // The question image properties. + imageAlt: string; + imageUrl: string; + imageWidth: number; + imageHeight: number; + // The list of label markers on the question image. + markers: ReadonlyArray; + // Whether multiple answer choices may be selected for markers. + multipleAnswers: boolean; + // Whether to hide answer choices from user instructions. + hideChoicesFromInstructions: boolean; + // Whether the question has been answered by the user. + questionCompleted: boolean; + // preferred placement for popover (preference, not MUST) + preferredPopoverDirection?: PreferredPopoverDirection; +}`,signature:{properties:[{key:"apiOptions",value:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, +) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been +answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at +0 and is incremented for each group widget), and the ID of the +group widget, then returns a react component that will be added +immediately above the renderer in the group widget. If the +function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead +of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead +of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; +}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same +interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM +DOM elements. For example, when provided, will be used +in place of . This allows clients to provide pre-styled +components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component +to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +} & Partial & + Partial`,elements:[{name:"signature",type:"object",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + status: "correct" | "incorrect" | "invalid"; +}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + visible: number; +}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It +also includes any extra parameters that the originating widget provided. +This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is +being used. For mobile web this will be the ProvidedKeypad +component. In this situation we use the MathInput component +from the math-input repo instead of the existing perseus math +input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance +of \`math-input\`'s keypad to the body. This is used by the native +apps so they can have the keypad be defined on the native side. +It is called with an function that, when called, blurs the input, +and is expected to return an object of the shape +keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the +drawing area (scratchpad) should be allowed/disallowed. + +Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the +page. For example, if this is enabled, the most recently used +radio widget will attempt to keep the "selected" answer in view +after entering review mode. + +Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio +widgets. This allows users to note which answers they believe to +be incorrect, to find the answer by process of elimination. + +We plan to roll this out to all call sites eventually, but for +now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content +in a editor is delayed before propagated to a prop. For example, +when text is typed in the text area of an Editor component, +there will be a delay equal to the value of \`editorChangeDelay\` +before the change is propagated. This is added for better +responsiveness of the editor when used in certain contexts such +as StructuredItem exercises where constant re-rendering for each +keystroke caused text typed in the text area to appear in it +only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); +}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false +| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. + +Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +after they have been transformed by the widget's transform function. +This is useful for when we need to know how a widget has shuffled its +the available choices.`}]}}],raw:`Readonly<{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}>`,required:!0}},{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"imageAlt",value:{name:"string",required:!0}},{key:"imageUrl",value:{name:"string",required:!0}},{key:"imageWidth",value:{name:"number",required:!0}},{key:"imageHeight",value:{name:"number",required:!0}},{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { + // The user selected list of answers, used to grade the question. + selected?: ReadonlyArray; + // Reveal the correctness state of the user selected answers for the marker. + showCorrectness?: "correct" | "incorrect"; + focused?: boolean; +}`,elements:[{name:"signature",type:"object",raw:`{ + // The list of correct answers expected for the marker. + answers: ReadonlyArray; + // The marker title or description. + label: string; + // The marker coordinates on the question image as percent of image size. + x: number; + y: number; +}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ + // The user selected list of answers, used to grade the question. + selected?: ReadonlyArray; + // Reveal the correctness state of the user selected answers for the marker. + showCorrectness?: "correct" | "incorrect"; + focused?: boolean; +}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}},{key:"multipleAnswers",value:{name:"boolean",required:!0}},{key:"hideChoicesFromInstructions",value:{name:"boolean",required:!0}},{key:"questionCompleted",value:{name:"boolean",required:!0}},{key:"preferredPopoverDirection",value:{name:"union",raw:`| "NONE" +| "UP" +| "DOWN" +| "LEFT" +| "RIGHT"`,elements:[{name:"literal",value:'"NONE"'},{name:"literal",value:'"UP"'},{name:"literal",value:'"DOWN"'},{name:"literal",value:'"LEFT"'},{name:"literal",value:'"RIGHT"'}],required:!1}}]}}],alias:"LabelImageProps"}}],returns:null},{name:"handleMarkerChange",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:{name:"number"}},{name:"marker",optional:!1,type:{name:"intersection",raw:`MarkerType & { + // The user selected list of answers, used to grade the question. + selected?: ReadonlyArray; + // Reveal the correctness state of the user selected answers for the marker. + showCorrectness?: "correct" | "incorrect"; + focused?: boolean; +}`,elements:[{name:"signature",type:"object",raw:`{ + // The list of correct answers expected for the marker. + answers: ReadonlyArray; + // The marker title or description. + label: string; + // The marker coordinates on the question image as percent of image size. + x: number; + y: number; +}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ + // The user selected list of answers, used to grade the question. + selected?: ReadonlyArray; + // Reveal the correctness state of the user selected answers for the marker. + showCorrectness?: "correct" | "incorrect"; + focused?: boolean; +}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}],alias:"InteractiveMarkerType"}}],returns:null},{name:"activateMarker",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:{name:"number"}},{name:"opened",optional:!1,type:{name:"boolean"}}],returns:null},{name:"handleMarkerKeyDown",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:{name:"number"}},{name:"e",optional:!1,type:{name:"ReactKeyboardEvent",raw:"React.KeyboardEvent",alias:"React.KeyboardEvent"}}],returns:null},{name:"handleAnswerChoicesChangeForMarker",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:{name:"number"}},{name:"selection",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}}],returns:null},{name:"renderMarkers",docblock:null,modifiers:[],params:[],returns:{type:{name:"ReadonlyArray",elements:[{name:"ReactReactNode",raw:"React.ReactNode"}],raw:"ReadonlyArray"}}},{name:"renderInstructions",docblock:null,modifiers:[],params:[],returns:{type:{name:"ReactReactNode",raw:"React.ReactNode"}}}],displayName:"LabelImage"};function Si(t,e){return{type:"points",earned:g.isEqual(t.left,e.left)&&g.isEqual(t.right,e.right)?1:0,total:1,message:null}}const{shuffle:Mi,seededRNG:Xg}=z,Yg="perseus-widget-matcher",xt=class xt extends v.Component{constructor(){super(...arguments),this.state={leftHeight:0,rightHeight:0,texRendererLoaded:!1},this.changeAndTrack=e=>{this.props.onChange(e),this.props.trackInteraction()},this.onMeasureLeft=e=>{const r=g.max(e.heights);this.setState({leftHeight:r})},this.onMeasureRight=e=>{const r=g.max(e.heights);this.setState({rightHeight:r})},this.getUserInput=()=>this.state.texRendererLoaded?{left:this.refs.left.getOptions(),right:this.refs.right.getOptions()}:{left:[],right:[]},this.moveLeftOptionToIndex=(e,r)=>{this.refs.left.moveOptionToIndex(e,r)},this.moveRightOptionToIndex=(e,r)=>{this.refs.right.moveOptionToIndex(e,r)}}static validate(e,r){return Si(e,r)}simpleValidate(e){return Si(this.getUserInput(),e)}render(){if(!this.state.texRendererLoaded){const{TeX:o}=fe();return f(D,{children:[d(Ul,{}),d("div",{style:{display:"none"},children:d(o,{onRender:()=>{this.setState({texRendererLoaded:!0})},children:"1"})})]})}const e=Xg(this.props.problemNum);let r;this.props.orderMatters?r=Mi(this.props.left,e,!0):r=this.props.left;const n=Mi(this.props.right,e,!0),a=g.any(this.props.labels),i={height:g.max([this.state.leftHeight,this.state.rightHeight])},s=this.props.apiOptions.isMobile?8:5;return d("table",{className:x.css(ue.widget)+" "+Yg,children:f("tbody",{children:[a&&f("tr",{className:x.css(ue.row),children:[d("th",{className:x.css(ue.column,ue.columnLabel),children:d($,{content:this.props.labels[0]||"...",linterContext:this.props.linterContext,strings:this.context.strings})}),d("th",{className:x.css(ue.column,ue.columnRight,ue.columnLabel),children:d($,{content:this.props.labels[1]||"...",linterContext:this.props.linterContext,strings:this.context.strings})})]}),f("tr",{className:x.css(ue.row),children:[d("td",{className:x.css(ue.column),children:d(en,{options:r,layout:"vertical",padding:this.props.padding,disabled:!this.props.orderMatters,constraints:i,onMeasure:this.onMeasureLeft,onChange:this.changeAndTrack,margin:s,linterContext:this.props.linterContext,ref:"left"})}),d("td",{className:x.css(ue.column,ue.columnRight),children:d(en,{options:n,layout:"vertical",padding:this.props.padding,constraints:i,onMeasure:this.onMeasureRight,onChange:this.changeAndTrack,margin:s,linterContext:this.props.linterContext,ref:"right"})})]})]})})}};xt.contextType=S,xt.defaultProps={left:[],right:[],labels:["",""],orderMatters:!1,padding:!0,problemNum:0,onChange:function(){},linterContext:B};let ht=xt;const Kr=5,Ui="1px solid #444",ue=x.StyleSheet.create({widget:{paddingTop:Kr,maxWidth:"100%",minWidth:"auto"},row:{border:0},column:{padding:0,border:0},columnRight:{borderLeft:Ui},columnLabel:{fontWeight:"inherit",borderBottom:Ui,padding:`0 ${Kr}px ${Kr}px ${Kr}px`,textAlign:"center"}}),Qg={name:"matcher",displayName:"Matcher (two column)",widget:ht,isLintable:!0};ht.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[{name:"state",optional:!1,type:{name:"signature",type:"object",raw:`{ + left: ReadonlyArray; + right: ReadonlyArray; +}`,signature:{properties:[{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},alias:"PerseusMatcherUserInput"}},{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // Translatable Text; Labels to adorn the headings for the columns. Only 2 values [left, right]. e.g. ["Concepts", "Things"] + labels: ReadonlyArray; + // Translatable Text; Static concepts to show in the left column. e.g. ["Fruit", "Color", "Clothes"] + left: ReadonlyArray; + // Translatable Markup; Values that represent the concepts to be correlated with the concepts. e.g. ["Red", "Shirt", "Banana"] + right: ReadonlyArray; + // Order of the matched pairs matters. With this option enabled, only the order provided above will be treated as correct. This is useful when ordering is significant, such as in the context of a proof. If disabled, pairwise matching is sufficient. To make this clear, the left column becomes fixed in the provided order and only the cards in the right column can be moved. + orderMatters: boolean; + // Adds padding to the rows. Padding is good for text, but not needed for images. + padding: boolean; +}`,signature:{properties:[{key:"labels",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"orderMatters",value:{name:"boolean",required:!0}},{key:"padding",value:{name:"boolean",required:!0}}]},alias:"PerseusMatcherRubric"}}],returns:{type:{name:"union",raw:`| { + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; + } +| { + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; + }`,elements:[{name:"signature",type:"object",raw:`{ + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"changeAndTrack",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"onMeasureLeft",docblock:null,modifiers:[],params:[{name:"dimensions",optional:!1,type:null}],returns:null},{name:"onMeasureRight",docblock:null,modifiers:[],params:[{name:"dimensions",optional:!1,type:null}],returns:null},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:null},{name:"moveLeftOptionToIndex",docblock:null,modifiers:[],params:[{name:"option",optional:!1,type:null},{name:"index",optional:!1,type:null}],returns:null},{name:"moveRightOptionToIndex",docblock:null,modifiers:[],params:[{name:"option",optional:!1,type:null},{name:"index",optional:!1,type:null}],returns:null},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // Translatable Text; Labels to adorn the headings for the columns. Only 2 values [left, right]. e.g. ["Concepts", "Things"] + labels: ReadonlyArray; + // Translatable Text; Static concepts to show in the left column. e.g. ["Fruit", "Color", "Clothes"] + left: ReadonlyArray; + // Translatable Markup; Values that represent the concepts to be correlated with the concepts. e.g. ["Red", "Shirt", "Banana"] + right: ReadonlyArray; + // Order of the matched pairs matters. With this option enabled, only the order provided above will be treated as correct. This is useful when ordering is significant, such as in the context of a proof. If disabled, pairwise matching is sufficient. To make this clear, the left column becomes fixed in the provided order and only the cards in the right column can be moved. + orderMatters: boolean; + // Adds padding to the rows. Padding is good for text, but not needed for images. + padding: boolean; +}`,signature:{properties:[{key:"labels",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"orderMatters",value:{name:"boolean",required:!0}},{key:"padding",value:{name:"boolean",required:!0}}]},alias:"PerseusMatcherRubric"}}],returns:null}],displayName:"Matcher",props:{widgetId:{required:!0,tsType:{name:"string"},description:""},alignment:{required:!0,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},problemNum:{required:!1,tsType:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},description:"",defaultValue:{value:"0",computed:!1}},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; +}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, +) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been +answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at +0 and is incremented for each group widget), and the ID of the +group widget, then returns a react component that will be added +immediately above the renderer in the group widget. If the +function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead +of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead +of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; +}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same +interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM +DOM elements. For example, when provided, will be used +in place of . This allows clients to provide pre-styled +components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component +to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +} & Partial & + Partial`,elements:[{name:"signature",type:"object",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + status: "correct" | "incorrect" | "invalid"; +}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + visible: number; +}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It +also includes any extra parameters that the originating widget provided. +This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is +being used. For mobile web this will be the ProvidedKeypad +component. In this situation we use the MathInput component +from the math-input repo instead of the existing perseus math +input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance +of \`math-input\`'s keypad to the body. This is used by the native +apps so they can have the keypad be defined on the native side. +It is called with an function that, when called, blurs the input, +and is expected to return an object of the shape +keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the +drawing area (scratchpad) should be allowed/disallowed. + +Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the +page. For example, if this is enabled, the most recently used +radio widget will attempt to keep the "selected" answer in view +after entering review mode. + +Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio +widgets. This allows users to note which answers they believe to +be incorrect, to find the answer by process of elimination. + +We plan to roll this out to all call sites eventually, but for +now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content +in a editor is delayed before propagated to a prop. For example, +when text is typed in the text area of an Editor component, +there will be a delay equal to the value of \`editorChangeDelay\` +before the change is propagated. This is added for better +responsiveness of the editor when used in certain contexts such +as StructuredItem exercises where constant re-rendering for each +keystroke caused text typed in the text area to appear in it +only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); +}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false +| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. + +Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable static: boolean; -}`,signature:{properties:[{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"imageUrl",value:{name:"string",required:!0}},{key:"imageAlt",value:{name:"string",required:!0}},{key:"imageHeight",value:{name:"number",required:!0}},{key:"imageWidth",value:{name:"number",required:!0}},{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // A list of correct answers for this marker. Often only one but can have multiple - answers: ReadonlyArray; - // Translatable Text; The text to show for the marker. Not displayed directly to the user - label: string; - // X Coordiate location of the marker on the image - x: number; - // Y Coordinate location of the marker on the image - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"hideChoicesFromInstructions",value:{name:"boolean",required:!0}},{key:"multipleAnswers",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}}]},alias:"PerseusLabelImageRubric"}}],returns:{type:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"pointInTriangle",docblock:`Test whether point is contained within triangle. - -Implementation taken from: https://stackoverflow.com/a/2049593`,modifiers:["static"],params:[{name:"p",optional:!1,type:{name:"signature",type:"object",raw:`{ - x: number; - y: number; -}`,signature:{properties:[{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]},alias:"Point"}},{name:"a",optional:!1,type:{name:"signature",type:"object",raw:`{ - x: number; - y: number; -}`,signature:{properties:[{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]},alias:"Point"}},{name:"b",optional:!1,type:{name:"signature",type:"object",raw:`{ - x: number; - y: number; -}`,signature:{properties:[{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]},alias:"Point"}},{name:"c",optional:!1,type:{name:"signature",type:"object",raw:`{ - x: number; - y: number; -}`,signature:{properties:[{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]},alias:"Point"}}],returns:{type:{name:"boolean"}},description:`Test whether point is contained within triangle. - -Implementation taken from: https://stackoverflow.com/a/2049593`},{name:"imageSideForMarkerPosition",docblock:"Determine the image side given a marker position (as percent of size).",modifiers:["static"],params:[{name:"x",optional:!1,type:{name:"number"}},{name:"y",optional:!1,type:{name:"number"}},{name:"preferredDirection",optional:!1,type:{name:"union",raw:"PreferredPopoverDirection | undefined",elements:[{name:"union",raw:`| "NONE" -| "UP" -| "DOWN" -| "LEFT" -| "RIGHT"`,elements:[{name:"literal",value:'"NONE"'},{name:"literal",value:'"UP"'},{name:"literal",value:'"DOWN"'},{name:"literal",value:'"LEFT"'},{name:"literal",value:'"RIGHT"'}]},{name:"undefined"}]}}],returns:{type:{name:"union",raw:'"bottom" | "left" | "right" | "top" | "center"',elements:[{name:"literal",value:'"bottom"'},{name:"literal",value:'"left"'},{name:"literal",value:'"right"'},{name:"literal",value:'"top"'},{name:"literal",value:'"center"'}]}},description:"Determine the image side given a marker position (as percent of size)."},{name:"navigateToMarkerIndex",docblock:`Calculate the next marker to navigate to, from the "this marker". - -Given a cardinal navigation direction (in the x or y axis), return the -next marker index to visit.`,modifiers:["static"],params:[{name:"navigateDirection",optional:!1,type:{name:"union",raw:`| { - x: 0; - y: 1 | -1; - } -| { - x: 1 | -1; - y: 0; - } -| { - x: 0; - y: 0; - }`,elements:[{name:"signature",type:"object",raw:`{ - x: 0; - y: 1 | -1; -}`,signature:{properties:[{key:"x",value:{name:"literal",value:"0",required:!0}},{key:"y",value:{name:"union",raw:"1 | -1",elements:[{name:"literal",value:"1"},{name:"literal",value:"-1"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - x: 1 | -1; - y: 0; -}`,signature:{properties:[{key:"x",value:{name:"union",raw:"1 | -1",elements:[{name:"literal",value:"1"},{name:"literal",value:"-1"}],required:!0}},{key:"y",value:{name:"literal",value:"0",required:!0}}]}},{name:"signature",type:"object",raw:`{ - x: 0; - y: 0; -}`,signature:{properties:[{key:"x",value:{name:"literal",value:"0",required:!0}},{key:"y",value:{name:"literal",value:"0",required:!0}}]}}],alias:"Direction"}},{name:"markers",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",alias:"ReadonlyArray"}},{name:"thisIndex",optional:!1,type:{name:"number"}}],returns:{type:{name:"number"}},description:`Calculate the next marker to navigate to, from the "this marker". - -Given a cardinal navigation direction (in the x or y axis), return the -next marker index to visit.`},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ - // Translatable Text; Tex representation of choices - choices: ReadonlyArray; - // The URL of the image - imageUrl: string; - // Translatable Text; To show up in the img.alt attribute - imageAlt: string; - // The height of the image - imageHeight: number; - // The width of the image - imageWidth: number; - // A list of markers to display on the image - markers: ReadonlyArray; - // Do not display answer choices in instructions - hideChoicesFromInstructions: boolean; - // Allow multiple answers per marker - multipleAnswers: boolean; - // Always false. Not used for this widget + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable static: boolean; -}`,signature:{properties:[{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"imageUrl",value:{name:"string",required:!0}},{key:"imageAlt",value:{name:"string",required:!0}},{key:"imageHeight",value:{name:"number",required:!0}},{key:"imageWidth",value:{name:"number",required:!0}},{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // A list of correct answers for this marker. Often only one but can have multiple - answers: ReadonlyArray; - // Translatable Text; The text to show for the marker. Not displayed directly to the user - label: string; - // X Coordiate location of the marker on the image - x: number; - // Y Coordinate location of the marker on the image - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}}],raw:"ReadonlyArray",required:!0}},{key:"hideChoicesFromInstructions",value:{name:"boolean",required:!0}},{key:"multipleAnswers",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}}]},alias:"PerseusLabelImageRubric"}}],returns:{type:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"signature",type:"object",raw:`{ - markers: ReadonlyArray; -}`,signature:{properties:[{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}}]}}}},{name:"showRationalesForCurrentlySelectedChoices",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"intersection",raw:`ChangeableProps & -DependencyProps & { - apiOptions: APIOptions; - // The list of possible answer choices. - choices: ReadonlyArray; - // The question image properties. - imageAlt: string; - imageUrl: string; - imageWidth: number; - imageHeight: number; - // The list of label markers on the question image. - markers: ReadonlyArray; - // Whether multiple answer choices may be selected for markers. - multipleAnswers: boolean; - // Whether to hide answer choices from user instructions. - hideChoicesFromInstructions: boolean; - // Whether the question has been answered by the user. - questionCompleted: boolean; - // preferred placement for popover (preference, not MUST) - preferredPopoverDirection?: PreferredPopoverDirection; -}`,elements:[{name:"signature",type:"object",raw:`{ - onChange: ( - values: { - [key: string]: any; - }, - callback?: (() => unknown) | null | undefined, - silent?: boolean, - ) => unknown; -}`,signature:{properties:[{key:"onChange",value:{name:"signature",type:"function",raw:`( - values: { - [key: string]: any; - }, - callback?: (() => unknown) | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - [key: string]: any; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"values"},{type:{name:"union",raw:"(() => unknown) | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}}]}},{name:"Partial",elements:[{name:"ReactContextType",raw:"React.ContextType",elements:[{name:"DependenciesContext"}]}],raw:`Partial< - React.ContextType ->`},{name:"signature",type:"object",raw:`{ - apiOptions: APIOptions; - // The list of possible answer choices. - choices: ReadonlyArray; - // The question image properties. - imageAlt: string; - imageUrl: string; - imageWidth: number; - imageHeight: number; - // The list of label markers on the question image. - markers: ReadonlyArray; - // Whether multiple answer choices may be selected for markers. - multipleAnswers: boolean; - // Whether to hide answer choices from user instructions. - hideChoicesFromInstructions: boolean; - // Whether the question has been answered by the user. - questionCompleted: boolean; - // preferred placement for popover (preference, not MUST) - preferredPopoverDirection?: PreferredPopoverDirection; -}`,signature:{properties:[{key:"apiOptions",value:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45084,7 +63200,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45128,7 +63244,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45172,7 +63288,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45216,7 +63332,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45260,7 +63376,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45304,7 +63420,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45348,7 +63464,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45392,7 +63508,139 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45436,7 +63684,265 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +after they have been transformed by the widget's transform function. +This is useful for when we need to know how a widget has shuffled its +the available choices.`}]}}],raw:`Readonly<{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}>`},{name:"signature",type:"object",raw:`{ + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; +}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< + APIOptions["setDrawingAreaAvailable"] +>`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< + APIOptions & { + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; + } +>`},description:""},keypadElement:{required:!1,tsType:{name:"any"},description:""},questionCompleted:{required:!1,tsType:{name:"boolean"},description:""},onFocus:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},onBlur:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},findWidgets:{required:!0,tsType:{name:"signature",type:"function",raw:"(criterion: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"Widget"}],raw:"ReadonlyArray"}}},description:""},reviewModeRubric:{required:!0,tsType:{name:"Rubric"},description:""},onChange:{required:!1,tsType:{name:"signature",type:"function",raw:`( + arg1: { + hints?: ReadonlyArray; + replace?: boolean; + content?: string; + widgets?: WidgetDict; + images?: ImageDict; + // used only in EditorPage + question?: any; + answerArea?: PerseusAnswerArea | null; + itemDataVersion?: Version; + // used in MutirenderEditor + item?: Item; + editorMode?: EditorMode; + jsonMode?: boolean; + // perseus-all-package/widgets/unit.jsx + value?: any; + // widgets/radio/widget.jsx + choiceStates?: ReadonlyArray; + // widgets/numeric-input.jsx + currentValue?: string; + // perseus-all-package/widgets/dropdown.jsx + selected?: number; + // perseus-all-package/widgets/grapher.jsx + plot?: any; + // Interactive Graph callback (see legacy: interactive-graph.tsx) + graph?: PerseusGraphType; + }, + callback?: () => unknown | null | undefined, + silent?: boolean, +) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + hints?: ReadonlyArray; + replace?: boolean; + content?: string; + widgets?: WidgetDict; + images?: ImageDict; + // used only in EditorPage + question?: any; + answerArea?: PerseusAnswerArea | null; + itemDataVersion?: Version; + // used in MutirenderEditor + item?: Item; + editorMode?: EditorMode; + jsonMode?: boolean; + // perseus-all-package/widgets/unit.jsx + value?: any; + // widgets/radio/widget.jsx + choiceStates?: ReadonlyArray; + // widgets/numeric-input.jsx + currentValue?: string; + // perseus-all-package/widgets/dropdown.jsx + selected?: number; + // perseus-all-package/widgets/grapher.jsx + plot?: any; + // Interactive Graph callback (see legacy: interactive-graph.tsx) + graph?: PerseusGraphType; +}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { + /** + * When \`true\`, causes the previous hint to be replaced with this hint when + * displayed. When \`false\`, the previous hint remains visible when this one + * is displayed. This allows for hints that build upon each other. + */ + replace?: boolean; +}`,elements:[{name:"signature",type:"object",raw:`{ + // Translatable Markdown content to be rendered. May include references to + // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). + // For each image found in this content, there can be an entry in the + // \`images\` dict (below) with the key being the image's url which defines + // additional attributes for the image. + content: string; + // A dictionary of {[widgetName]: Widget} to be referenced from the content field + widgets: PerseusWidgetsMap; + // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + metadata?: ReadonlyArray; + // A dictionary of {[imageUrl]: PerseusImageDetail}. + images: { + [key: string]: PerseusImageDetail; + }; +}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45480,7 +63986,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45524,7 +64030,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45568,7 +64074,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45612,7 +64118,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45656,7 +64162,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45700,7 +64206,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45744,7 +64250,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45788,7 +64294,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45832,7 +64338,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45876,7 +64382,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45920,7 +64426,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -45964,7 +64470,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46008,7 +64514,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46052,7 +64558,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46096,7 +64602,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46140,7 +64646,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46184,7 +64690,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46228,7 +64734,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46272,7 +64778,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46316,7 +64822,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46360,7 +64866,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46404,7 +64910,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46448,7 +64954,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46492,437 +64998,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`,required:!0}},{key:"choices",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"imageAlt",value:{name:"string",required:!0}},{key:"imageUrl",value:{name:"string",required:!0}},{key:"imageWidth",value:{name:"number",required:!0}},{key:"imageHeight",value:{name:"number",required:!0}},{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}},{key:"multipleAnswers",value:{name:"boolean",required:!0}},{key:"hideChoicesFromInstructions",value:{name:"boolean",required:!0}},{key:"questionCompleted",value:{name:"boolean",required:!0}},{key:"preferredPopoverDirection",value:{name:"union",raw:`| "NONE" -| "UP" -| "DOWN" -| "LEFT" -| "RIGHT"`,elements:[{name:"literal",value:'"NONE"'},{name:"literal",value:'"UP"'},{name:"literal",value:'"DOWN"'},{name:"literal",value:'"LEFT"'},{name:"literal",value:'"RIGHT"'}],required:!1}}]}}],alias:"LabelImageProps"}}],returns:null},{name:"handleMarkerChange",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:{name:"number"}},{name:"marker",optional:!1,type:{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}],alias:"InteractiveMarkerType"}}],returns:null},{name:"activateMarker",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:{name:"number"}},{name:"opened",optional:!1,type:{name:"boolean"}}],returns:null},{name:"handleMarkerKeyDown",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:{name:"number"}},{name:"e",optional:!1,type:{name:"ReactKeyboardEvent",raw:"React.KeyboardEvent",alias:"React.KeyboardEvent"}}],returns:null},{name:"handleAnswerChoicesChangeForMarker",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:{name:"number"}},{name:"selection",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}}],returns:null},{name:"renderMarkers",docblock:null,modifiers:[],params:[],returns:{type:{name:"ReadonlyArray",elements:[{name:"ReactReactNode",raw:"React.ReactNode"}],raw:"ReadonlyArray"}}},{name:"renderInstructions",docblock:null,modifiers:[],params:[],returns:{type:{name:"ReactReactNode",raw:"React.ReactNode"}}}],displayName:"LabelImage",props:{onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`( - values: { - [key: string]: any; - }, - callback?: (() => unknown) | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - [key: string]: any; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"values"},{type:{name:"union",raw:"(() => unknown) | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -46966,7 +65042,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47010,7 +65086,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47054,7 +65130,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47098,7 +65174,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47142,7 +65218,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47186,7 +65262,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47230,7 +65306,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47274,7 +65350,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47318,7 +65394,56 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [key: string]: PerseusImageDetail; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // The width of the image + width: number; + // the height of the image + height: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ + /** + * When \`true\`, causes the previous hint to be replaced with this hint when + * displayed. When \`false\`, the previous hint remains visible when this one + * is displayed. This allows for hints that build upon each other. + */ + replace?: boolean; +}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47362,7 +65487,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47406,7 +65531,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47450,7 +65575,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47494,7 +65619,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47538,7 +65663,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47582,7 +65707,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47626,7 +65751,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47670,7 +65795,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47714,7 +65839,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47758,7 +65883,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47802,7 +65927,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47846,7 +65971,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47890,7 +66015,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47934,7 +66059,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -47978,7 +66103,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -48022,7 +66147,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -48066,7 +66191,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -48110,7 +66235,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -48154,7 +66279,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -48198,7 +66323,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -48242,7 +66367,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -48286,7 +66411,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -48330,7 +66455,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -48374,468 +66499,51 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},description:""},choices:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:""},imageAlt:{required:!0,tsType:{name:"string"},description:""},imageUrl:{required:!0,tsType:{name:"string"},description:""},imageWidth:{required:!0,tsType:{name:"number"},description:""},imageHeight:{required:!0,tsType:{name:"number"},description:""},markers:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray"},description:""},multipleAnswers:{required:!0,tsType:{name:"boolean"},description:""},hideChoicesFromInstructions:{required:!0,tsType:{name:"boolean"},description:""},questionCompleted:{required:!0,tsType:{name:"boolean"},description:""},preferredPopoverDirection:{required:!1,tsType:{name:"union",raw:`| "NONE" -| "UP" -| "DOWN" -| "LEFT" -| "RIGHT"`,elements:[{name:"literal",value:'"NONE"'},{name:"literal",value:'"UP"'},{name:"literal",value:'"DOWN"'},{name:"literal",value:'"LEFT"'},{name:"literal",value:'"RIGHT"'}]},description:""}}};function Fi(t,e){return{type:"points",earned:g.isEqual(t.left,e.left)&&g.isEqual(t.right,e.right)?1:0,total:1,message:null}}const{shuffle:Si,seededRNG:Ig}=z,Ng="perseus-widget-matcher",Ct=class Ct extends k.Component{constructor(){super(...arguments),this.state={leftHeight:0,rightHeight:0,texRendererLoaded:!1},this.changeAndTrack=e=>{this.props.onChange(e),this.props.trackInteraction()},this.onMeasureLeft=e=>{const r=g.max(e.heights);this.setState({leftHeight:r})},this.onMeasureRight=e=>{const r=g.max(e.heights);this.setState({rightHeight:r})},this.getUserInput=()=>this.state.texRendererLoaded?{left:this.refs.left.getOptions(),right:this.refs.right.getOptions()}:{left:[],right:[]},this.moveLeftOptionToIndex=(e,r)=>{this.refs.left.moveOptionToIndex(e,r)},this.moveRightOptionToIndex=(e,r)=>{this.refs.right.moveOptionToIndex(e,r)}}static validate(e,r){return Fi(e,r)}simpleValidate(e){return Fi(this.getUserInput(),e)}render(){if(!this.state.texRendererLoaded){const{TeX:o}=Te();return q(U,{children:[d(Hl,{}),d("div",{style:{display:"none"},children:d(o,{onRender:()=>{this.setState({texRendererLoaded:!0})},children:"1"})})]})}const e=Ig(this.props.problemNum);let r;this.props.orderMatters?r=Si(this.props.left,e,!0):r=this.props.left;const n=Si(this.props.right,e,!0),a=g.any(this.props.labels),i={height:g.max([this.state.leftHeight,this.state.rightHeight])},s=this.props.apiOptions.isMobile?8:5;return d("table",{className:j.css(he.widget)+" "+Ng,children:q("tbody",{children:[a&&q("tr",{className:j.css(he.row),children:[d("th",{className:j.css(he.column,he.columnLabel),children:d(H,{content:this.props.labels[0]||"...",linterContext:this.props.linterContext,strings:this.context.strings})}),d("th",{className:j.css(he.column,he.columnRight,he.columnLabel),children:d(H,{content:this.props.labels[1]||"...",linterContext:this.props.linterContext,strings:this.context.strings})})]}),q("tr",{className:j.css(he.row),children:[d("td",{className:j.css(he.column),children:d(nn,{options:r,layout:"vertical",padding:this.props.padding,disabled:!this.props.orderMatters,constraints:i,onMeasure:this.onMeasureLeft,onChange:this.changeAndTrack,margin:s,linterContext:this.props.linterContext,ref:"left"})}),d("td",{className:j.css(he.column,he.columnRight),children:d(nn,{options:n,layout:"vertical",padding:this.props.padding,constraints:i,onMeasure:this.onMeasureRight,onChange:this.changeAndTrack,margin:s,linterContext:this.props.linterContext,ref:"right"})})]})]})})}};Ct.contextType=M,Ct.defaultProps={left:[],right:[],labels:["",""],orderMatters:!1,padding:!0,problemNum:0,onChange:function(){},linterContext:B};let ht=Ct;const Yr=5,Mi="1px solid #444",he=j.StyleSheet.create({widget:{paddingTop:Yr,maxWidth:"100%",minWidth:"auto"},row:{border:0},column:{padding:0,border:0},columnRight:{borderLeft:Mi},columnLabel:{fontWeight:"inherit",borderBottom:Mi,padding:`0 ${Yr}px ${Yr}px ${Yr}px`,textAlign:"center"}}),Eg={name:"matcher",displayName:"Matcher (two column)",widget:ht,isLintable:!0};ht.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[{name:"state",optional:!1,type:{name:"signature",type:"object",raw:`{ - left: ReadonlyArray; - right: ReadonlyArray; -}`,signature:{properties:[{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},alias:"PerseusMatcherUserInput"}},{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ - // Translatable Text; Labels to adorn the headings for the columns. Only 2 values [left, right]. e.g. ["Concepts", "Things"] - labels: ReadonlyArray; - // Translatable Text; Static concepts to show in the left column. e.g. ["Fruit", "Color", "Clothes"] - left: ReadonlyArray; - // Translatable Markup; Values that represent the concepts to be correlated with the concepts. e.g. ["Red", "Shirt", "Banana"] - right: ReadonlyArray; - // Order of the matched pairs matters. With this option enabled, only the order provided above will be treated as correct. This is useful when ordering is significant, such as in the context of a proof. If disabled, pairwise matching is sufficient. To make this clear, the left column becomes fixed in the provided order and only the cards in the right column can be moved. - orderMatters: boolean; - // Adds padding to the rows. Padding is good for text, but not needed for images. - padding: boolean; -}`,signature:{properties:[{key:"labels",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"orderMatters",value:{name:"boolean",required:!0}},{key:"padding",value:{name:"boolean",required:!0}}]},alias:"PerseusMatcherRubric"}}],returns:{type:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"changeAndTrack",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"onMeasureLeft",docblock:null,modifiers:[],params:[{name:"dimensions",optional:!1,type:null}],returns:null},{name:"onMeasureRight",docblock:null,modifiers:[],params:[{name:"dimensions",optional:!1,type:null}],returns:null},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:null},{name:"moveLeftOptionToIndex",docblock:null,modifiers:[],params:[{name:"option",optional:!1,type:null},{name:"index",optional:!1,type:null}],returns:null},{name:"moveRightOptionToIndex",docblock:null,modifiers:[],params:[{name:"option",optional:!1,type:null},{name:"index",optional:!1,type:null}],returns:null},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ - // Translatable Text; Labels to adorn the headings for the columns. Only 2 values [left, right]. e.g. ["Concepts", "Things"] - labels: ReadonlyArray; - // Translatable Text; Static concepts to show in the left column. e.g. ["Fruit", "Color", "Clothes"] - left: ReadonlyArray; - // Translatable Markup; Values that represent the concepts to be correlated with the concepts. e.g. ["Red", "Shirt", "Banana"] - right: ReadonlyArray; - // Order of the matched pairs matters. With this option enabled, only the order provided above will be treated as correct. This is useful when ordering is significant, such as in the context of a proof. If disabled, pairwise matching is sufficient. To make this clear, the left column becomes fixed in the provided order and only the cards in the right column can be moved. - orderMatters: boolean; - // Adds padding to the rows. Padding is good for text, but not needed for images. - padding: boolean; -}`,signature:{properties:[{key:"labels",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"orderMatters",value:{name:"boolean",required:!0}},{key:"padding",value:{name:"boolean",required:!0}}]},alias:"PerseusMatcherRubric"}}],returns:null}],displayName:"Matcher",props:{widgetId:{required:!0,tsType:{name:"string"},description:""},alignment:{required:!0,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},problemNum:{required:!1,tsType:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},description:"",defaultValue:{value:"0",computed:!1}},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -48879,7 +66587,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -48923,7 +66631,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -48967,7 +66675,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49011,7 +66719,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49055,7 +66763,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49099,7 +66807,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49143,7 +66851,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49187,7 +66895,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49231,7 +66939,79 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ + _multi: ItemTree; +}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49275,7 +67055,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49319,7 +67099,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49363,7 +67143,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49407,7 +67187,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49451,7 +67231,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49495,7 +67275,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49539,7 +67319,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49583,7 +67363,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49627,7 +67407,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49671,7 +67451,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49715,7 +67495,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49759,7 +67539,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49803,7 +67583,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49847,7 +67627,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49891,7 +67671,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49935,7 +67715,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -49979,7 +67759,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50023,7 +67803,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50067,7 +67847,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50111,7 +67891,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50155,7 +67935,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50199,7 +67979,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50243,7 +68023,359 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50287,265 +68419,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},{name:"signature",type:"object",raw:`{ - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< - APIOptions["setDrawingAreaAvailable"] ->`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< - APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; - } ->`},description:""},keypadElement:{required:!1,tsType:{name:"any"},description:""},questionCompleted:{required:!1,tsType:{name:"boolean"},description:""},onFocus:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},onBlur:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},findWidgets:{required:!0,tsType:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray"}}},description:""},reviewModeRubric:{required:!0,tsType:{name:"Rubric"},description:""},onChange:{required:!1,tsType:{name:"signature",type:"function",raw:`( - arg1: { - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; - }, - callback?: () => unknown | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; -}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; - }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50589,7 +68463,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50633,7 +68507,54 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50677,7 +68598,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50721,7 +68642,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50765,7 +68686,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50809,7 +68730,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50853,7 +68774,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50897,7 +68818,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50941,7 +68862,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -50985,7 +68906,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51029,7 +68950,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51073,7 +68994,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51117,7 +69038,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51161,7 +69082,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51205,7 +69126,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51249,7 +69170,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51293,7 +69214,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51337,7 +69258,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51381,7 +69302,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51425,7 +69346,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51469,7 +69390,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51513,7 +69434,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51557,7 +69478,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51601,7 +69522,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51645,7 +69566,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51689,7 +69610,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51733,7 +69654,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51777,7 +69698,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51821,7 +69742,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51865,7 +69786,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51909,7 +69830,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51953,7 +69874,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -51997,23 +69918,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -52057,46 +69962,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -52140,21 +70006,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -52198,7 +70050,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ // @ts-expect-error - TS2315 - Type 'Tree' is not generic. [k: string]: Tree; }`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ @@ -52414,541 +70266,355 @@ the available choices.`}]}}],raw:`Readonly<{ // NOTE(jeremy): This is referenced in the component. Verify if there's any // production data that still has this. coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:"",defaultValue:{value:"function () {}",computed:!1}},trackInteraction:{required:!0,tsType:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"TrackingExtraArgs"},name:"extraData"}],return:{name:"void"}}},description:""},isLastUsedWidget:{required:!0,tsType:{name:"boolean"},description:""},linterContext:{required:!1,tsType:{name:"LinterContextProps"},description:"",defaultValue:{value:"linterContextDefault",computed:!0}},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},left:{defaultValue:{value:"[]",computed:!1},required:!1},right:{defaultValue:{value:"[]",computed:!1},required:!1},labels:{defaultValue:{value:'["", ""]',computed:!1},required:!1},orderMatters:{defaultValue:{value:"false",computed:!1},required:!1},padding:{defaultValue:{value:"true",computed:!1},required:!1}}};function $i(t,e,r){const n=e.answers,a=t.answers,i=_n(n),s=_n(a),o=i[0]!==s[0]||i[1]!==s[1],l=Lr.number.createValidatorFunctional;let u=null,y=!1,m=!1;return g(s[0]).times(h=>{g(s[1]).times(p=>{if((a[h][p]==null||a[h][p].toString().length===0)&&(y=!0),!o){const b=l(n[h][p],{simplify:!0},r)(a[h][p]);b.message&&(u=b.message),b.correct||(m=!0)}})}),y?{type:"invalid",message:r.fillAllCells}:o?{type:"points",earned:0,total:1,message:null}:{type:"points",earned:m?0:1,total:1,message:u}}const{assert:Qo}=na,{stringArrayOfSize:Pg}=z,zg={INPUT_MARGIN:3,INPUT_HEIGHT:30,INPUT_WIDTH:40},Lg={INPUT_MARGIN:4,INPUT_HEIGHT:36,INPUT_WIDTH:64};function ve(t,e){return[""+t,""+e]}const Di=function(){return ve(0,0)},Jo=function(t){return Qo(g.isArray(t)&&t.length===2),+t[0]},Zo=function(t){return Qo(g.isArray(t)&&t.length===2),+t[1]},rr=function(t){const e=Jo(t),r=Zo(t);return"answer"+e+","+r};function _n(t){const e=[1,1];return g(t).each((r,n)=>{let a=0;g(r).each((i,s)=>{i!=null&&i.toString().length&&(a=s+1)}),e[1]=Math.max(e[1],a),a>0&&(e[0]=Math.max(e[0],n+1))}),e}const It=class It extends k.Component{constructor(){super(...arguments),this.state={enterTheMatrix:0},this.getInputPaths=()=>{const e=[],r=this.props.matrixBoardSize[0],n=this.props.matrixBoardSize[1];return g(r).times(a=>{g(n).times(i=>{const s=ve(a,i);e.push(s)})}),e},this.getGrammarTypeForPath=e=>"number",this._handleFocus=(e,r)=>{this.props.onFocus(ve(e,r))},this._handleBlur=(e,r)=>{this.props.onBlur(ve(e,r))},this.focus=()=>(this.focusInputPath(Di()),!0),this.focusInputPath=e=>{const r=rr(e);this.refs[r].focus()},this.blurInputPath=e=>{e.length===0&&(e=Di());const r=rr(e);this.refs[r].blur()},this.getDOMNodeForPath=e=>{const r=rr(e);return V.findDOMNode(this.refs[r])},this.setInputValue=(e,r,n)=>{const a=Jo(e),i=Zo(e);this.onValueChange(a,i,r,n)},this.handleKeyDown=(e,r,n)=>{const a=this.props.matrixBoardSize[0],i=this.props.matrixBoardSize[1];let s=null;const o=this.refs[rr(ve(e,r))],l=o.getStringValue(),u=o.getSelectionStart(),y=o.getSelectionEnd();let m=null;if(n.key==="ArrowUp"&&e>0?m=ve(e-1,r):n.key==="ArrowDown"&&e+10?u===0&&y===0&&(m=ve(e,r-1)):n.key==="ArrowRight"&&r+1{const i=this.props.answers.map(s=>[...s]);i[e]||(i[e]=[]),i[e][r]=n,this.props.onChange({answers:i},a),this.props.trackInteraction()}}static validate(e,r,n){return $i(e,r,n)}componentDidMount(){this.cursorPosition=[0,0]}getUserInput(){return{answers:this.props.answers}}simpleValidate(e){return $i(this.getUserInput(),e,this.context.strings)}render(){let e;this.props.apiOptions.customKeypad?e=Lg:e=zg;const{INPUT_MARGIN:r,INPUT_HEIGHT:n,INPUT_WIDTH:a}=e,i=_n(this.props.answers),s=this.props.matrixBoardSize[0],o=this.props.matrixBoardSize[1],l=this.props.cursorPosition[0],u=this.props.cursorPosition[1],y=Math.max(l,i[0]-1),m=Math.max(u,i[1]-1),h=(y+1)*(n+2*r),p=(m+1)*(a+2*r),c=We({"perseus-matrix":!0,"static-mode":this.props.static,"the-matrix":this.state.enterTheMatrix>=5});return q("div",{className:c,children:[this.props.prefix&&d("div",{className:"matrix-prefix",children:d(H,{content:this.props.prefix,linterContext:this.props.linterContext,strings:this.context.strings})}),q("div",{className:"matrix-input",children:[d("div",{className:"matrix-bracket bracket-left",style:{height:h}}),d("div",{className:"matrix-bracket bracket-right",style:{height:h,left:p}}),g(s).times(b=>{const T=this.props.answers[b];return d("div",{className:"matrix-row",children:g(o).times(R=>{const A=b>y||R>m,O={className:A?"outside":"inside",ref:rr(ve(b,R)),value:T?T[R]:null,style:{height:n,width:a,margin:r},disabled:this.props.apiOptions.readOnly,onFocus:()=>{this.cursorPosition=[b,R],this.props.onChange({cursorPosition:[b,R]},()=>!1),this._handleFocus(b,R)},onBlur:()=>{b===this.cursorPosition[0]&&R===this.cursorPosition[1]&&this.props.onChange({cursorPosition:[0,0]},()=>!1),this._handleBlur(b,R)},onKeyDown:v=>{this.handleKeyDown(b,R,v)},onChange:(v,w)=>{this.onValueChange(b,R,v,w)}};let f;if(this.props.apiOptions.customKeypad)f=d(Fr,{...O,style:{margin:r,minWidth:a,minHeight:n,boxSizing:"border-box",backgroundColor:A?"#f3f3f3":"#fff"},scrollable:!0,keypadElement:this.props.keypadElement});else if(this.props.numericInput)f=d(cs,{...O});else{const v={...O,style:j.StyleSheet.create({input:{...O.style,display:"inline-block",padding:0,backgroundColor:A?"#f3f3f3":"#fff"}}).input};f=d(Tu,{...v})}return d("span",{className:"matrix-input-field",children:f},R)})},b)})]}),this.props.suffix&&d("div",{className:"matrix-suffix",children:d(H,{content:this.props.suffix,linterContext:this.props.linterContext,strings:this.context.strings})})]})}};It.contextType=M,It.defaultProps={matrixBoardSize:[3,3],answers:[[]],prefix:"",suffix:"",cursorPosition:[0,0],apiOptions:ge.defaults,linterContext:B};let Fn=It;const _g=t=>{const e=g(t.matrixBoardSize[0]).times(function(){return Pg(t.matrixBoardSize[1])});return t=g.pick(t,"matrixBoardSize","prefix","suffix"),g.extend(t,{answers:e})},Fg=t=>{const e=g.pick(t,"matrixBoardSize","prefix","suffix");return e.answers=g.map(t.answers,r=>g.map(r,n=>n!=null?String(n):"")),e},Sg={name:"matrix",displayName:"Matrix",hidden:!0,widget:Fn,transform:_g,staticTransform:Fg,isLintable:!0};/* -object-assign -(c) Sindre Sorhus -@license MIT -*/var Ui=Object.getOwnPropertySymbols,Mg=Object.prototype.hasOwnProperty,$g=Object.prototype.propertyIsEnumerable;function Dg(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function Ug(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var n=Object.getOwnPropertyNames(e).map(function(i){return e[i]});if(n.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(i){a[i]=i}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}var Vg=Ug()?Object.assign:function(t,e){for(var r,n=Dg(t),a,i=1;i"u")throw Error("create-react-class could not find the React object. If you are using script tags, make sure that React is being loaded before create-react-class.");var Qg=new pt.Component().updater,Jg=Xg(pt.Component,pt.isValidElement,Qg);const Zg=hs(Jg),eh={url:null,top:0,left:0},el=Zg({displayName:"Measurer",propTypes:{apiOptions:ge.propTypes,box:re.arrayOf(re.number),image:re.shape({url:re.string,top:re.number,left:re.number}),showProtractor:re.bool,protractorX:re.number,protractorY:re.number,showRuler:re.bool,rulerLabel:re.string,rulerTicks:re.number,rulerPixels:re.number,rulerLength:re.number},getDefaultProps:function(){return{box:[480,480],image:{},showProtractor:!0,protractorX:7.5,protractorY:.5,showRuler:!1,rulerLabel:"",rulerTicks:10,rulerPixels:40,rulerLength:10}},getInitialState:function(){return{}},componentDidMount:function(){this.setupGraphie()},componentDidUpdate:function(t){g.any(["box","showProtractor","showRuler","rulerLabel","rulerTicks","rulerPixels","rulerLength"],function(r){return t[r]!==this.props[r]},this)&&this.setupGraphie()},setupGraphie:function(){const t=V.findDOMNode(this.refs.graphieDiv);_(t).empty();const e=this.graphie=He.createGraphie(t),r=[40,40],n=[[0,this.props.box[0]/r[0]],[0,this.props.box[1]/r[1]]];e.init({range:n,scale:r}),e.addMouseLayer({allowScratchpad:!0,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable}),this.protractor&&this.protractor.remove(),this.props.showProtractor&&(this.protractor=e.protractor([this.props.protractorX,this.props.protractorY])),this.ruler&&this.ruler.remove(),this.props.showRuler&&(this.ruler=e.ruler({center:[(n[0][0]+n[0][1])/2,(n[1][0]+n[1][1])/2],label:this.props.rulerLabel,pixelsPerUnit:this.props.rulerPixels,ticksPerUnit:this.props.rulerTicks,units:this.props.rulerLength}))},getUserInput:function(){return{}},simpleValidate:function(){return G(1)},focus:_.noop,render:function(){const t=g.extend({},eh,this.props.image);return q("div",{className:"perseus-widget perseus-widget-measurer graphie-container above-scratchpad",style:{width:this.props.box[0],height:this.props.box[1]},children:[t.url&&d("div",{style:{position:"relative",top:t.top,left:t.left},children:d(_r,{src:t.url})}),d("div",{className:"graphie",ref:"graphieDiv"})]})}});g.extend(el,{validate:G(1)});const rh={1:t=>g(t).chain().omit("imageUrl","imageTop","imageLeft").extend({image:{url:t.imageUrl,top:t.imageTop,left:t.imageLeft}}).value()},th={name:"measurer",displayName:"Measurer",hidden:!0,widget:el,version:{major:1,minor:0},propUpgrades:rh};function nh(t,e){e.value!==null&&(t.fillStyle=le.fgColor,t.font=le.font,t.fillText(e.value,e.pos[0]-le.fontSizePx/2+1,e.pos[1]+le.fontSizePx/2))}function ah(t,e){let r=new Path2D;t.lineWidth=5*le.lineWidth,t.strokeStyle=le.fgColor,r.moveTo(e.startPos[0],e.startPos[1]),r.lineTo(e.endPos[0],e.endPos[1]),t.stroke(r),r=new Path2D,t.lineWidth=3*le.lineWidth,t.strokeStyle=le.bgColor,r.moveTo(e.startPos[0],e.startPos[1]),r.lineTo(e.endPos[0],e.endPos[1]),t.stroke(r)}function ih(t,e){let r=new Path2D;t.lineWidth=7*le.lineWidth,t.strokeStyle=le.fgColor,r.moveTo(e.startPos[0],e.startPos[1]),r.lineTo(e.endPos[0],e.endPos[1]),t.stroke(r),r=new Path2D,t.lineWidth=5*le.lineWidth,t.strokeStyle=le.bgColor,r.moveTo(e.startPos[0],e.startPos[1]),r.lineTo(e.endPos[0],e.endPos[1]),t.stroke(r),rl(t,e)}function rl(t,e){const r=new Path2D;t.lineWidth=le.lineWidth,t.strokeStyle=le.fgColor,r.moveTo(e.startPos[0],e.startPos[1]),r.lineTo(e.endPos[0],e.endPos[1]),t.stroke(r)}const sh={text:nh,"line:single":rl,"line:double":ah,"line:triple":ih};function oh(t){return function(e){sh[e.type](t,e)}}const Hi={"line:single":0,"line:double":0,"line:triple":0,text:1};function lh(t,e){return Hi[t.type]-Hi[e.type]}function uh(t,e){e.sort(lh).forEach(oh(t))}const le={bgColor:"rgb(255, 255, 255)",fgColor:"rgb(0, 0, 0)",fontSizePx:12,lineWidth:1,font:"12px sans"},tl=30;function dh(t,e,r){const n=t[0],a=t[1];return[n+Math.cos(e*2*Math.PI/360)*r,a+-1*Math.sin(e*2*Math.PI/360)*r]}function nl(t,e,r,n){let a=t.symbol;if(a==="C"&&Object.keys(e).length!==1&&(a=null),t.idx==="1,0"){const p=[0,0];return t.pos=p,t.baseAngle=-30+n,{type:"text",value:a,pos:p,idx:t.idx}}const i=e[t.connections.find(function(p){return e[p].pos})],s=i.connections.indexOf(t.idx);let o=60,l=120;i.connections.length===4?(l=90,o=90):(r.find(p=>p.bondType==="triple"&&p.to===t.idx)||r.find(p=>p.bondType==="triple"&&p.to===i.idx))&&(l=0,o=0);let u=0;const y=i.idx.split(":"),m=y[y.length-1].split(",")[0];parseInt(m)%2!==0?u=i.baseAngle-(o-l*s):u=i.baseAngle+(o-l*s);const h=dh(i.pos,u,tl);return t.pos=h,t.baseAngle=u,{type:"text",value:a,pos:h,idx:t.idx}}function yh(t,e){let n=[t.pos[0],t.pos[1]],a=[e.pos[0],e.pos[1]];return t.symbol!=="C"&&(n=[e.pos[0]-(1-.25)*(e.pos[0]-t.pos[0]),e.pos[1]-(1-.25)*(e.pos[1]-t.pos[1])]),e.symbol!=="C"&&(a=[t.pos[0]-(1-.25)*(t.pos[0]-e.pos[0]),t.pos[1]-(1-.25)*(t.pos[1]-e.pos[1])]),[n,a]}function al(t,e){const r=e[t.from],n=e[t.to],a=yh(r,n);return{type:"line:"+t.bondType,startPos:a[0],endPos:a[1]}}function Gi(t){return t.join(":")}function ha(t,e,r){if(r===null)return[t,e];if(r.type==="atom"){const n=Gi(r.idx);t[n]={idx:n,symbol:r.symbol,connections:[]},r.bonds&&r.bonds.forEach(function(a){const i=Gi(a.to.idx);t[n].connections.push(i),e.push({from:n,to:i,bondType:a.bondType}),ha(t,e,a.to),t[i].connections.push(n)})}return[t,e]}function il(t,e,r,n,a){if(e.length===0)return t;const i=e.shift(),s=r[i];return s.connections.forEach(function(o){r[o].pos||e.push(o)}),il(t.concat(nl(s,r,n,a)),e,r,n,a)}function sl(t,e,r){return r.length===0?t:sl(t.concat(al(r[0],e)),e,r.slice(1))}function mh(t,e){const r=ha({},[],t),n=r[0],a=r[1],i=il([],["1,0"],n,a,e);return sl(i,n,a)}const gh={layout:mh,_atomLayout:nl,_bondLayout:al,_bondLength:tl,_convertTree:ha},hh=new RegExp("^[A-Za-z\\[\\]()=#+-]*$"),ol=new RegExp("^(Cl|Br|[CONPSFBI]|\\[)");function hr(t){this.message=t}function pr(t,e,r){const n=e[0],a=e.slice(1);let i;Array.isArray(t)?i=[...t]:i={...t||{}};let s=r;return a.length>0&&(s=pr(i[n],a,r)),i[n]=s,i}function ph(t,e){const r=e.reduce(function(n,a){return n[a]},t);return pr(t,e,r+1)}function ch(t){return hh.test(t)}function bh(t,e){const r=t[0],n=t.slice(1);if(r==="=")return cr(n,pr(e,["bond","bondType"],"double"));if(r==="#")return cr(n,pr(e,["bond","bondType"],"triple"));throw new hr("Invalid character: "+r)}function tt(t,e){if(e.length===0)return t;if(t==="")throw new hr("Mismatched parentheses");const r=t[0],n=t.slice(1);return r==="("?tt(n,e.concat(r)):r===")"?tt(n,e.slice(1)):tt(n,e)}function vh(t,e){const r=t[0],n=t.slice(1);if(r==="("){let a={...e,parens:e.parens+"("};a=ph(e,["idx",e.idx.length-1,1]);let i=-1;e.idx[e.idx.length-1][0]%2===0&&(i=0);const s={...a,idx:a.idx.concat([[i,0]]),parens:a.parens.concat("(")},o=cr(n,s),l=cr(tt(n,["("]),a);return[o].concat(l)}if(r===")"){if(e.parens[e.parens.length-1]!=="(")throw new hr("Mismatched parentheses");return null}throw new hr("Invalid bare character: "+r)}function fh(t,e){let r=null,n=null;if(t[0]==="["){const a=t.indexOf("]");if(a===-1)return["",t];r=t.slice(1,a),n=t.slice(a+1)}else r=ol.exec(t)[1],n=t.slice(r.length);return[r,n]}function wh(t,e){const r=fh(t),n=r[0];if(n==="")return["error","Unable to parse bracketed atom."];const a=r[1],i=pr(e,["idx",e.idx.length-1],[1+e.idx[e.idx.length-1][0],0]);let s=cr(a,pr(i,["bond","bondType"],"single"));!Array.isArray(s)&&s&&(s=[s]);const o={type:"atom",symbol:n,bonds:s,idx:i.idx};return e.bond?{type:"bond",bondType:e.bond.bondType,to:o}:o}function kh(t){return ol.test(t)}function qh(t){return t==="="||t==="#"}function cr(t,e){if(!ch(t))throw new hr("Invalid input.");return!t||t.length===0?null:kh(t)?wh(t,e||{idx:[[0,0]],parens:[],stack:[],bondModifiers:[]}):qh(t[0])?bh(t,e):vh(t,e)}const ll={parse:cr,ParseError:hr},{layout:Th}=gh,Ah=ll.parse,Rh=ll.ParseError,Qr=30,Oa=class Oa extends k.Component{constructor(){super(...arguments),this.state={parsedSmiles:null,error:null},this.stateFromSmiles=e=>{try{this.setState({parsedSmiles:Ah(e),error:null})}catch(r){if(r instanceof Rh)this.setState({error:r.message});else throw r}},this.setCanvasBounds=(e,r)=>{const n=Math.max(...r.map(u=>u.pos?u.pos[0]:-1/0)),a=Math.max(...r.map(u=>u.pos?u.pos[1]:-1/0)),i=Math.min(...r.map(u=>u.pos?u.pos[0]:1/0)),s=Math.min(...r.map(u=>u.pos?u.pos[1]:1/0)),o=n-i+2*Qr,l=a-s+2*Qr;return e.width=o,e.height=l,[Qr-i,Qr-s]},this.canvasRender=()=>{if(this.state.error||!this.state.parsedSmiles)return;const e=Th(this.state.parsedSmiles,this.props.rotationAngle),r=this.refs.canvas,n=this.setCanvasBounds(r,e),a=r.getContext("2d");a.clearRect(0,0,r.width,r.height),a.save(),a.translate(n[0],n[1]),uh(a,e),a.restore()}}UNSAFE_componentWillMount(){this.stateFromSmiles(this.props.smiles)}componentDidMount(){this.canvasRender()}UNSAFE_componentWillReceiveProps(e){this.stateFromSmiles(e.smiles)}componentDidUpdate(){this.canvasRender()}render(){let e=d("canvas",{className:"molecule-canvas",id:this.props.widgetId+"-molecule",ref:"canvas",children:this.context.strings.molecularDrawing({content:this.props.smiles||""})});return this.state.error&&(e=d("div",{className:"error",children:this.state.error})),d("div",{className:"molecule-canvas",children:e})}};Oa.contextType=M;let ct=Oa;const xa=class xa extends k.Component{simpleValidate(){return G()}getUserInput(){return[]}validate(){return G()}render(){return d(ct,{widgetId:this.props.widgetId,smiles:this.props.smiles,rotationAngle:this.props.rotationAngle})}};xa.defaultProps={rotationAngle:0};let Sn=xa;const Oh={name:"molecule-renderer",displayName:"Molecule renderer",hidden:!0,widget:Sn};ct.__docgenInfo={description:"",methods:[{name:"stateFromSmiles",docblock:null,modifiers:[],params:[{name:"smiles",optional:!1,type:null}],returns:null},{name:"setCanvasBounds",docblock:null,modifiers:[],params:[{name:"canvas",optional:!1,type:null},{name:"items",optional:!1,type:null}],returns:null},{name:"canvasRender",docblock:null,modifiers:[],params:[],returns:null}],displayName:"Molecule",props:{widgetId:{required:!0,tsType:{name:"string",raw:'PerseusMoleculeRendererWidgetOptions["widgetId"]'},description:""},smiles:{required:!0,tsType:{name:"string",raw:'PerseusMoleculeRendererWidgetOptions["smiles"]'},description:""},rotationAngle:{required:!0,tsType:{name:"number",raw:'PerseusMoleculeRendererWidgetOptions["rotationAngle"]'},description:""}}};function Ki(t,e){const r=e.range,n=t.divisionRange,a=e.initialX!=null?e.initialX:r[0],i=e.isInequality?"ge":"eq",s=e.correctRel||"eq",o=Qn(t.numLinePosition,e.correctX||0),l=t.numDivisions>n[1]||t.numDivisionsMath.min(Math.max(t,e),r),Ih="–",Qt=30,Nh={ge:"le",gt:"lt",le:"ge",lt:"gt"},Eh={ge:"gt",gt:"ge",le:"lt",lt:"le"};function bt(t,e){return e===1?""+t:`\\dfrac{${t}}{${e}}`}function ul(t,e){if(t<0)return"-"+ul(-t,e);const r=Math.floor(t/e);return r===0?bt(t,e):t-r*e===0?""+r:r+bt(t-r*e,e)}function Ph(t,e,r){const n=Math.floor(r/e);return bt(t*n,r)}const Jt=(t,e,r,n,a)=>{if(n=n||r,e==="decimal"||e==="decimal ticks")return t.label([r,-.53],Math.round(n*100)/100,"center");if(e==="improper"){const i=Ve.toFraction(n);return t.label([r,-.17],bt(i[0],i[1]),"below")}if(e==="mixed"){const i=Ve.toFraction(n);return t.label([r,-.17],ul(i[0],i[1]),"below")}if(e==="non-reduced"){const i=Ve.toFraction(n);return t.label([r,-.17],Ph(i[0],i[1],a),"below")}},zh=Y.createSimpleClass((t,e)=>{if(!g.isFinite(e.tickStep)||e.tickStep<=0)return[];const r=[],n=e.range,a=e.labelRange,i=a[0]==null?n[0]:a[0],s=a[1]==null?n[1]:a[1];let o;if(e.labelStyle==="non-reduced"){const l=[i,s];for(let m=0;m<=e.numDivisions;m++){const h=n[0]+m*e.tickStep;l.push(h)}const u=m=>xl(m)[1],y=g.map(l,u);o=g.reduce(y,(m,h)=>Ve.getLCM(m,h))}else o=void 0;for(let l=0;l<=e.numDivisions;l++){const u=n[0]+l*e.tickStep;r.push(t.line([u,-.2],[u,.2])),(e.labelTicks||e.labelStyle==="decimal ticks")&&r.push(Jt(t,e.labelStyle,u,u,o))}return r.push(t.style(e.isMobile?{color:I.BLUE}:{},()=>Jt(t,e.labelStyle,i,i,o))),r.push(t.style(e.isMobile?{color:I.BLUE}:{},()=>Jt(t,e.labelStyle,s,s,o))),t.style({stroke:I.BLUE,strokeWidth:3.5},()=>{r.push(t.line([i,-.2],[i,.2])),r.push(t.line([s,-.2],[s,.2]))}),r}),Nt=class Nt extends k.Component{constructor(){super(...arguments),this.state={numDivisionsEmpty:!1},this.change=(...e)=>ne.apply(this,e),this.isValid=()=>{const e=this.props.range;let r=this.props.numLinePosition;const n=this.props.divisionRange;return r=r??e[0],e[0]=0&&Pa(r-e[1])<=0&&n[0]{const n=this.props.divisionRange.slice(),a=this.props.range[1]-this.props.range[0];if(e=Math.round(e),e=e<0?e*-1:e,e){const i=g.extend({},this.props,{tickStep:a/e}),s=this.snapNumLinePosition(i,this.props.numLinePosition);this.setState({numDivisionsEmpty:!1},()=>{this.props.onChange({divisionRange:n,numDivisions:e,numLinePosition:s},r)})}else this.setState({numDivisionsEmpty:!0},r)},this._handleTickCtrlFocus=()=>{this.props.onFocus(["tick-ctrl"])},this._handleTickCtrlBlur=()=>{this.props.onBlur(["tick-ctrl"])},this.focus=()=>{if(this.props.isTickCtrl)return this.refs["tick-ctrl"].focus(),!0},this.focusInputPath=e=>{e.length===1&&this.refs[e[0]].focus()},this.blurInputPath=e=>{e.length===1&&this.refs[e[0]].blur()},this.getInputPaths=()=>this.props.isTickCtrl?[["tick-ctrl"]]:[],this.getDOMNodeForPath=e=>{if(e.length===1)return V.findDOMNode(this.refs[e[0]])},this.getGrammarTypeForPath=e=>{if(e.length===1&&e[0]==="tick-ctrl")return"number"},this.setInputValue=(e,r,n)=>{e.length===1&&e[0]==="tick-ctrl"&&this.onNumDivisionsChange(r,n)},this._renderGraphie=()=>{const e=this.props.range,r=e[1]-e[0],n=g.pick(this.props,["range","isTickCtrl"]),a=g.extend({},this.props,{tickStep:r/this.props.numDivisions});return q(Y,{ref:"graphie",box:[this.props.apiOptions.isMobile?288:460,80],options:n,onMouseDown:i=>{this.refs.graphie.movables.numberLinePoint.grab(i)},setup:this._setupGraphie,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable,isMobile:this.props.apiOptions.isMobile,children:[d(zh,{...g.pick(a,["range","numDivisions","labelTicks","labelStyle","labelRange","tickStep"]),isMobile:this.props.apiOptions.isMobile}),this._renderInequality(a),this._renderNumberLinePoint(a)]},this.props.labelStyle)},this.snapNumLinePosition=(e,r)=>{const n=e.range[0],a=e.range[1],i=e.tickStep/e.snapDivisions;let s=Ch(r,n,a);return s=n+jl(s-n,i),Wh(g.isFinite(s)),s},this.movePosition=e=>{this.change({numLinePosition:e}),this.props.trackInteraction()},this._renderNumberLinePoint=e=>{const r=g(["lt","gt"]).contains(e.rel);let n;r?n=I._BACKGROUND:e.static?n=I.BLUE:n=I.GREEN;const a={fill:n,stroke:e.static?I.BLUE:I.GREEN,"stroke-width":r?3:1},i={fill:r?I._BACKGROUND:I.GREEN,"stroke-width":r?3:1},s=e.isInequality?{stroke:I.GREEN,"fill-opacity":r?0:1}:{};return d(xh,{ref:"numberLinePoint",pointSize:6,coord:[e.numLinePosition,0],constraints:[(o,l)=>[o[0],l[1]],(o,l)=>[this.snapNumLinePosition(e,o[0]),o[1]]],normalStyle:a,highlightStyle:i,onMove:o=>{this.movePosition(o[0])},isMobile:this.props.apiOptions.isMobile,mobileStyleOverride:s,showTooltips:this.props.showTooltips,xOnlyTooltip:!0})},this.handleReverse=()=>{const e=Nh[this.props.rel];this.props.onChange({rel:e})},this.handleToggleStrict=()=>{const e=Eh[this.props.rel];this.props.onChange({rel:e})},this._getInequalityEndpoint=e=>{const r=g(["ge","gt"]).contains(e.rel),n=400,a=e.range,i=(a[1]-a[0])/n,s=Qt*i,o=a[0]-s,l=a[1]+s;return r?[l,0]:[o,0]},this._renderInequality=e=>{if(e.isInequality){const r=this._getInequalityEndpoint(e),n={arrows:"->",stroke:this.props.apiOptions.isMobile?I.GREEN:I.BLUE,strokeWidth:3.5},a=["ge","gt"].includes(e.rel);return d(jh,{start:[(a?.4:-.4)+e.numLinePosition,0],end:r,style:n})}return null},this._setupGraphie=(e,r)=>{if(!this.isValid())return;const n=this.props.apiOptions.isMobile?288-Qt*2:400,a=r.range,i=(a[1]-a[0])/n,s=Qt*i,o=a[0]-s,l=a[1]+s,y=this.props.labelStyle==="improper"||this.props.labelStyle==="mixed"||this.props.labelStyle==="non-reduced"?-1.5:-1;e.init({range:[[o,l],[y,1]],scale:[1/i,40],isMobile:this.props.apiOptions.isMobile});const h=(a[0]+a[1])/2;e.line([h,0],[l,0],{arrows:"->"}),e.line([h,0],[o,0],{arrows:"->"})}}static validate(e,r){return Ki(e,r)}getUserInput(){return{numLinePosition:this.props.numLinePosition,rel:this.props.isInequality?this.props.rel:"eq",numDivisions:this.props.numDivisions,divisionRange:this.props.divisionRange}}simpleValidate(e){return Ki(this.getUserInput(),e)}render(){const{strings:e}=this.context,r=this.props.divisionRange,n=r[0]+Ih+r[1],a=this.props.numDivisionsr[1],i=q("div",{children:[d("input",{type:"button",className:"simple-button",value:e.switchDirection,onClick:this.handleReverse}),d("input",{type:"button",className:"simple-button",value:g(["le","ge"]).contains(this.props.rel)?e.circleOpen:e.circleFilled,onClick:this.handleToggleStrict})]});let s;if(this.props.isTickCtrl){let o;this.props.apiOptions.customKeypad?o=Fr:o=cs,s=q("label",{children:[e.numDivisions," ",d(o,{ref:"tick-ctrl",value:this.state.numDivisionsEmpty?null:this.props.numDivisions||r[0],checkValidity:l=>l>=r[0]&&l<=r[1],onChange:this.onNumDivisionsChange,onFocus:this._handleTickCtrlFocus,onBlur:this._handleTickCtrlBlur,useArrowKeys:!0,keypadElement:this.props.keypadElement})]})}return q("div",{className:"perseus-widget perseus-widget-interactive-number-line",children:[s,this.isValid()?this.props.isTickCtrl&&a?d("div",{className:"perseus-error",children:e.divisions({divRangeString:n})}):this._renderGraphie():d("div",{className:"perseus-error",children:"Invalid number line configuration."}),!this.props.static&&this.props.isInequality&&i]})}};Nt.contextType=M,Nt.defaultProps={range:[0,10],labelStyle:"decimal",labelRange:[null,null],divisionRange:[1,12],labelTicks:!0,isTickCtrl:!1,isInequality:!1,numLinePosition:0,snapDivisions:2,showTooltips:!1,rel:"ge",apiOptions:ge.defaults};let Mn=Nt;const Lh=t=>{const e=g.pick(t,["range","labelRange","labelStyle","labelTicks","divisionRange","snapDivisions","isTickCtrl","isInequality","showTooltips"]),r=t.initialX!=null?t.initialX:t.range[0],n=t.range[1]-t.range[0];let a;return t.numDivisions!=null?a=t.numDivisions:t.tickStep!=null?a=n/t.tickStep:a=void 0,g.extend(e,{numLinePosition:r,numDivisions:a,snapDivisions:e.snapDivisions||void 0}),e},_h=t=>{const e=g.pick(t,["range","labelRange","labelStyle","labelTicks","divisionRange","snapDivisions","isInequality"]),r=t.correctX!=null?t.correctX:t.range[0],n=t.range[1]-t.range[0];let a;return t.numDivisions!=null?a=t.numDivisions:t.tickStep!=null?a=n/t.tickStep:a=void 0,g.extend(e,{numLinePosition:r,numDivisions:a,rel:t.isInequality?t.correctRel:null,snapDivisions:e.snapDivisions||void 0}),e},Fh={name:"number-line",displayName:"Number line",widget:Mn,transform:Lh,staticTransform:_h};function Bi(t,e){return t.current.length===0?{type:"invalid",message:null}:{type:"points",earned:g.isEqual(t.current,g.pluck(e.correctOptions,"content"))?1:0,total:1,message:null}}class Sh extends k.Component{render(){return d("div",{className:"card-wrap "+_e.INTERACTIVE,style:{width:this.props.width},children:d("div",{className:"card placeholder",style:{height:this.props.width}})})}}class Mh extends k.Component{render(){return d("div",{className:"card-wrap "+_e.INTERACTIVE,children:d("div",{className:"card drag-hint"})})}}const Et=class Et extends k.Component{constructor(){super(...arguments),this.state={dragging:!1},this.bindMouseMoveUp=()=>{this.mouseMoveUpBound=!0,_(document).on("mousemove",this.onMouseMove),_(document).on("mouseup",this.onMouseUp)},this.unbindMouseMoveUp=()=>{this.mouseMoveUpBound=!1,_(document).off("mousemove",this.onMouseMove),_(document).off("mouseup",this.onMouseUp)},this.onMouseDown=e=>{e.preventDefault();const r=z.extractPointerLocation(e);r&&(this.setState({dragging:!0}),this.bindMouseMoveUp(),this.props.onMouseDown&&this.props.onMouseDown(r,this))},this.onMouseMove=e=>{if(!this.state.dragging)return;e.preventDefault();const r=z.extractPointerLocation(e);r&&this.props.onMouseMove&&this.props.onMouseMove(r)},this.onMouseUp=e=>{e.preventDefault();const r=z.extractPointerLocation(e);r&&(this.setState({dragging:!1}),this.unbindMouseMoveUp(),this.props.onMouseUp&&this.props.onMouseUp(r))}}componentDidMount(){this.mouseMoveUpBound=!1,document.addEventListener("touchmove",this.onMouseMove,z.supportsPassiveEvents()?{passive:!1}:!1)}shouldComponentUpdate(e,r){return this.props.floating||e.floating||this.props.content!==e.content||this.props.fakeRef!==e.fakeRef}componentDidUpdate(e,r){if(this.props.animating&&!e.animating&&this.props.animateTo&&this.props.startOffset){const n=15*Math.sqrt(Math.sqrt(Math.pow(this.props.animateTo.left-this.props.startOffset.left,2)+Math.pow(this.props.animateTo.top-this.props.startOffset.top,2)));_(V.findDOMNode(this)).animate(this.props.animateTo,Math.max(n,1),this.props.onAnimationEnd)}}componentWillUnmount(){this.mouseMoveUpBound&&(ra.error("Removing an element with bound event handlers.",xe.Internal),this.unbindMouseMoveUp(),z.resetTouchHandlers()),document.removeEventListener("touchmove",this.onMouseMove)}render(){var i,s;let e={};this.props.floating&&(e={position:"absolute",left:(i=this.props.startOffset)==null?void 0:i.left,top:(s=this.props.startOffset)==null?void 0:s.top}),this.props.width&&(e.width=this.props.width);const r=["card"];this.props.stack&&r.push("stack"),this.props.floating&&!this.props.animating&&this.props.mouse&&this.props.startMouse&&(r.push("dragging"),e.left+=this.props.mouse.left-this.props.startMouse.left,e.top+=this.props.mouse.top-this.props.startMouse.top);const n=g.pick(this.props,"content"),a=this.props.animating?_.noop:this.onMouseDown;return d("div",{className:"card-wrap "+_e.INTERACTIVE,style:e,onMouseDown:a,onTouchStart:a,onTouchEnd:this.onMouseUp,onTouchCancel:this.onMouseUp,children:d("div",{className:r.join(" "),children:d(H,{...n,linterContext:this.props.linterContext,strings:this.context.strings})})})}};Et.contextType=M,Et.defaultProps={stack:!1,animating:!1,linterContext:B};let nr=Et;const $h="normal",Zt="horizontal",ja=class ja extends k.Component{constructor(){super(...arguments),this.state={current:[],dragging:!1,placeholderIndex:null,dragKey:null,animating:!1,dragContent:null,dragWidth:null,dragHeight:null,offsetPos:null,animateTo:null,grabPos:null},this.onClick=(e,r,n,a)=>{const i=_(V.findDOMNode(a)),s=this.state.current.slice();let o,l=null;e==="current"?(s.splice(r,1),o=this.state.current[r],l=r):e==="bank"&&(o=this.props.options[r]),this.setState({current:s,dragging:!0,placeholderIndex:l,dragKey:o.key,dragContent:o.content,dragWidth:i.width(),dragHeight:i.height(),grabPos:n,mousePos:n,offsetPos:i.position()})},this.onRelease=e=>{const r=this.refs.dragging;if(r==null)return;const n=this.isCardInBank(r),a=this.state.placeholderIndex||0,i=()=>{const l=this.state.current.slice();if(!n){const u={content:this.state.dragContent,key:g.uniqueId("perseus_draggable_card_"),width:this.state.dragWidth};l.splice(a,0,u)}this.props.onChange({current:l}),this.setState({current:l,dragging:!1,placeholderIndex:null,animating:!1}),this.props.trackInteraction()},s=_(V.findDOMNode(r)).position();let o=null;n?g.each(this.props.options,function(l,u){if(l.content===this.state.dragContent){const y=V.findDOMNode(this.refs["bank"+u]);o=_(y).position()}},this):this.refs.placeholder!=null&&(o=_(V.findDOMNode(this.refs.placeholder)).position()),o==null?i():this.setState({offsetPos:s,animateTo:o,onAnimationEnd:i,animating:!0,dragging:!1})},this.onMouseMove=e=>{const r=this.refs.dragging;if(r==null)return;let n;this.isCardInBank(r)?n=null:n=this.findCorrectIndex(r,this.state.current),this.setState({mousePos:e,placeholderIndex:n})},this.findCorrectIndex=(e,r)=>{const n=this.props.layout===Zt,a=_(V.findDOMNode(this.refs.dragList)),i=a.offset().left,s=a.offset().top,o=_(V.findDOMNode(e)).offset().left-i,l=_(V.findDOMNode(e)).offset().top-s;let u=0,y=0,m=0;return n?g.each(r,function(h,p){const c=V.findDOMNode(this.refs["sortable"+p]),b=_(c).outerWidth(!0);o>y+b/2&&(u+=1),y+=b},this):g.each(r,function(h,p){const c=V.findDOMNode(this.refs["sortable"+p]),b=_(c).outerHeight(!0);l>m+b/2&&(u+=1),m+=b},this),u},this.isCardInBank=e=>{if(e==null)return!1;const r=this.props.layout===Zt,n=_(V.findDOMNode(e)),a=_(V.findDOMNode(this.refs.bank)),i=n.offset(),s=a.offset(),o=n.outerHeight(!0),l=a.outerHeight(!0),u=a.outerWidth(!0),y=V.findDOMNode(this.refs.dragList);_(y).width();const m=n.outerWidth(!0);return r?i.top+o/2{const r=e.map(n=>({content:n}));this.props.onChange({current:r}),this.setState({current:r})}}static validate(e,r){return Bi(e,r)}UNSAFE_componentWillReceiveProps(e){g.isEqual(this.props.current,e.current)||this.setState({current:e.current})}getUserInput(){return{current:g.map(this.props.current,function(e){return e.content})}}simpleValidate(e){return Bi(this.getUserInput(),e)}render(){const e=this.state.dragging&&d(nr,{ref:"dragging",floating:!0,content:this.state.dragContent,startOffset:this.state.offsetPos,startMouse:this.state.grabPos,mouse:this.state.mousePos,width:this.state.dragWidth,onMouseUp:this.onRelease,onMouseMove:this.onMouseMove,linterContext:this.props.linterContext},this.state.dragKey||"draggingCard"),r=this.state.animating&&d(nr,{floating:!0,animating:!0,content:this.state.dragContent,startOffset:this.state.offsetPos,width:this.state.dragWidth,animateTo:this.state.animateTo,onAnimationEnd:this.state.onAnimationEnd,linterContext:this.props.linterContext},this.state.dragKey||"draggingCard"),n=g.map(this.state.current,function(o,l){return d(nr,{ref:"sortable"+l,fakeRef:"sortable"+l,floating:!1,content:o.content,width:o.width,linterContext:this.props.linterContext,onMouseDown:this.state.animating?_.noop:this.onClick.bind(null,"current",l)},`sortableCard${l}`)},this);if(this.state.placeholderIndex!=null){const o=d(Sh,{ref:"placeholder",width:this.state.dragWidth,height:this.state.dragHeight},"placeholder");n.splice(this.state.placeholderIndex,0,o)}const a=n.length>0;n.push(e,r);const i=q("div",{className:"perseus-clearfix draggable-box",children:[!a&&d(Mh,{}),d("div",{ref:"dragList",children:n})]}),s=d("div",{ref:"bank",className:"bank perseus-clearfix",children:g.map(this.props.options,(o,l)=>d(nr,{ref:"bank"+l,floating:!1,content:o.content,stack:!0,linterContext:this.props.linterContext,onMouseDown:this.state.animating?_.noop:this.onClick.bind(null,"bank",l),onMouseMove:this.onMouseMove,onMouseUp:this.onRelease},l),this)});return q("div",{className:"draggy-boxy-thing orderer height-"+this.props.height+" layout-"+this.props.layout+" above-scratchpad blank-background perseus-clearfix "+_e.INTERACTIVE,ref:"orderer",children:[s,i]})}};ja.defaultProps={current:[],options:[],correctOptions:[],height:$h,layout:Zt,linterContext:B};let $n=ja;const Dh={name:"orderer",displayName:"Orderer",hidden:!0,widget:$n,isLintable:!0};function qe(t,e,r,n){let a;return e==="start"&&n==="start"?a=Range.START_TO_START:e==="start"&&n==="end"?a=Range.END_TO_START:e==="end"&&n==="start"?a=Range.START_TO_END:a=Range.END_TO_END,t.compareBoundaryPoints(a,r)}function Vt(t,e){const r=t.cloneRange();return r.setEnd(e.endContainer,e.endOffset),r}function Ht(t,e){return!(qe(t,"end",e,"start")<0||qe(e,"end",t,"start")<0)}function Uh(t,e){return qe(t,"start",e,"start")<=0&&qe(t,"end",e,"end")>=0}function Vh(t,e){if(!Ht(t,e))return null;const r=qe(t,"start",e,"start")>0?t:e,n=qe(t,"end",e,"end")<0?t:e;return Vt(r,n)}function Hh(t,e){if(!Ht(t,e))return null;const r=qe(t,"start",e,"start")<0?t:e,n=qe(t,"end",e,"end")>0?t:e;return Vt(r,n)}function Yi(t,e,r,n,a){let i=-1,s=n,o=a,l=0;for(;s<=o;){if(l++,l>e.length*2)throw new Error(`Assertion error: Binary search isn't terminating? lower=${s}, upper=${o}`);const u=Math.floor((s+o)/2);r==="first"?qe(e[u],"end",t,"start")<=0?s=u+1:(i=u,o=u-1):qe(e[u],"start",t,"end")>=0?o=u-1:(i=u,s=u+1)}return i}function Gh(t,e){const r=Yi(t,e,"first",0,e.length-1);if(r<0)return null;const n=Yi(t,e,"last",r,e.length-1);return n<0?null:[r,n]}function Kh(t,e){const r={};let n=e.domRange,a=e.firstWordIndex,i=e.lastWordIndex;for(const u of Object.keys(t)){const y=t[u],m=Hh(y.domRange,n);m?(n=m,a=Math.min(y.firstWordIndex,a),i=Math.max(y.lastWordIndex,i)):r[u]=y}const s={firstWordIndex:a,lastWordIndex:i,domRange:n},o=Object.keys(r),l=Yh(o);return r[l]=s,r}function Bh(t,e,r){for(const l of Object.keys(t)){const u=t[l].domRange;if(Uh(u,r))return null}const n=Gh(r,e);if(!n)return null;const[a,i]=n,s=e[a],o=e[i];return{firstWordIndex:a,lastWordIndex:i,domRange:Vt(s,o)}}function Yh(t){const e=`${new Date().getTime()}`;if(!t.includes(e))return e;let r=0,n;do n=`${e}-${r}`,r++;while(t.includes(n));return n}function Xh(t,e){const{firstWordIndex:r,lastWordIndex:n}=t.range,a=e[r];if(!a)throw new Ye(`first word index ${a} is out of bounds: must be 0–${e.length-1} inclusive`,xe.InvalidInput,{metadata:{firstWord:a,wordRanges:JSON.stringify(e)}});const i=e[n];if(!i)throw new Ye(`last word index ${i} is out of bounds: must be 0–${e.length-1} inclusive`,xe.InvalidInput,{metadata:{lastWord:i,wordRanges:JSON.stringify(e)}});return{firstWordIndex:r,lastWordIndex:n,domRange:Vt(a,i)}}function Qh(t){const{firstWordIndex:e,lastWordIndex:r}=t;return{range:{type:"word-indexes",firstWordIndex:e,lastWordIndex:r}}}function Dn(t,e){return{left:t.left-e.left,top:t.top-e.top}}function dl({left:t,top:e,width:r,height:n},a){return{...Dn({left:t,top:e},a),width:r,height:n}}function Jh(t){const e=[];return yl(t.commonAncestorContainer,t,e),e}function yl(t,e,r){const n=new Range;if(n.selectNodeContents(t),t.nodeType===Node.TEXT_NODE){const a=Vh(e,n);a&&Zh(t,a,r)}else if(t.nodeType===Node.ELEMENT_NODE){if(!Ht(e,n))return;for(const a of Array.from(t.childNodes))yl(a,e,r)}}function Zh(t,e,r){const n=t.parentElement,a=window.getComputedStyle(n);let i=null;if(typeof a.lineHeight=="string"&&a.lineHeight.endsWith("px")){const o=parseFloat(a.lineHeight);isNaN(o)||(i=o)}const s=Array.from(e.getClientRects());for(const o of s){const l={left:o.left,top:o.top,height:o.height,width:o.width};if(i!==null){const u=i-l.height;l.top-=u,l.height=i}r.push(l)}}class ml extends k.PureComponent{constructor(){super(...arguments),this.state={cachedHighlightRects:this._computeRects(this.props),tooltipIsHovered:!1}}UNSAFE_componentWillReceiveProps(e){(this.props.highlight!==e.highlight||this.props.offsetParent!==e.offsetParent)&&this.setState({cachedHighlightRects:this._computeRects(e)})}_computeRects(e){const{highlight:r,offsetParent:n}=e,a=Jh(r.domRange),{left:i,top:s}=n.getBoundingClientRect();return a.map(l=>dl(l,{left:i,top:s}))}_rectIsHovered(e,r){const n=Dn(r,{left:e.left,top:e.top});return 0<=n.left&&n.leftthis._rectIsHovered(o,s))}render(){const e=this.state.cachedHighlightRects;return d("div",{children:e.map((r,n)=>d("div",{className:j.css(ep.highlightRect),style:{position:"absolute",width:r.width,height:r.height,top:r.top,left:r.left,zIndex:this.props.zIndexes.belowContent}},n))})}}const ep=j.StyleSheet.create({highlightRect:{background:"#fffabe"}});ml.__docgenInfo={description:"",methods:[{name:"_computeRects",docblock:`Compute the set of rectangles that cover the highlighted content, with -coordinates relative to the offset parent. That way, we can use them -for CSS positioning.`,modifiers:[],params:[{name:"props",optional:!1,type:{name:"signature",type:"object",raw:`{ - // The DOMHighlight to render. - highlight: DOMHighlight; - // A unique key corresponding to the given \`highlight\`. - highlightKey: string; - // This component's \`offsetParent\` element, which is the nearest ancestor - // with \`position: relative\`. This will enable us to choose the correct - // CSS coordinates to align highlights and tooltips with the target - // content. - offsetParent: Element; - // The z-indexes to use when rendering tooltips above content, and - // highlights below content. - zIndexes: ZIndexes; -}`,signature:{properties:[{key:"highlight",value:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},required:!0}},{key:"highlightKey",value:{name:"string",required:!0}},{key:"offsetParent",value:{name:"Element",required:!0}},{key:"zIndexes",value:{name:"signature",type:"object",raw:`{ - belowContent: number; -}`,signature:{properties:[{key:"belowContent",value:{name:"number",required:!0}}]},required:!0}}]},alias:"Props"}}],returns:{type:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`Position & { - width: number; - height: number; -}`,elements:[{name:"signature",type:"object",raw:`{ - left: number; - top: number; -}`,signature:{properties:[{key:"left",value:{name:"number",required:!0}},{key:"top",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - width: number; - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]}}]}],raw:"ReadonlyArray"}},description:`Compute the set of rectangles that cover the highlighted content, with -coordinates relative to the offset parent. That way, we can use them -for CSS positioning.`},{name:"_rectIsHovered",docblock:`Return whether the given mouse position (coordinates relative to this -component's offset parent) is hovering over the given rectangle -(coordinates also relative to this component's offset parent).`,modifiers:[],params:[{name:"rect",optional:!1,type:{name:"intersection",raw:`Position & { - width: number; - height: number; -}`,elements:[{name:"signature",type:"object",raw:`{ - left: number; - top: number; -}`,signature:{properties:[{key:"left",value:{name:"number",required:!0}},{key:"top",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - width: number; - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]}}],alias:"Rect"}},{name:"mouseOffsetPosition",optional:!1,type:{name:"signature",type:"object",raw:`{ - left: number; - top: number; -}`,signature:{properties:[{key:"left",value:{name:"number",required:!0}},{key:"top",value:{name:"number",required:!0}}]},alias:"Position"}}],returns:{type:{name:"boolean"}},description:`Return whether the given mouse position (coordinates relative to this -component's offset parent) is hovering over the given rectangle -(coordinates also relative to this component's offset parent).`},{name:"isHovered",docblock:`Return whether the given mouse position (coordinates relative to the -viewport) is hovering over this highlight.`,modifiers:[],params:[{name:"mouseClientPosition",optional:!0,type:{name:"union",raw:"Position | null",elements:[{name:"signature",type:"object",raw:`{ - left: number; - top: number; -}`,signature:{properties:[{key:"left",value:{name:"number",required:!0}},{key:"top",value:{name:"number",required:!0}}]}},{name:"null"}]}}],returns:{type:{name:"boolean"}},description:`Return whether the given mouse position (coordinates relative to the -viewport) is hovering over this highlight.`}],displayName:"HighlightRenderer",props:{highlight:{required:!0,tsType:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]}},description:""},highlightKey:{required:!0,tsType:{name:"string"},description:""},offsetParent:{required:!0,tsType:{name:"Element"},description:""},zIndexes:{required:!0,tsType:{name:"signature",type:"object",raw:`{ - belowContent: number; -}`,signature:{properties:[{key:"belowContent",value:{name:"number",required:!0}}]}},description:""}}};class pa extends k.PureComponent{_getFocusRect(){const{focusNode:e,focusOffset:r,offsetParent:n}=this.props,a=document.createRange();a.setStart(e,r),a.setEnd(e,r);const i=a.getClientRects()[0];if(!i)return ra.log('[Highlighting] Known bug: Could not determine the focus position, so did not show an "Add Highlight" tooltip. https://app.asana.com/0/329800276300868/413878480039713 (see also /r/asana-links)'),null;const{left:s,top:o}=n.getBoundingClientRect();return dl({left:i.left,top:i.top,width:i.width,height:i.height},{left:s,top:o})}render(){const e=this._getFocusRect();if(!e)return null;const r=d("div",{className:j.css(rp.tooltipLabel),onClick:this.props.onClick,children:this.props.label}),n={position:"absolute",left:e.left,top:`calc(${Math.round(e.top)}px + 0.95em)`,height:0};return d("div",{style:n,onMouseEnter:this.props.onMouseEnter,onMouseLeave:this.props.onMouseLeave,children:d(Zn,{content:r,opened:!0,children:d("div",{})})})}}const rp=j.StyleSheet.create({tooltipLabel:{userSelect:"none",fontFamily:'"Lato", sans-serif',padding:`10px ${me.medium_16}px`,cursor:"pointer"}});pa.__docgenInfo={description:"",methods:[{name:"_getFocusRect",docblock:null,modifiers:[],params:[],returns:{type:{name:"union",raw:"Rect | null | undefined",elements:[{name:"intersection",raw:`Position & { - width: number; - height: number; -}`,elements:[{name:"signature",type:"object",raw:`{ - left: number; - top: number; -}`,signature:{properties:[{key:"left",value:{name:"number",required:!0}},{key:"top",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - width: number; - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]}}]},{name:"null"},{name:"undefined"}]}}}],displayName:"HighlightTooltip",props:{label:{required:!0,tsType:{name:"string"},description:""},onClick:{required:!0,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},onMouseEnter:{required:!1,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},onMouseLeave:{required:!1,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},focusNode:{required:!0,tsType:{name:"Node"},description:""},focusOffset:{required:!0,tsType:{name:"number"},description:""},offsetParent:{required:!0,tsType:{name:"Element"},description:""}}};const Wa=class Wa extends k.PureComponent{constructor(){super(...arguments),this.state={hoveredHighlightKey:null,hoveringTooltipFor:null},this._highlightRenderers={},this._handleMouseMove=e=>{const r={left:e.clientX,top:e.clientY},n=this._getHoveredHighlightKey(r);this.setState({hoveredHighlightKey:n})}}componentDidMount(){this._updateEditListeners(!1,this.props.editable)}UNSAFE_componentWillReceiveProps(e){this._updateEditListeners(this.props.editable,e.editable),this.state.hoveredHighlightKey!=null&&!(this.state.hoveredHighlightKey in e.highlights)&&this.setState({hoveredHighlightKey:null}),this.state.hoveringTooltipFor!=null&&!(this.state.hoveringTooltipFor in e.highlights)&&this.setState({hoveringTooltipFor:null})}componentWillUnmount(){this._updateEditListeners(this.props.editable,!1)}_updateEditListeners(e,r){!e&&r?window.addEventListener("mousemove",this._handleMouseMove):e&&!r&&(window.removeEventListener("mousemove",this._handleMouseMove),this.setState({hoveredHighlightKey:null,hoveringTooltipFor:null}))}_getHoveredHighlightKey(e){const{hoveringTooltipFor:r}=this.state;return typeof r=="string"?r:Object.keys(this.props.highlights).find(a=>{const i=this._highlightRenderers[a];return i&&i.isHovered(e)})}_renderTooltip(){const{hoveredHighlightKey:e}=this.state;if(e==null)return null;const r=this.props.highlights[e];return d(pa,{label:this.context.strings.removeHighlight,focusNode:r.domRange.endContainer,focusOffset:r.domRange.endOffset,offsetParent:this.props.offsetParent,onClick:()=>this.props.onRemoveHighlight(e),onMouseEnter:()=>this.setState({hoveringTooltipFor:e}),onMouseLeave:()=>this.setState({hoveringTooltipFor:null})})}render(){return q("div",{children:[Object.keys(this.props.highlights).map(e=>d(ml,{ref:r=>{r?this._highlightRenderers[e]=r:delete this._highlightRenderers[e]},highlight:this.props.highlights[e],highlightKey:e,offsetParent:this.props.offsetParent,zIndexes:this.props.zIndexes},e)),this.props.editable&&this._renderTooltip()]})}};Wa.contextType=M;let vt=Wa;vt.__docgenInfo={description:"",methods:[{name:"_updateEditListeners",docblock:`Given whether we were previously listening to mousemove events, and -whether we will now listen to mousemove events, add or remove the -listener accordingly.`,modifiers:[],params:[{name:"wasListening",optional:!1,type:{name:"boolean"}},{name:"willListen",optional:!1,type:{name:"boolean"}}],returns:null,description:`Given whether we were previously listening to mousemove events, and -whether we will now listen to mousemove events, add or remove the -listener accordingly.`},{name:"_handleMouseMove",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"MouseEvent",alias:"MouseEvent"}}],returns:null},{name:"_getHoveredHighlightKey",docblock:null,modifiers:[],params:[{name:"mouseClientPosition",optional:!1,type:{name:"signature",type:"object",raw:`{ - left: number; - top: number; -}`,signature:{properties:[{key:"left",value:{name:"number",required:!0}},{key:"top",value:{name:"number",required:!0}}]},alias:"Position"}}],returns:{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]}}},{name:"_renderTooltip",docblock:null,modifiers:[],params:[],returns:{type:{name:"union",raw:"null | React.ReactNode",elements:[{name:"null"},{name:"ReactReactNode",raw:"React.ReactNode"}]}}}],displayName:"HighlightSetRenderer",props:{editable:{required:!0,tsType:{name:"boolean"},description:""},highlights:{required:!0,tsType:{name:"signature",type:"object",raw:`{ - [key: string]: DOMHighlight; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},required:!0}}]}},description:""},offsetParent:{required:!0,tsType:{name:"Element"},description:""},onRemoveHighlight:{required:!0,tsType:{name:"signature",type:"function",raw:"(highlightKey: string) => unknown",signature:{arguments:[{type:{name:"string"},name:"highlightKey"}],return:{name:"unknown"}}},description:""},zIndexes:{required:!0,tsType:{name:"signature",type:"object",raw:`{ - belowContent: number; -}`,signature:{properties:[{key:"belowContent",value:{name:"number",required:!0}}]}},description:""}}};class gl extends k.PureComponent{constructor(){super(...arguments),this.state={mouseState:"up",trackedSelection:null},this._handleSelectionChange=()=>{this._updateTrackedSelection(),this.state.mouseState==="down"&&this.setState({mouseState:"down-and-selecting"})},this._handleMouseDown=()=>{this.setState({mouseState:"down"})},this._handleMouseUp=()=>{this.setState({mouseState:"up"})}}componentDidMount(){this._updateListeners(!1,this.props.enabled)}componentDidUpdate(e){this.props.buildHighlight!==e.buildHighlight&&this._updateTrackedSelection(),this._updateListeners(e.enabled,this.props.enabled)}componentWillUnmount(){this._updateListeners(this.props.enabled,!1)}_updateListeners(e,r){!e&&r?(window.addEventListener("mousedown",this._handleMouseDown),window.addEventListener("mouseup",this._handleMouseUp),document.addEventListener("selectionchange",this._handleSelectionChange)):e&&!r&&(window.removeEventListener("mousedown",this._handleMouseDown),window.removeEventListener("mouseup",this._handleMouseUp),document.removeEventListener("selectionchange",this._handleSelectionChange),this.setState({mouseState:"up",trackedSelection:null}))}_computeFocusAndRange(){const e=document.getSelection();if(!e||e.rangeCount===0)return null;const r=e.getRangeAt(0);if(r.collapsed)return null;const n=e.focusNode,a=e.focusOffset;return{focusNode:n,focusOffset:a,range:r}}_updateTrackedSelection(){const e=this._computeFocusAndRange();if(!e){this.setState({trackedSelection:null});return}const{focusNode:r,focusOffset:n,range:a}=e,i=this.props.buildHighlight(a);if(!i){this.setState({trackedSelection:null});return}const s={focusNode:r,focusOffset:n,proposedHighlight:i};this.setState({trackedSelection:s})}render(){const{mouseState:e,trackedSelection:r}=this.state,n=e==="down-and-selecting";return this.props.children?d("div",{children:this.props.children(r,n)}):null}}gl.__docgenInfo={description:"",methods:[{name:"_updateListeners",docblock:null,modifiers:[],params:[{name:"wasListening",optional:!1,type:{name:"boolean"}},{name:"willListen",optional:!1,type:{name:"boolean"}}],returns:null},{name:"_computeFocusAndRange",docblock:`Get the current selection focus and range, if present and non-collapsed. - -Otherwise, if there is no current selection or it's collapsed, return -null.`,modifiers:[],params:[],returns:{type:{name:"union",raw:`| { - focusNode: Node; - focusOffset: number; - range: DOMRange; +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:"",defaultValue:{value:"function () {}",computed:!1}},trackInteraction:{required:!0,tsType:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"TrackingExtraArgs"},name:"extraData"}],return:{name:"void"}}},description:""},isLastUsedWidget:{required:!0,tsType:{name:"boolean"},description:""},linterContext:{required:!1,tsType:{name:"LinterContextProps"},description:"",defaultValue:{value:"linterContextDefault",computed:!0}},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},left:{defaultValue:{value:"[]",computed:!1},required:!1},right:{defaultValue:{value:"[]",computed:!1},required:!1},labels:{defaultValue:{value:'["", ""]',computed:!1},required:!1},orderMatters:{defaultValue:{value:"false",computed:!1},required:!1},padding:{defaultValue:{value:"true",computed:!1},required:!1}}};function Di(t,e,r){const n=e.answers,a=t.answers,i=Pn(n),s=Pn(a),o=i[0]!==s[0]||i[1]!==s[1],l=Lr.number.createValidatorFunctional;let u=null,y=!1,m=!1;return g(s[0]).times(h=>{g(s[1]).times(p=>{if((a[h][p]==null||a[h][p].toString().length===0)&&(y=!0),!o){const b=l(n[h][p],{simplify:!0},r)(a[h][p]);b.message&&(u=b.message),b.correct||(m=!0)}})}),y?{type:"invalid",message:r.fillAllCells}:o?{type:"points",earned:0,total:1,message:null}:{type:"points",earned:m?0:1,total:1,message:u}}const{assert:tl}=ra,{stringArrayOfSize:Jg}=z,Zg={INPUT_MARGIN:3,INPUT_HEIGHT:30,INPUT_WIDTH:40},eh={INPUT_MARGIN:4,INPUT_HEIGHT:36,INPUT_WIDTH:64};function he(t,e){return[""+t,""+e]}const Vi=function(){return he(0,0)},nl=function(t){return tl(g.isArray(t)&&t.length===2),+t[0]},al=function(t){return tl(g.isArray(t)&&t.length===2),+t[1]},Ze=function(t){const e=nl(t),r=al(t);return"answer"+e+","+r};function Pn(t){const e=[1,1];return g(t).each((r,n)=>{let a=0;g(r).each((i,s)=>{i!=null&&i.toString().length&&(a=s+1)}),e[1]=Math.max(e[1],a),a>0&&(e[0]=Math.max(e[0],n+1))}),e}const jt=class jt extends v.Component{constructor(){super(...arguments),this.state={enterTheMatrix:0},this.getInputPaths=()=>{const e=[],r=this.props.matrixBoardSize[0],n=this.props.matrixBoardSize[1];return g(r).times(a=>{g(n).times(i=>{const s=he(a,i);e.push(s)})}),e},this.getGrammarTypeForPath=e=>"number",this._handleFocus=(e,r)=>{this.props.onFocus(he(e,r))},this._handleBlur=(e,r)=>{this.props.onBlur(he(e,r))},this.focus=()=>(this.focusInputPath(Vi()),!0),this.focusInputPath=e=>{const r=Ze(e);this.refs[r].focus()},this.blurInputPath=e=>{e.length===0&&(e=Vi());const r=Ze(e);this.refs[r].blur()},this.setInputValue=(e,r,n)=>{const a=nl(e),i=al(e);this.onValueChange(a,i,r,n)},this.handleKeyDown=(e,r,n)=>{const a=this.props.matrixBoardSize[0],i=this.props.matrixBoardSize[1];let s=null;const o=this.refs[Ze(he(e,r))],l=o.getStringValue(),u=o.getSelectionStart(),y=o.getSelectionEnd();let m=null;if(n.key==="ArrowUp"&&e>0?m=he(e-1,r):n.key==="ArrowDown"&&e+10?u===0&&y===0&&(m=he(e,r-1)):n.key==="ArrowRight"&&r+1{const i=this.props.answers.map(s=>[...s]);i[e]||(i[e]=[]),i[e][r]=n,this.props.onChange({answers:i},a),this.props.trackInteraction()}}static validate(e,r,n){return Di(e,r,n)}componentDidMount(){this.cursorPosition=[0,0]}getDOMNodeForPath(e){const r=Ze(e);return V.findDOMNode(this.refs[r])}getUserInput(){return{answers:this.props.answers}}simpleValidate(e){return Di(this.getUserInput(),e,this.context.strings)}render(){let e;this.props.apiOptions.customKeypad?e=eh:e=Zg;const{INPUT_MARGIN:r,INPUT_HEIGHT:n,INPUT_WIDTH:a}=e,i=Pn(this.props.answers),s=this.props.matrixBoardSize[0],o=this.props.matrixBoardSize[1],l=this.props.cursorPosition[0],u=this.props.cursorPosition[1],y=Math.max(l,i[0]-1),m=Math.max(u,i[1]-1),h=(y+1)*(n+2*r),p=(m+1)*(a+2*r),c=Re({"perseus-matrix":!0,"static-mode":this.props.static,"the-matrix":this.state.enterTheMatrix>=5});return f("div",{className:c,children:[this.props.prefix&&d("div",{className:"matrix-prefix",children:d($,{content:this.props.prefix,linterContext:this.props.linterContext,strings:this.context.strings})}),f("div",{className:"matrix-input",children:[d("div",{className:"matrix-bracket bracket-left",style:{height:h}}),d("div",{className:"matrix-bracket bracket-right",style:{height:h,left:p}}),g(s).times(b=>{const w=this.props.answers[b];return d("div",{className:"matrix-row",children:g(o).times(q=>{const k=b>y||q>m,T={className:k?"outside":"inside",ref:Ze(he(b,q)),value:w?w[q]:null,style:{height:n,width:a,margin:r},disabled:this.props.apiOptions.readOnly,onFocus:()=>{this.cursorPosition=[b,q],this.props.onChange({cursorPosition:[b,q]},()=>!1),this._handleFocus(b,q)},onBlur:()=>{b===this.cursorPosition[0]&&q===this.cursorPosition[1]&&this.props.onChange({cursorPosition:[0,0]},()=>!1),this._handleBlur(b,q)},onKeyDown:W=>{this.handleKeyDown(b,q,W)},onChange:(W,R)=>{this.onValueChange(b,q,W,R)}};let O;if(this.props.apiOptions.customKeypad)O=d(Pr,{...T,style:{margin:r,minWidth:a,minHeight:n,boxSizing:"border-box",backgroundColor:k?"#f3f3f3":"#fff"},scrollable:!0,keypadElement:this.props.keypadElement});else if(this.props.numericInput)O=d(ys,{...T});else{const W={...T,style:x.StyleSheet.create({input:{...T.style,display:"inline-block",padding:0,backgroundColor:k?"#f3f3f3":"#fff"}}).input};O=d(wu,{...W})}return d("span",{className:"matrix-input-field",children:O},q)})},b)})]}),this.props.suffix&&d("div",{className:"matrix-suffix",children:d($,{content:this.props.suffix,linterContext:this.props.linterContext,strings:this.context.strings})})]})}};jt.contextType=S,jt.defaultProps={matrixBoardSize:[3,3],answers:[[]],prefix:"",suffix:"",cursorPosition:[0,0],apiOptions:ye.defaults,linterContext:B};let Fn=jt;const rh=t=>{const e=g(t.matrixBoardSize[0]).times(function(){return Jg(t.matrixBoardSize[1])});return t=g.pick(t,"matrixBoardSize","prefix","suffix"),g.extend(t,{answers:e})},th=t=>{const e=g.pick(t,"matrixBoardSize","prefix","suffix");return e.answers=g.map(t.answers,r=>g.map(r,n=>n!=null?String(n):"")),e},nh={name:"matrix",displayName:"Matrix",hidden:!0,widget:Fn,transform:rh,staticTransform:th,isLintable:!0},ah={url:null,top:0,left:0},Wt=class Wt extends v.Component{constructor(){super(...arguments),this.state={}}componentDidMount(){this.setupGraphie()}componentDidUpdate(e){g.any(["box","showProtractor","showRuler","rulerLabel","rulerTicks","rulerPixels","rulerLength"],n=>e[n]!==this.props[n],this)&&this.setupGraphie()}setupGraphie(){const e=V.findDOMNode(this.refs.graphieDiv);_(e).empty();const r=this.graphie=Ve.createGraphie(e),n=[40,40],a=[[0,this.props.box[0]/n[0]],[0,this.props.box[1]/n[1]]];r.init({range:a,scale:n}),r.addMouseLayer({allowScratchpad:!0,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable}),this.protractor&&this.protractor.remove(),this.props.showProtractor&&(this.protractor=r.protractor([this.props.protractorX,this.props.protractorY])),this.ruler&&this.ruler.remove(),this.props.showRuler&&(this.ruler=r.ruler({center:[(a[0][0]+a[0][1])/2,(a[1][0]+a[1][1])/2],label:this.props.rulerLabel,pixelsPerUnit:this.props.rulerPixels,ticksPerUnit:this.props.rulerTicks,units:this.props.rulerLength}))}getUserInput(){return{}}simpleValidate(){return H(1)}render(){const e=g.extend({},ah,this.props.image);return f("div",{className:"perseus-widget perseus-widget-measurer graphie-container above-scratchpad",style:{width:this.props.box[0],height:this.props.box[1]},children:[e.url&&d("div",{style:{position:"relative",top:e.top,left:e.left},children:d(_r,{src:e.url})}),d("div",{className:"graphie",ref:"graphieDiv"})]})}};Wt.validate=H,Wt.defaultProps={box:[480,480],image:{},showProtractor:!0,protractorX:7.5,protractorY:.5,showRuler:!1,rulerLabel:"",rulerTicks:10,rulerPixels:40,rulerLength:10};let Sn=Wt;const ih={1:t=>g(t).chain().omit("imageUrl","imageTop","imageLeft").extend({image:{url:t.imageUrl,top:t.imageTop,left:t.imageLeft}}).value()},sh={name:"measurer",displayName:"Measurer",hidden:!0,widget:Sn,version:{major:1,minor:0},propUpgrades:ih};function oh(t,e){e.value!==null&&(t.fillStyle=ie.fgColor,t.font=ie.font,t.fillText(e.value,e.pos[0]-ie.fontSizePx/2+1,e.pos[1]+ie.fontSizePx/2))}function lh(t,e){let r=new Path2D;t.lineWidth=5*ie.lineWidth,t.strokeStyle=ie.fgColor,r.moveTo(e.startPos[0],e.startPos[1]),r.lineTo(e.endPos[0],e.endPos[1]),t.stroke(r),r=new Path2D,t.lineWidth=3*ie.lineWidth,t.strokeStyle=ie.bgColor,r.moveTo(e.startPos[0],e.startPos[1]),r.lineTo(e.endPos[0],e.endPos[1]),t.stroke(r)}function uh(t,e){let r=new Path2D;t.lineWidth=7*ie.lineWidth,t.strokeStyle=ie.fgColor,r.moveTo(e.startPos[0],e.startPos[1]),r.lineTo(e.endPos[0],e.endPos[1]),t.stroke(r),r=new Path2D,t.lineWidth=5*ie.lineWidth,t.strokeStyle=ie.bgColor,r.moveTo(e.startPos[0],e.startPos[1]),r.lineTo(e.endPos[0],e.endPos[1]),t.stroke(r),il(t,e)}function il(t,e){const r=new Path2D;t.lineWidth=ie.lineWidth,t.strokeStyle=ie.fgColor,r.moveTo(e.startPos[0],e.startPos[1]),r.lineTo(e.endPos[0],e.endPos[1]),t.stroke(r)}const dh={text:oh,"line:single":il,"line:double":lh,"line:triple":uh};function yh(t){return function(e){dh[e.type](t,e)}}const $i={"line:single":0,"line:double":0,"line:triple":0,text:1};function mh(t,e){return $i[t.type]-$i[e.type]}function gh(t,e){e.sort(mh).forEach(yh(t))}const ie={bgColor:"rgb(255, 255, 255)",fgColor:"rgb(0, 0, 0)",fontSizePx:12,lineWidth:1,font:"12px sans"},sl=30;function hh(t,e,r){const n=t[0],a=t[1];return[n+Math.cos(e*2*Math.PI/360)*r,a+-1*Math.sin(e*2*Math.PI/360)*r]}function ol(t,e,r,n){let a=t.symbol;if(a==="C"&&Object.keys(e).length!==1&&(a=null),t.idx==="1,0"){const p=[0,0];return t.pos=p,t.baseAngle=-30+n,{type:"text",value:a,pos:p,idx:t.idx}}const i=e[t.connections.find(function(p){return e[p].pos})],s=i.connections.indexOf(t.idx);let o=60,l=120;i.connections.length===4?(l=90,o=90):(r.find(p=>p.bondType==="triple"&&p.to===t.idx)||r.find(p=>p.bondType==="triple"&&p.to===i.idx))&&(l=0,o=0);let u=0;const y=i.idx.split(":"),m=y[y.length-1].split(",")[0];parseInt(m)%2!==0?u=i.baseAngle-(o-l*s):u=i.baseAngle+(o-l*s);const h=hh(i.pos,u,sl);return t.pos=h,t.baseAngle=u,{type:"text",value:a,pos:h,idx:t.idx}}function ph(t,e){let n=[t.pos[0],t.pos[1]],a=[e.pos[0],e.pos[1]];return t.symbol!=="C"&&(n=[e.pos[0]-(1-.25)*(e.pos[0]-t.pos[0]),e.pos[1]-(1-.25)*(e.pos[1]-t.pos[1])]),e.symbol!=="C"&&(a=[t.pos[0]-(1-.25)*(t.pos[0]-e.pos[0]),t.pos[1]-(1-.25)*(t.pos[1]-e.pos[1])]),[n,a]}function ll(t,e){const r=e[t.from],n=e[t.to],a=ph(r,n);return{type:"line:"+t.bondType,startPos:a[0],endPos:a[1]}}function Hi(t){return t.join(":")}function ha(t,e,r){if(r===null)return[t,e];if(r.type==="atom"){const n=Hi(r.idx);t[n]={idx:n,symbol:r.symbol,connections:[]},r.bonds&&r.bonds.forEach(function(a){const i=Hi(a.to.idx);t[n].connections.push(i),e.push({from:n,to:i,bondType:a.bondType}),ha(t,e,a.to),t[i].connections.push(n)})}return[t,e]}function ul(t,e,r,n,a){if(e.length===0)return t;const i=e.shift(),s=r[i];return s.connections.forEach(function(o){r[o].pos||e.push(o)}),ul(t.concat(ol(s,r,n,a)),e,r,n,a)}function dl(t,e,r){return r.length===0?t:dl(t.concat(ll(r[0],e)),e,r.slice(1))}function ch(t,e){const r=ha({},[],t),n=r[0],a=r[1],i=ul([],["1,0"],n,a,e);return dl(i,n,a)}const bh={layout:ch,_atomLayout:ol,_bondLayout:ll,_bondLength:sl,_convertTree:ha},vh=new RegExp("^[A-Za-z\\[\\]()=#+-]*$"),yl=new RegExp("^(Cl|Br|[CONPSFBI]|\\[)");function mr(t){this.message=t}function gr(t,e,r){const n=e[0],a=e.slice(1);let i;Array.isArray(t)?i=[...t]:i={...t||{}};let s=r;return a.length>0&&(s=gr(i[n],a,r)),i[n]=s,i}function fh(t,e){const r=e.reduce(function(n,a){return n[a]},t);return gr(t,e,r+1)}function wh(t){return vh.test(t)}function kh(t,e){const r=t[0],n=t.slice(1);if(r==="=")return hr(n,gr(e,["bond","bondType"],"double"));if(r==="#")return hr(n,gr(e,["bond","bondType"],"triple"));throw new mr("Invalid character: "+r)}function et(t,e){if(e.length===0)return t;if(t==="")throw new mr("Mismatched parentheses");const r=t[0],n=t.slice(1);return r==="("?et(n,e.concat(r)):r===")"?et(n,e.slice(1)):et(n,e)}function qh(t,e){const r=t[0],n=t.slice(1);if(r==="("){let a={...e,parens:e.parens+"("};a=fh(e,["idx",e.idx.length-1,1]);let i=-1;e.idx[e.idx.length-1][0]%2===0&&(i=0);const s={...a,idx:a.idx.concat([[i,0]]),parens:a.parens.concat("(")},o=hr(n,s),l=hr(et(n,["("]),a);return[o].concat(l)}if(r===")"){if(e.parens[e.parens.length-1]!=="(")throw new mr("Mismatched parentheses");return null}throw new mr("Invalid bare character: "+r)}function Th(t,e){let r=null,n=null;if(t[0]==="["){const a=t.indexOf("]");if(a===-1)return["",t];r=t.slice(1,a),n=t.slice(a+1)}else r=yl.exec(t)[1],n=t.slice(r.length);return[r,n]}function Ah(t,e){const r=Th(t),n=r[0];if(n==="")return["error","Unable to parse bracketed atom."];const a=r[1],i=gr(e,["idx",e.idx.length-1],[1+e.idx[e.idx.length-1][0],0]);let s=hr(a,gr(i,["bond","bondType"],"single"));!Array.isArray(s)&&s&&(s=[s]);const o={type:"atom",symbol:n,bonds:s,idx:i.idx};return e.bond?{type:"bond",bondType:e.bond.bondType,to:o}:o}function Rh(t){return yl.test(t)}function Oh(t){return t==="="||t==="#"}function hr(t,e){if(!wh(t))throw new mr("Invalid input.");return!t||t.length===0?null:Rh(t)?Ah(t,e||{idx:[[0,0]],parens:[],stack:[],bondModifiers:[]}):Oh(t[0])?kh(t,e):qh(t,e)}const ml={parse:hr,ParseError:mr},{layout:xh}=bh,jh=ml.parse,Wh=ml.ParseError,Xr=30,Oa=class Oa extends v.Component{constructor(){super(...arguments),this.state={parsedSmiles:null,error:null},this.stateFromSmiles=e=>{try{this.setState({parsedSmiles:jh(e),error:null})}catch(r){if(r instanceof Wh)this.setState({error:r.message});else throw r}},this.setCanvasBounds=(e,r)=>{const n=Math.max(...r.map(u=>u.pos?u.pos[0]:-1/0)),a=Math.max(...r.map(u=>u.pos?u.pos[1]:-1/0)),i=Math.min(...r.map(u=>u.pos?u.pos[0]:1/0)),s=Math.min(...r.map(u=>u.pos?u.pos[1]:1/0)),o=n-i+2*Xr,l=a-s+2*Xr;return e.width=o,e.height=l,[Xr-i,Xr-s]},this.canvasRender=()=>{if(this.state.error||!this.state.parsedSmiles)return;const e=xh(this.state.parsedSmiles,this.props.rotationAngle),r=this.refs.canvas,n=this.setCanvasBounds(r,e),a=r.getContext("2d");a.clearRect(0,0,r.width,r.height),a.save(),a.translate(n[0],n[1]),gh(a,e),a.restore()}}UNSAFE_componentWillMount(){this.stateFromSmiles(this.props.smiles)}componentDidMount(){this.canvasRender()}UNSAFE_componentWillReceiveProps(e){this.stateFromSmiles(e.smiles)}componentDidUpdate(){this.canvasRender()}render(){let e=d("canvas",{className:"molecule-canvas",id:this.props.widgetId+"-molecule",ref:"canvas",children:this.context.strings.molecularDrawing({content:this.props.smiles||""})});return this.state.error&&(e=d("div",{className:"error",children:this.state.error})),d("div",{className:"molecule-canvas",children:e})}};Oa.contextType=S;let pt=Oa;const xa=class xa extends v.Component{simpleValidate(){return H()}getUserInput(){return[]}validate(){return H()}render(){return d(pt,{widgetId:this.props.widgetId,smiles:this.props.smiles,rotationAngle:this.props.rotationAngle})}};xa.defaultProps={rotationAngle:0};let Mn=xa;const Ch={name:"molecule-renderer",displayName:"Molecule renderer",hidden:!0,widget:Mn};pt.__docgenInfo={description:"",methods:[{name:"stateFromSmiles",docblock:null,modifiers:[],params:[{name:"smiles",optional:!1,type:null}],returns:null},{name:"setCanvasBounds",docblock:null,modifiers:[],params:[{name:"canvas",optional:!1,type:null},{name:"items",optional:!1,type:null}],returns:null},{name:"canvasRender",docblock:null,modifiers:[],params:[],returns:null}],displayName:"Molecule",props:{widgetId:{required:!0,tsType:{name:"string",raw:'PerseusMoleculeRendererWidgetOptions["widgetId"]'},description:""},smiles:{required:!0,tsType:{name:"string",raw:'PerseusMoleculeRendererWidgetOptions["smiles"]'},description:""},rotationAngle:{required:!0,tsType:{name:"number",raw:'PerseusMoleculeRendererWidgetOptions["rotationAngle"]'},description:""}}};function Gi(t,e){const r=e.range,n=t.divisionRange,a=e.initialX!=null?e.initialX:r[0],i=e.isInequality?"ge":"eq",s=e.correctRel||"eq",o=Xn(t.numLinePosition,e.correctX||0),l=t.numDivisions>n[1]||t.numDivisionsMath.min(Math.max(t,e),r),Lh="–",Xt=30,_h={ge:"le",gt:"lt",le:"ge",lt:"gt"},Ph={ge:"gt",gt:"ge",le:"lt",lt:"le"};function ct(t,e){return e===1?""+t:`\\dfrac{${t}}{${e}}`}function gl(t,e){if(t<0)return"-"+gl(-t,e);const r=Math.floor(t/e);return r===0?ct(t,e):t-r*e===0?""+r:r+ct(t-r*e,e)}function Fh(t,e,r){const n=Math.floor(r/e);return ct(t*n,r)}const Yt=(t,e,r,n,a)=>{if(n=n||r,e==="decimal"||e==="decimal ticks")return t.label([r,-.53],Math.round(n*100)/100,"center");if(e==="improper"){const i=De.toFraction(n);return t.label([r,-.17],ct(i[0],i[1]),"below")}if(e==="mixed"){const i=De.toFraction(n);return t.label([r,-.17],gl(i[0],i[1]),"below")}if(e==="non-reduced"){const i=De.toFraction(n);return t.label([r,-.17],Fh(i[0],i[1],a),"below")}},Sh=K.createSimpleClass((t,e)=>{if(!g.isFinite(e.tickStep)||e.tickStep<=0)return[];const r=[],n=e.range,a=e.labelRange,i=a[0]==null?n[0]:a[0],s=a[1]==null?n[1]:a[1];let o;if(e.labelStyle==="non-reduced"){const l=[i,s];for(let m=0;m<=e.numDivisions;m++){const h=n[0]+m*e.tickStep;l.push(h)}const u=m=>ql(m)[1],y=g.map(l,u);o=g.reduce(y,(m,h)=>De.getLCM(m,h))}else o=void 0;for(let l=0;l<=e.numDivisions;l++){const u=n[0]+l*e.tickStep;r.push(t.line([u,-.2],[u,.2])),(e.labelTicks||e.labelStyle==="decimal ticks")&&r.push(Yt(t,e.labelStyle,u,u,o))}return r.push(t.style(e.isMobile?{color:j.BLUE}:{},()=>Yt(t,e.labelStyle,i,i,o))),r.push(t.style(e.isMobile?{color:j.BLUE}:{},()=>Yt(t,e.labelStyle,s,s,o))),t.style({stroke:j.BLUE,strokeWidth:3.5},()=>{r.push(t.line([i,-.2],[i,.2])),r.push(t.line([s,-.2],[s,.2]))}),r}),Ct=class Ct extends v.Component{constructor(){super(...arguments),this.state={numDivisionsEmpty:!1},this.change=(...e)=>re.apply(this,e),this.isValid=()=>{const e=this.props.range;let r=this.props.numLinePosition;const n=this.props.divisionRange;return r=r??e[0],e[0]=0&&Na(r-e[1])<=0&&n[0]{const n=this.props.divisionRange.slice(),a=this.props.range[1]-this.props.range[0];if(e=Math.round(e),e=e<0?e*-1:e,e){const i=g.extend({},this.props,{tickStep:a/e}),s=this.snapNumLinePosition(i,this.props.numLinePosition);this.setState({numDivisionsEmpty:!1},()=>{this.props.onChange({divisionRange:n,numDivisions:e,numLinePosition:s},r)})}else this.setState({numDivisionsEmpty:!0},r)},this._handleTickCtrlFocus=()=>{this.props.onFocus(["tick-ctrl"])},this._handleTickCtrlBlur=()=>{this.props.onBlur(["tick-ctrl"])},this.focusInputPath=e=>{e.length===1&&this.refs[e[0]].focus()},this.blurInputPath=e=>{e.length===1&&this.refs[e[0]].blur()},this.getInputPaths=()=>this.props.isTickCtrl?[["tick-ctrl"]]:[],this.setInputValue=(e,r,n)=>{e.length===1&&e[0]==="tick-ctrl"&&this.onNumDivisionsChange(r,n)},this._renderGraphie=()=>{const e=this.props.range,r=e[1]-e[0],n=g.pick(this.props,["range","isTickCtrl"]),a=g.extend({},this.props,{tickStep:r/this.props.numDivisions});return f(K,{ref:"graphie",box:[this.props.apiOptions.isMobile?288:460,80],options:n,onMouseDown:i=>{this.refs.graphie.movables.numberLinePoint.grab(i)},setup:this._setupGraphie,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable,isMobile:this.props.apiOptions.isMobile,children:[d(Sh,{...g.pick(a,["range","numDivisions","labelTicks","labelStyle","labelRange","tickStep"]),isMobile:this.props.apiOptions.isMobile}),this._renderInequality(a),this._renderNumberLinePoint(a)]},this.props.labelStyle)},this.snapNumLinePosition=(e,r)=>{const n=e.range[0],a=e.range[1],i=e.tickStep/e.snapDivisions;let s=zh(r,n,a);return s=n+Tl(s-n,i),Eh(g.isFinite(s)),s},this.movePosition=e=>{this.change({numLinePosition:e}),this.props.trackInteraction()},this._renderNumberLinePoint=e=>{const r=g(["lt","gt"]).contains(e.rel);let n;r?n=j._BACKGROUND:e.static?n=j.BLUE:n=j.GREEN;const a={fill:n,stroke:e.static?j.BLUE:j.GREEN,"stroke-width":r?3:1},i={fill:r?j._BACKGROUND:j.GREEN,"stroke-width":r?3:1},s=e.isInequality?{stroke:j.GREEN,"fill-opacity":r?0:1}:{};return d(Ih,{ref:"numberLinePoint",pointSize:6,coord:[e.numLinePosition,0],constraints:[(o,l)=>[o[0],l[1]],(o,l)=>[this.snapNumLinePosition(e,o[0]),o[1]]],normalStyle:a,highlightStyle:i,onMove:o=>{this.movePosition(o[0])},isMobile:this.props.apiOptions.isMobile,mobileStyleOverride:s,showTooltips:this.props.showTooltips,xOnlyTooltip:!0})},this.handleReverse=()=>{const e=_h[this.props.rel];this.props.onChange({rel:e})},this.handleToggleStrict=()=>{const e=Ph[this.props.rel];this.props.onChange({rel:e})},this._getInequalityEndpoint=e=>{const r=g(["ge","gt"]).contains(e.rel),n=400,a=e.range,i=(a[1]-a[0])/n,s=Xt*i,o=a[0]-s,l=a[1]+s;return r?[l,0]:[o,0]},this._renderInequality=e=>{if(e.isInequality){const r=this._getInequalityEndpoint(e),n={arrows:"->",stroke:this.props.apiOptions.isMobile?j.GREEN:j.BLUE,strokeWidth:3.5},a=["ge","gt"].includes(e.rel);return d(Nh,{start:[(a?.4:-.4)+e.numLinePosition,0],end:r,style:n})}return null},this._setupGraphie=(e,r)=>{if(!this.isValid())return;const n=this.props.apiOptions.isMobile?288-Xt*2:400,a=r.range,i=(a[1]-a[0])/n,s=Xt*i,o=a[0]-s,l=a[1]+s,y=this.props.labelStyle==="improper"||this.props.labelStyle==="mixed"||this.props.labelStyle==="non-reduced"?-1.5:-1;e.init({range:[[o,l],[y,1]],scale:[1/i,40],isMobile:this.props.apiOptions.isMobile});const h=(a[0]+a[1])/2;e.line([h,0],[l,0],{arrows:"->"}),e.line([h,0],[o,0],{arrows:"->"})}}static validate(e,r){return Gi(e,r)}focus(){return this.props.isTickCtrl?(this.refs["tick-ctrl"].focus(),!0):!1}getDOMNodeForPath(e){return(e==null?void 0:e.length)===1?V.findDOMNode(this.refs[e[0]]):null}getGrammarTypeForPath(e){if((e==null?void 0:e.length)===1&&e[0]==="tick-ctrl")return"number"}getUserInput(){return{numLinePosition:this.props.numLinePosition,rel:this.props.isInequality?this.props.rel:"eq",numDivisions:this.props.numDivisions,divisionRange:this.props.divisionRange}}simpleValidate(e){return Gi(this.getUserInput(),e)}render(){const{strings:e}=this.context,r=this.props.divisionRange,n=r[0]+Lh+r[1],a=this.props.numDivisionsr[1],i=f("div",{children:[d("input",{type:"button",className:"simple-button",value:e.switchDirection,onClick:this.handleReverse}),d("input",{type:"button",className:"simple-button",value:g(["le","ge"]).contains(this.props.rel)?e.circleOpen:e.circleFilled,onClick:this.handleToggleStrict})]});let s;if(this.props.isTickCtrl){let o;this.props.apiOptions.customKeypad?o=Pr:o=ys,s=f("label",{children:[e.numDivisions," ",d(o,{ref:"tick-ctrl",value:this.state.numDivisionsEmpty?null:this.props.numDivisions||r[0],checkValidity:l=>l>=r[0]&&l<=r[1],onChange:this.onNumDivisionsChange,onFocus:this._handleTickCtrlFocus,onBlur:this._handleTickCtrlBlur,useArrowKeys:!0,keypadElement:this.props.keypadElement})]})}return f("div",{className:"perseus-widget perseus-widget-interactive-number-line",children:[s,this.isValid()?this.props.isTickCtrl&&a?d("div",{className:"perseus-error",children:e.divisions({divRangeString:n})}):this._renderGraphie():d("div",{className:"perseus-error",children:"Invalid number line configuration."}),!this.props.static&&this.props.isInequality&&i]})}};Ct.contextType=S,Ct.defaultProps={range:[0,10],labelStyle:"decimal",labelRange:[null,null],divisionRange:[1,12],labelTicks:!0,isTickCtrl:!1,isInequality:!1,numLinePosition:0,snapDivisions:2,showTooltips:!1,rel:"ge",apiOptions:ye.defaults};let Un=Ct;const Mh=t=>{const e=g.pick(t,["range","labelRange","labelStyle","labelTicks","divisionRange","snapDivisions","isTickCtrl","isInequality","showTooltips"]),r=t.initialX!=null?t.initialX:t.range[0],n=t.range[1]-t.range[0];let a;return t.numDivisions!=null?a=t.numDivisions:t.tickStep!=null?a=n/t.tickStep:a=void 0,g.extend(e,{numLinePosition:r,numDivisions:a,snapDivisions:e.snapDivisions||void 0}),e},Uh=t=>{const e=g.pick(t,["range","labelRange","labelStyle","labelTicks","divisionRange","snapDivisions","isInequality"]),r=t.correctX!=null?t.correctX:t.range[0],n=t.range[1]-t.range[0];let a;return t.numDivisions!=null?a=t.numDivisions:t.tickStep!=null?a=n/t.tickStep:a=void 0,g.extend(e,{numLinePosition:r,numDivisions:a,rel:t.isInequality?t.correctRel:null,snapDivisions:e.snapDivisions||void 0}),e},Dh={name:"number-line",displayName:"Number line",widget:Un,transform:Mh,staticTransform:Uh};function Bi(t,e){return t.current.length===0?{type:"invalid",message:null}:{type:"points",earned:g.isEqual(t.current,g.pluck(e.correctOptions,"content"))?1:0,total:1,message:null}}class Vh extends v.Component{render(){return d("div",{className:"card-wrap "+ze.INTERACTIVE,style:{width:this.props.width},children:d("div",{className:"card placeholder",style:{height:this.props.width}})})}}class $h extends v.Component{render(){return d("div",{className:"card-wrap "+ze.INTERACTIVE,children:d("div",{className:"card drag-hint"})})}}const It=class It extends v.Component{constructor(){super(...arguments),this.state={dragging:!1},this.bindMouseMoveUp=()=>{this.mouseMoveUpBound=!0,_(document).on("mousemove",this.onMouseMove),_(document).on("mouseup",this.onMouseUp)},this.unbindMouseMoveUp=()=>{this.mouseMoveUpBound=!1,_(document).off("mousemove",this.onMouseMove),_(document).off("mouseup",this.onMouseUp)},this.onMouseDown=e=>{e.preventDefault();const r=z.extractPointerLocation(e);r&&(this.setState({dragging:!0}),this.bindMouseMoveUp(),this.props.onMouseDown&&this.props.onMouseDown(r,this))},this.onMouseMove=e=>{if(!this.state.dragging)return;e.preventDefault();const r=z.extractPointerLocation(e);r&&this.props.onMouseMove&&this.props.onMouseMove(r)},this.onMouseUp=e=>{e.preventDefault();const r=z.extractPointerLocation(e);r&&(this.setState({dragging:!1}),this.unbindMouseMoveUp(),this.props.onMouseUp&&this.props.onMouseUp(r))}}componentDidMount(){this.mouseMoveUpBound=!1,document.addEventListener("touchmove",this.onMouseMove,z.supportsPassiveEvents()?{passive:!1}:!1)}shouldComponentUpdate(e,r){return this.props.floating||e.floating||this.props.content!==e.content||this.props.fakeRef!==e.fakeRef}componentDidUpdate(e,r){if(this.props.animating&&!e.animating&&this.props.animateTo&&this.props.startOffset){const n=15*Math.sqrt(Math.sqrt(Math.pow(this.props.animateTo.left-this.props.startOffset.left,2)+Math.pow(this.props.animateTo.top-this.props.startOffset.top,2)));_(V.findDOMNode(this)).animate(this.props.animateTo,Math.max(n,1),this.props.onAnimationEnd)}}componentWillUnmount(){this.mouseMoveUpBound&&(Zn.error("Removing an element with bound event handlers.",Te.Internal),this.unbindMouseMoveUp(),z.resetTouchHandlers()),document.removeEventListener("touchmove",this.onMouseMove)}render(){var i,s;let e={};this.props.floating&&(e={position:"absolute",left:(i=this.props.startOffset)==null?void 0:i.left,top:(s=this.props.startOffset)==null?void 0:s.top}),this.props.width&&(e.width=this.props.width);const r=["card"];this.props.stack&&r.push("stack"),this.props.floating&&!this.props.animating&&this.props.mouse&&this.props.startMouse&&(r.push("dragging"),e.left+=this.props.mouse.left-this.props.startMouse.left,e.top+=this.props.mouse.top-this.props.startMouse.top);const n=g.pick(this.props,"content"),a=this.props.animating?_.noop:this.onMouseDown;return d("div",{className:"card-wrap "+ze.INTERACTIVE,style:e,onMouseDown:a,onTouchStart:a,onTouchEnd:this.onMouseUp,onTouchCancel:this.onMouseUp,children:d("div",{className:r.join(" "),children:d($,{...n,linterContext:this.props.linterContext,strings:this.context.strings})})})}};It.contextType=S,It.defaultProps={stack:!1,animating:!1,linterContext:B};let rr=It;const Hh="normal",Qt="horizontal",ja=class ja extends v.Component{constructor(){super(...arguments),this.state={current:[],dragging:!1,placeholderIndex:null,dragKey:null,animating:!1,dragContent:null,dragWidth:null,dragHeight:null,offsetPos:null,animateTo:null,grabPos:null},this.onClick=(e,r,n,a)=>{const i=_(V.findDOMNode(a)),s=this.state.current.slice();let o,l=null;e==="current"?(s.splice(r,1),o=this.state.current[r],l=r):e==="bank"&&(o=this.props.options[r]),this.setState({current:s,dragging:!0,placeholderIndex:l,dragKey:o.key,dragContent:o.content,dragWidth:i.width(),dragHeight:i.height(),grabPos:n,mousePos:n,offsetPos:i.position()})},this.onRelease=e=>{const r=this.refs.dragging;if(r==null)return;const n=this.isCardInBank(r),a=this.state.placeholderIndex||0,i=()=>{const l=this.state.current.slice();if(!n){const u={content:this.state.dragContent,key:g.uniqueId("perseus_draggable_card_"),width:this.state.dragWidth};l.splice(a,0,u)}this.props.onChange({current:l}),this.setState({current:l,dragging:!1,placeholderIndex:null,animating:!1}),this.props.trackInteraction()},s=_(V.findDOMNode(r)).position();let o=null;n?g.each(this.props.options,function(l,u){if(l.content===this.state.dragContent){const y=V.findDOMNode(this.refs["bank"+u]);o=_(y).position()}},this):this.refs.placeholder!=null&&(o=_(V.findDOMNode(this.refs.placeholder)).position()),o==null?i():this.setState({offsetPos:s,animateTo:o,onAnimationEnd:i,animating:!0,dragging:!1})},this.onMouseMove=e=>{const r=this.refs.dragging;if(r==null)return;let n;this.isCardInBank(r)?n=null:n=this.findCorrectIndex(r,this.state.current),this.setState({mousePos:e,placeholderIndex:n})},this.findCorrectIndex=(e,r)=>{const n=this.props.layout===Qt,a=_(V.findDOMNode(this.refs.dragList)),i=a.offset().left,s=a.offset().top,o=_(V.findDOMNode(e)).offset().left-i,l=_(V.findDOMNode(e)).offset().top-s;let u=0,y=0,m=0;return n?g.each(r,function(h,p){const c=V.findDOMNode(this.refs["sortable"+p]),b=_(c).outerWidth(!0);o>y+b/2&&(u+=1),y+=b},this):g.each(r,function(h,p){const c=V.findDOMNode(this.refs["sortable"+p]),b=_(c).outerHeight(!0);l>m+b/2&&(u+=1),m+=b},this),u},this.isCardInBank=e=>{if(e==null)return!1;const r=this.props.layout===Qt,n=_(V.findDOMNode(e)),a=_(V.findDOMNode(this.refs.bank)),i=n.offset(),s=a.offset(),o=n.outerHeight(!0),l=a.outerHeight(!0),u=a.outerWidth(!0),y=V.findDOMNode(this.refs.dragList);_(y).width();const m=n.outerWidth(!0);return r?i.top+o/2{const r=e.map(n=>({content:n}));this.props.onChange({current:r}),this.setState({current:r})}}static validate(e,r){return Bi(e,r)}UNSAFE_componentWillReceiveProps(e){g.isEqual(this.props.current,e.current)||this.setState({current:e.current})}getUserInput(){return{current:g.map(this.props.current,function(e){return e.content})}}simpleValidate(e){return Bi(this.getUserInput(),e)}render(){const e=this.state.dragging&&d(rr,{ref:"dragging",floating:!0,content:this.state.dragContent,startOffset:this.state.offsetPos,startMouse:this.state.grabPos,mouse:this.state.mousePos,width:this.state.dragWidth,onMouseUp:this.onRelease,onMouseMove:this.onMouseMove,linterContext:this.props.linterContext},this.state.dragKey||"draggingCard"),r=this.state.animating&&d(rr,{floating:!0,animating:!0,content:this.state.dragContent,startOffset:this.state.offsetPos,width:this.state.dragWidth,animateTo:this.state.animateTo,onAnimationEnd:this.state.onAnimationEnd,linterContext:this.props.linterContext},this.state.dragKey||"draggingCard"),n=g.map(this.state.current,function(o,l){return d(rr,{ref:"sortable"+l,fakeRef:"sortable"+l,floating:!1,content:o.content,width:o.width,linterContext:this.props.linterContext,onMouseDown:this.state.animating?_.noop:this.onClick.bind(null,"current",l)},`sortableCard${l}`)},this);if(this.state.placeholderIndex!=null){const o=d(Vh,{ref:"placeholder",width:this.state.dragWidth,height:this.state.dragHeight},"placeholder");n.splice(this.state.placeholderIndex,0,o)}const a=n.length>0;n.push(e,r);const i=f("div",{className:"perseus-clearfix draggable-box",children:[!a&&d($h,{}),d("div",{ref:"dragList",children:n})]}),s=d("div",{ref:"bank",className:"bank perseus-clearfix",children:g.map(this.props.options,(o,l)=>d(rr,{ref:"bank"+l,floating:!1,content:o.content,stack:!0,linterContext:this.props.linterContext,onMouseDown:this.state.animating?_.noop:this.onClick.bind(null,"bank",l),onMouseMove:this.onMouseMove,onMouseUp:this.onRelease},l),this)});return f("div",{className:"draggy-boxy-thing orderer height-"+this.props.height+" layout-"+this.props.layout+" above-scratchpad blank-background perseus-clearfix "+ze.INTERACTIVE,ref:"orderer",children:[s,i]})}};ja.defaultProps={current:[],options:[],correctOptions:[],height:Hh,layout:Qt,linterContext:B};let Dn=ja;const Gh={name:"orderer",displayName:"Orderer",hidden:!0,widget:Dn,isLintable:!0},Nt=class Nt extends v.Component{constructor(){super(...arguments),this.change=(...e)=>re.apply(this,e)}static validate(){return H()}getUserInput(){return null}simpleValidate(){return H()}render(){return d($,{content:this.props.content,apiOptions:this.props.apiOptions,linterContext:this.props.linterContext,strings:this.context.strings})}};Nt.contextType=S,Nt.defaultProps={content:"",linterContext:B};let Vn=Nt;const Bh={name:"passage-ref-target",displayName:"PassageRefTarget",defaultAlignment:"inline",widget:Vn,hidden:!0,transform:t=>g.pick(t,"content"),version:{major:0,minor:0},isLintable:!0},{deepEq:Ki}=z;function Xi(t,e){return Ki(t,e.starting)?{type:"invalid",message:null}:{type:"points",earned:Ki(t,e.correct)?1:0,total:1,message:null}}const Et=class Et extends v.Component{constructor(){super(...arguments),this._isMounted=!1,this.state={values:this.props.starting||[1],categoryHeights:{}},this.DOT_PLOT_POINT_SIZE=()=>this.props.apiOptions.isMobile?6:4,this.DOT_PLOT_POINT_PADDING=()=>8,this.DOT_TICK_POINT_SIZE=()=>2,this.setupGraphie=e=>{const r=this;r.shouldSetupGraphie=!1;const n=V.findDOMNode(r.refs.graphieDiv);_(n).empty();const a=Ve.createGraphie(n);r.graphie=a,r.graphie.pics=[],r.graphie.dotTicks=[];const i=r.props.type==="bar",s=r.props.type==="line",o=r.props.type==="pic",l=r.props.type==="histogram",u=r.props.type==="dotplot",y=o||u,m={},h=m,p=this.props.apiOptions.isMobile;h.graph={lines:[],bars:[],points:[],dividers:[]},h.scaleY=r.props.scaleY,h.dimX=r.props.categories.length;const c=p?[288,336]:r.props.plotDimensions;if(s)h.dimX+=p?-.2:1;else if(l)h.barPad=0,h.barWidth=1;else if(i)h.barPad=p?.08:.15,h.barWidth=1-2*h.barPad,h.dimX+=(p?-2:2)*h.barPad;else if(y){h.picBoxHeight=r.props.picBoxHeight,h.picBoxWidthPx=c[0]/r.props.categories.length;const k=c[0]-h.dimX*h.picBoxWidthPx;h.picPad=k/(2*h.dimX+2);const T=h.picBoxWidthPx+2*h.picPad;h.picPad=h.picPad/T,h.picBoxWidth=h.picBoxWidthPx/T,h.dimX+=2*h.picPad}u&&(h.picBoxHeight=this.DOT_PLOT_POINT_SIZE()*2+this.DOT_PLOT_POINT_PADDING()),h.dimY=Math.ceil(r.props.maxY/h.scaleY)*h.scaleY;let b=25;(i||s)&&p&&(b=r.props.labels[1].length!==0?17:11),u&&(b/=2),p&&y&&r.props.labels[1].length===0&&(b=0);let w=25,q=25*3;if(p&&(i||y)){const k=Math.max(0,...Object.values(r.state.categoryHeights));if(k){let T=25;y&&(T+=10),q=T+k}}if(p?h.scale=[(c[0]-b*4)/h.dimX,(c[1]-(w+q))/h.dimY]:h.scale=g.map([h.dimX,h.dimY],function(k,T){return c[T]/k}),y&&(h.scale[1]=h.picBoxHeight/h.scaleY),b/=h.scale[0],w/=h.scale[1],q/=h.scale[1],a.init({range:[[-3*b,h.dimX+b],[-q,h.dimY+w]],scale:h.scale,isMobile:this.props.apiOptions.isMobile}),a.addMouseLayer({allowScratchpad:!0,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable}),!y){const k=p?h.scaleY:0;for(let T=k;T<=h.dimY;T+=h.scaleY)a.label([0,T],De.roundToApprox(T,2),"left",!0),a.style({stroke:p?"#e9ebec":"#000",strokeWidth:1,opacity:p?1:.3},function(){a.line([0,T],[h.dimX,T])})}(i||s)&&p&&!this.props.static&&(r.graphie.dragPrompt=a.label([h.dimX/2,h.dimY/2],this.context.strings.dragHandles,"center",!1).css("font-weight","bold").css("color",j.KA_GREEN).css("display","none")),r.setupCategories(m),y&&p&&(r.graphie.dotPrompt=a.label([h.dimX/2,h.dimY/2],this.context.strings.tapAddPoints,"center",!1).css("font-weight","bold").css("color",j.KA_GREEN).css("display","none")),y&&r.drawPicHeights(r.state.values,e.values),a.style({stroke:"#000",strokeWidth:2,opacity:1},function(){y?u?a.style({stroke:p?j.GRAY_G:"#000",strokeWidth:p?1:2},()=>a.line([p?0:.5,0],[h.dimX-(p?0:.5),0])):(a.line([0,0],[h.dimX,0]),(r.props.labels[1].length!==0||!p)&&a.style({stroke:p?j.GRAY_G:"#000",strokeWidth:p?1:2},()=>a.line([0,0],[0,h.dimY]))):(a.style({stroke:p?j.GRAY_G:"#000",strokeWidth:p?1:2},()=>a.line([p?-b*3:0,0],[h.dimX+(p?b:0),0])),(i||s)&&p||a.style({stroke:p?j.GRAY_G:"#000",strokeWidth:p?1:2},()=>a.line([0,0],[0,h.dimY])))}),a.label([h.dimX/2,p?-q:-35/h.scale[1]],r.props.labels[0],p?"above":"below",!1).css("font-weight","bold").css("color",p&&j.GRAY_F),a.label([(p?-35:-60)/h.scale[0],h.dimY/2],r.props.labels[1],"center",!1).css("font-weight","bold").css("color",p&&j.GRAY_F).addClass("rotate"),this.props.apiOptions.isMobile&&(this.horizHairline=new Cr(this.graphie,[0,0],[0,0],{normalStyle:{strokeWidth:1}}),this.horizHairline.attr({stroke:j.INTERACTIVE}),this.horizHairline.hide(),this.hairlineRange=[[0,h.dimX],[0,h.dimY]])},this.showHairlines=e=>{this.props.apiOptions.isMobile&&(this.horizHairline.moveTo([this.hairlineRange[0][0],e[1]],[this.hairlineRange[0][1],e[1]]),this.horizHairline.show())},this.hideHairlines=()=>{this.props.apiOptions.isMobile&&this.horizHairline.hide()},this.labelCategory=(e,r)=>{const n=this.props.apiOptions.isMobile,a=this.graphie;r=r+"";let i=!1;const s=r.match(/^\$(.*)\$$/);s&&(r=s[1],i=!0);const o=5,l=45,u=l*(Math.PI/180),y=`translateX(-50%) translateX(${o}px) translateY(-50%) rotate(-${l}deg)`,m=n&&!s;return new Promise(h=>{a.style({color:n?j.GRAY_G:"inherit",transform:m?y:"none",transformOrigin:"100%"},()=>{const p=a.label([e,n?-.5:0],r,"below",i),c=14+(m?Math.round(p.height()*Math.cos(u)+(p.width()+o)*Math.sin(u)):p.height());h({category:r,height:c})})})},this.setupCategories=e=>{const r=this,n=e,a=r.graphie,i=this.props.apiOptions.isMobile,s=[];r.props.type==="histogram"?(g.times(r.props.categories.length-1,function(o){r.setupBar({index:o,startHeight:r.state.values[o],config:e,isHistogram:!0})}),g.each(r.props.categories,function(o,l){const u=.5+l*n.barWidth;s.push(r.labelCategory(u,o));const y=6/n.scale[1];a.style({stroke:"#000",strokeWidth:i?1:2,opacity:1},function(){a.line([u,-y],[u,0])})})):g.each(r.props.categories,function(o,l){const u=r.state.values[l];let y;r.props.type==="bar"?y=r.setupBar({index:l,startHeight:u,config:e,isHistogram:!1}):r.props.type==="line"?y=r.setupLine(l,u,e):r.props.type==="pic"?y=r.setupPic(l,e):r.props.type==="dotplot"&&(y=r.setupDotplot(l,e));let m=0,h=-6/n.scale[1];r.props.type==="dotplot"&&!i&&(m=-h),r.props.type==="dotplot"?(l%r.props.labelInterval===0||l===r.props.categories.length-1)&&(s.push(r.labelCategory(y,o)),m*=1.5,h*=1.5):s.push(r.labelCategory(y,o)),a.style({stroke:i?j.GRAY_G:"#000",strokeWidth:i?1:2,opacity:1},function(){a.line([y,m],[y,h])})}),Promise.all(s).then(o=>{if(r._isMounted){const l={};o.forEach(({category:u,height:y})=>l[u]=y),r.setState({categoryHeights:l})}})},this._clampValue=(e,r,n)=>Math.max(Math.min(e,n),r),this._maybeShowDragPrompt=()=>{this.graphie.dragPrompt!=null&&(this.graphie.dragPrompt[0].style.display="inline")},this._maybeHideDragPrompt=()=>{this.graphie.dragPrompt!=null&&(this.graphie.dragPrompt[0].style.display="none")},this.setupBar=e=>{const r=this.props.apiOptions.isMobile,n=e.index,a=e.startHeight,i=e.config,s=e.isHistogram,o=this,l=o.graphie,u=i.barWidth/2;let y;s?y=.5+n*i.barWidth+u:y=(r?u:.5+i.barPad)+n;const m=function(h,p){const c=l.scalePoint(0);if(i.graph.bars[h].scale(1,Math.max(r?.2:.01,p/i.scaleY),c[0],c[1]),s){const b=i.graph.dividers[h-1],w=i.graph.dividers[h];if(b){const q=Math.min(o.state.values[h-1],p);b.scale(1,Math.max(.01,q/i.scaleY),c[0],c[1])}if(w){const q=Math.min(o.state.values[h+1],p);w.scale(1,Math.max(.01,q/i.scaleY),c[0],c[1])}}};if(l.style({stroke:"none",fill:r?j.BLUE_C:j.LIGHT_BLUE,opacity:1},function(){i.graph.bars[n]=l.path([[y-u,0],[y-u,i.scaleY],[y+u,i.scaleY],[y+u,0],[y-u,0]])}),s&&n>0&&l.style({stroke:"#000",strokeWidth:1,opacity:.3},function(){i.graph.dividers.push(l.path([[y-u,0],[y-u,i.scaleY]]))}),r){const h=i.scaleY/o.props.snapsPerLine;i.graph.lines[n]=I.addMaybeMobileMovablePoint(this,{coord:[y,a],constraints:[(p,c,b)=>[y,this._clampValue(Math.round(p[1]/h)*h,0,i.dimY)]],onMoveStart:function(){i.graph.bars[n].attr({fill:j.INTERACTIVE})},onMove:function(){const p=i.graph.lines[n].coord()[1],c=[...o.state.values];c[n]=p,o.setState({values:c}),o.changeAndTrack({values:c}),o._maybeHideDragPrompt(),m(n,p)},onMoveEnd:function(){i.graph.bars[n].attr({fill:j.BLUE_C})}}),i.graph.lines[n].state.visibleShape.wrapper.style.zIndex="1",o._maybeShowDragPrompt()}else i.graph.lines[n]=l.addMovableLineSegment({coordA:[y-u,a],coordZ:[y+u,a],snapY:i.scaleY/o.props.snapsPerLine,constraints:{constrainX:!0},normalStyle:{stroke:j.INTERACTIVE,"stroke-width":this.props.static?0:4}}),i.graph.lines[n].onMove=function(h,p){let c=this.coordA[1];(c<0||c>i.dimY)&&(c=Math.min(Math.max(c,0),i.dimY),this.coordA[1]=this.coordZ[1]=c,this.transform());const b=[...o.state.values];b[n]=c,o.setState({values:b}),o.changeAndTrack({values:b}),m(n,c)};return m(n,a),y},this.setupLine=(e,r,n)=>{const a=this.props.apiOptions.isMobile,i=this,s=n,o=i.graphie,l=e+(a?.4:1);if(a){const u=n.scaleY/i.props.snapsPerLine;s.graph.points[e]=I.addMaybeMobileMovablePoint(this,{coord:[l,r],constraints:[(y,m,h)=>[l,this._clampValue(Math.round(y[1]/u)*u,0,n.dimY)]],onMove:function(){const y=s.graph.points[e].coord()[1],m=[...i.state.values];m[e]=y,i.setState({values:m}),i.changeAndTrack({values:m}),i._maybeHideDragPrompt()}}),i._maybeShowDragPrompt(),e>0&&(s.graph.lines[e]=I.addMovableLine(o,{points:[s.graph.points[e-1],s.graph.points[e]],constraints:I.MovablePoint.constraints.fixed(),normalStyle:{stroke:j.BLUE_C,"stroke-width":2},highlightStyle:{stroke:j.BLUE_C,"stroke-width":2}}))}else s.graph.points[e]=o.addMovablePoint({coord:[l,r],constraints:{constrainX:!0},normalStyle:{fill:j.INTERACTIVE,stroke:j.INTERACTIVE},snapY:s.scaleY/i.props.snapsPerLine}),s.graph.points[e].onMove=function(u,y){y=Math.min(Math.max(y,0),s.dimY);const m=[...i.state.values];return m[e]=y,i.setState({values:m}),i.changeAndTrack({values:m}),[u,y]},e>0&&(s.graph.lines[e]=o.addMovableLineSegment({pointA:s.graph.points[e-1],pointZ:s.graph.points[e],constraints:{fixed:!0},normalStyle:{stroke:"#9ab8ed","stroke-width":2}}));return l},this.setupDotplot=(e,r)=>{const n=this.graphie,a=this.props.apiOptions.isMobile;return this.setupTiledPlot(e,a?.5:1,r,(i,s)=>n.ellipse([i,s],[this.DOT_PLOT_POINT_SIZE()/n.scale[0],this.DOT_PLOT_POINT_SIZE()/n.scale[1]],{fill:j.INTERACTIVE,stroke:j.INTERACTIVE}))},this.setupPic=(e,r)=>{const n=this.graphie;return this.setupTiledPlot(e,0,r,(a,i)=>{const s=n.scalePoint([a,i]),o=this.props.picSize;return n.raphael.image(this.props.picUrl,s[0]-o/2,s[1]-o/2,o,o)})},this.setupTiledPlot=(e,r,n,a)=>{const i=this,s=n,o=i.graphie,l=o.pics,u=o.dotTicks,y=e+.5+s.picPad;o.mouselayer.canvas.style.touchAction="none",l[e]=[],u[e]=[];const m=Math.round(s.dimY/s.scaleY)+1;return g(m).times(function(h){h-=1;const p=(h+.5)*s.scaleY,c=y-s.picBoxWidth/2,b=p+.5*s.scaleY,w=o.scalePoint([c,b+r]),q=o.mouselayer.rect(w[0],w[1],s.picBoxWidthPx,s.picBoxHeight);_(q[0]).css({fill:"#000",opacity:0,cursor:"pointer"}).on("vmousedown",function(k){k.preventDefault(),i.whichPicClicked=e,i.setPicHeight(e,b),_(document).on("vmouseup.plotTile",function(T){_(document).unbind(".plotTile")}),_(document).on("vmousemove.plotTile",function(T){T.preventDefault();const O=o.getMouseCoord(T)[1],W=Math.floor(O-r),E=(Math.max(-1,Math.floor(W/s.scaleY))+.5)*s.scaleY,P=Math.min(E+.5*s.scaleY,s.dimY);i.setPicHeight(i.whichPicClicked,P)})}),!(h<0)&&(l[e][h]=a(y,p+r),u[e][h]=o.ellipse([y,p+r],[i.DOT_TICK_POINT_SIZE()/o.scale[0],i.DOT_TICK_POINT_SIZE()/o.scale[1]],{fill:"#dee1e3",stroke:"#dee1e3"}))}),y},this.setPicHeight=(e,r)=>{const n=[...this.state.values];n[e]=r,this.drawPicHeights(n,this.state.values),this.setState({values:n}),this.changeAndTrack({values:n})},this.changeAndTrack=e=>{this.props.onChange(e),this.props.trackInteraction()},this.drawPicHeights=(e,r)=>{const n=this,a=n.graphie,i=a.pics,s=this.props.apiOptions.isMobile;if(s){const o=e.every(l=>l===0);a.dotPrompt[0].style.display=o?"inline":"none"}g.each(i,function(o,l){g.each(o,function(u,y){const m=(y+1)*n.props.scaleY,h=m<=e[l];if(n.props.type==="dotplot"){const p=m<=r[l];h&&!p&&u.animate({"stroke-width":8},75,()=>u.animate({"stroke-width":2},75))}_(u[0]).css({display:h?"inline":"none"}),a.dotTicks[l][y][0].style.display=h||!s?"none":"inline"})})}}static validate(e,r){return Xi(e,r)}componentDidMount(){this._isMounted=!0,this.setupGraphie(this.state)}UNSAFE_componentWillReceiveProps(e){const r=["type","labels","categories","scaleY","maxY","snapsPerLine","picUrl","labelInterval","static"];this.shouldSetupGraphie=g.any(r,n=>!g.isEqual(this.props[n],e[n]),this),!g.isEqual(this.props.starting,e.starting)&&!g.isEqual(this.state.values,e.starting)&&(this.shouldSetupGraphie=!0,this.setState({values:e.starting}))}componentDidUpdate(e,r){this.shouldSetupGraphie=this.shouldSetupGraphie||!g.isEqual(this.state.categoryHeights,r.categoryHeights),this.shouldSetupGraphie&&this.setupGraphie(r)}componentWillUnmount(){this._isMounted=!1}getUserInput(){return this.state.values}simpleValidate(e){return Xi(this.getUserInput(),e)}render(){const r={marginBottom:this.props.labels[0]?75:0};return d("div",{className:"perseus-widget-plotter graphie "+ze.INTERACTIVE,ref:"graphieDiv",style:r})}};Et.contextType=S,Et.defaultProps={type:"bar",labels:["",""],categories:[""],scaleY:1,maxY:10,snapsPerLine:2,picSize:40,picBoxHeight:48,picUrl:"",plotDimensions:[380,300],labelInterval:1};let bt=Et;const Kh=g.identity,Xh={name:"plotter",displayName:"Plotter",hidden:!0,widget:bt,staticTransform:Kh};bt.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[{name:"userInput",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",alias:"PerseusPlotterUserInput"}},{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // Translatable Text; The Axis labels. e.g. ["X Label", "Y Label"] + labels: ReadonlyArray; + // Translatable Text; Categories to display along the X access. e.g. [">0", ">6", ">12", ">18"] + categories: ReadonlyArray; + // The type of the graph. options "bar", "line", "pic", "histogram", "dotplot" + type: PlotType; + // The maximimum Y tick to display in the graph + maxY: number; + // The scale of the Y Axis + scaleY: number; + // Which ticks to display the labels for. For instance, setting this to "4" will only show every 4th label (plus the last one) + labelInterval: number | null | undefined; + // Creates the specified number of divisions between the horizontal lines. Fewer snaps between lines makes the graph easier for the student to create correctly. + snapsPerLine: number; + // The Y values the graph should start with + starting: ReadonlyArray; + // The Y values that represent the correct answer expected + correct: ReadonlyArray; + // A picture to represent items in a graph. + picUrl: string | null | undefined; + // deprecated + picSize: number | null | undefined; + // deprecated + picBoxHeight: number | null | undefined; + // deprecated + plotDimensions: ReadonlyArray; +}`,signature:{properties:[{key:"labels",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"type",value:{name:"unknown[number]",raw:"(typeof plotterPlotTypes)[number]",required:!0}},{key:"maxY",value:{name:"number",required:!0}},{key:"scaleY",value:{name:"number",required:!0}},{key:"labelInterval",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"snapsPerLine",value:{name:"number",required:!0}},{key:"starting",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"correct",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"picUrl",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"picSize",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"picBoxHeight",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"plotDimensions",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]},alias:"PerseusPlotterRubric"}}],returns:{type:{name:"union",raw:`| { + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; } -| null -| undefined`,elements:[{name:"signature",type:"object",raw:`{ - focusNode: Node; - focusOffset: number; - range: DOMRange; -}`,signature:{properties:[{key:"focusNode",value:{name:"Node",required:!0}},{key:"focusOffset",value:{name:"number",required:!0}},{key:"range",value:{name:"Range",required:!0}}]}},{name:"null"},{name:"undefined"}]}},description:`Get the current selection focus and range, if present and non-collapsed. - -Otherwise, if there is no current selection or it's collapsed, return -null.`},{name:"_updateTrackedSelection",docblock:"Compute and update the TrackedSelection to reflect the document state.",modifiers:[],params:[],returns:{type:{name:"void"}},description:"Compute and update the TrackedSelection to reflect the document state."},{name:"_handleSelectionChange",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleMouseDown",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleMouseUp",docblock:null,modifiers:[],params:[],returns:null}],displayName:"SelectionTracker",props:{buildHighlight:{required:!0,tsType:{name:"signature",type:"function",raw:"(domRange: DOMRange) => DOMHighlight | null | undefined",signature:{arguments:[{type:{name:"Range",required:!0},name:"domRange"}],return:{name:"union",raw:"DOMHighlight | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]}},{name:"null"},{name:"undefined"}]}}},description:""},children:{required:!1,tsType:{name:"signature",type:"function",raw:`( - trackedSelection: TrackedSelection | null | undefined, - userIsMouseSelecting: boolean, -) => React.ReactElement`,signature:{arguments:[{type:{name:"union",raw:"TrackedSelection | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - // The focus of the current selection - that is, the boundary point of the - // selection that the user is dragging around. - // - // We don't simply track the full \`Selection\` object, which contains all of - // this focus and range information and more, because the browser reuses - // the global \`Selection\` object and mutates it, which breaks our - // \`shouldComponentUpdate\` checks. - focusNode: Node; - focusOffset: number; - // If the current selection maps to a valid new highlight, we cache the - // highlight object here. - proposedHighlight: DOMHighlight; -}`,signature:{properties:[{key:"focusNode",value:{name:"Node",required:!0}},{key:"focusOffset",value:{name:"number",required:!0}},{key:"proposedHighlight",value:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},required:!0}}]}},{name:"null"},{name:"undefined"}]},name:"trackedSelection"},{type:{name:"boolean"},name:"userIsMouseSelecting"}],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}}},description:""},enabled:{required:!0,tsType:{name:"boolean"},description:""}}};const Ca=class Ca extends k.PureComponent{_handleAddHighlight(e){this.props.onAddHighlight(e);const r=document.getSelection();r&&r.collapseToEnd()}_selectionIsValid(e){if(!e)return!1;const{contentNode:r}=this.props,n=new Range;n.selectNodeContents(r);const a=new Range;return a.setStart(e.focusNode,e.focusOffset),a.collapse(!0),Ht(n,a)}render(){return d(gl,{buildHighlight:this.props.buildHighlight,enabled:this.props.editable,children:(e,r)=>q("div",{children:[d(vt,{editable:this.props.editable&&!this._selectionIsValid(e),highlights:this.props.highlights,offsetParent:this.props.offsetParent,onRemoveHighlight:this.props.onRemoveHighlight,zIndexes:this.props.zIndexes}),this._selectionIsValid(e)&&!r&&d(pa,{label:this.context.strings.addHighlight,onClick:()=>this._handleAddHighlight(e.proposedHighlight),focusNode:e.focusNode,focusOffset:e.focusOffset,offsetParent:this.props.offsetParent})]})})}};Ca.contextType=M;let ft=Ca;ft.__docgenInfo={description:"",methods:[{name:"_handleAddHighlight",docblock:null,modifiers:[],params:[{name:"highlightToAdd",optional:!1,type:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},alias:"DOMHighlight"}}],returns:null},{name:"_selectionIsValid",docblock:null,modifiers:[],params:[{name:"trackedSelection",optional:!0,type:{name:"union",raw:"TrackedSelection | null",elements:[{name:"signature",type:"object",raw:`{ - // The focus of the current selection - that is, the boundary point of the - // selection that the user is dragging around. - // - // We don't simply track the full \`Selection\` object, which contains all of - // this focus and range information and more, because the browser reuses - // the global \`Selection\` object and mutates it, which breaks our - // \`shouldComponentUpdate\` checks. - focusNode: Node; - focusOffset: number; - // If the current selection maps to a valid new highlight, we cache the - // highlight object here. - proposedHighlight: DOMHighlight; -}`,signature:{properties:[{key:"focusNode",value:{name:"Node",required:!0}},{key:"focusOffset",value:{name:"number",required:!0}},{key:"proposedHighlight",value:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},required:!0}}]}},{name:"null"}]}}],returns:{type:{name:"unknown"}}}],displayName:"HighlightingUI",props:{buildHighlight:{required:!0,tsType:{name:"signature",type:"function",raw:"(range: DOMRange) => DOMHighlight | null | undefined",signature:{arguments:[{type:{name:"Range",required:!0},name:"range"}],return:{name:"union",raw:"DOMHighlight | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]}},{name:"null"},{name:"undefined"}]}}},description:""},contentNode:{required:!0,tsType:{name:"Node"},description:""},editable:{required:!0,tsType:{name:"boolean"},description:""},highlights:{required:!0,tsType:{name:"signature",type:"object",raw:`{ - [key: string]: DOMHighlight; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},required:!0}}]}},description:""},offsetParent:{required:!0,tsType:{name:"Element"},description:""},onAddHighlight:{required:!0,tsType:{name:"signature",type:"function",raw:"(range: DOMHighlight) => unknown",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]}},name:"range"}],return:{name:"unknown"}}},description:""},onRemoveHighlight:{required:!0,tsType:{name:"signature",type:"function",raw:"(highlightKey: string) => unknown",signature:{arguments:[{type:{name:"string"},name:"highlightKey"}],return:{name:"unknown"}}},description:""},zIndexes:{required:!0,tsType:{name:"signature",type:"object",raw:`{ - belowContent: number; -}`,signature:{properties:[{key:"belowContent",value:{name:"number",required:!0}}]}},description:""}}};class hl extends k.PureComponent{componentDidMount(){this._sendWordsUpdate()}componentDidUpdate(){this._sendWordsUpdate()}_sendWordsUpdate(){this.props.onWordsUpdate(this._getWordRanges())}_getWordRanges(){const e=this._container;if(!e)throw new Ye("invariant violation: `this._container` is not defined, but this method is only called after mount/update",xe.NotAllowed);const r=e.ownerDocument.createTreeWalker(e,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_ELEMENT,()=>NodeFilter.FILTER_ACCEPT,!1),n=[];let a=null;for(;r.nextNode();){const i=r.currentNode;if(i.nodeType===Node.ELEMENT_NODE)getComputedStyle(i).display!=="inline"&&(a=null);else if(i.nodeType===Node.TEXT_NODE){const s=i.nodeValue,o=/\S+/g;let l,u=null;for(;(l=o.exec(s))!==null;){const y=l.index,m=l.index+l[0].length;let h;y===0&&a?(h=a,h.setEnd(i,m)):(h=i.ownerDocument.createRange(),h.setStart(i,y),h.setEnd(i,m),n.push(h)),m===s.length&&(u=h)}a=u}}return n}render(){return d("div",{ref:e=>this._container=e,children:this.props.children})}}hl.__docgenInfo={description:"",methods:[{name:"_sendWordsUpdate",docblock:null,modifiers:[],params:[],returns:null},{name:"_getWordRanges",docblock:null,modifiers:[],params:[],returns:{type:{name:"ReadonlyArray",elements:[{name:"Range"}],raw:"ReadonlyArray"}}}],displayName:"WordIndexer",props:{children:{required:!1,tsType:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]},description:""},onWordsUpdate:{required:!0,tsType:{name:"signature",type:"function",raw:"(wordRanges: ReadonlyArray) => unknown",signature:{arguments:[{type:{name:"ReadonlyArray",elements:[{name:"Range"}],raw:"ReadonlyArray"},name:"wordRanges"}],return:{name:"unknown"}}},description:""}}};class pl extends k.PureComponent{constructor(){super(...arguments),this.state={wordRanges:[]},this._handleAddHighlight=e=>{const r=Kh(this._getDOMHighlights(),e),n={};for(const a of Object.keys(r))n[a]=Qh(r[a]);this.props.onSerializedHighlightsUpdate(n)},this._handleRemoveHighlight=e=>{const{serializedHighlights:r}=this.props,n={...r};delete n[e],this.props.onSerializedHighlightsUpdate(n)},this._handleWordsUpdate=e=>{this.setState({wordRanges:e})}}_buildHighlight(e){return Bh(this._getDOMHighlights(),this.state.wordRanges,e)}_getDOMHighlights(){const{serializedHighlights:e}=this.props,{wordRanges:r}=this.state,n={};for(const a of Object.keys(e))n[a]=Xh(e[a],r);return n}render(){const e=this._getDOMHighlights(),r=n=>this._buildHighlight(n);return q("div",{className:j.css(Xi.container),ref:n=>this._container=n,children:[d("div",{children:this.props.enabled&&this._container&&this._content&&d(ft,{buildHighlight:r,contentNode:this._content,editable:this.props.editable,highlights:e,offsetParent:this._container,zIndexes:{belowContent:0},onAddHighlight:this._handleAddHighlight,onRemoveHighlight:this._handleRemoveHighlight})}),d("div",{className:j.css(Xi.content),ref:n=>this._content=n,children:d(hl,{onWordsUpdate:this._handleWordsUpdate,children:this.props.children})})]})}}const Xi=j.StyleSheet.create({container:{position:"relative",zIndex:0},content:{position:"relative",zIndex:1}});pl.__docgenInfo={description:"",methods:[{name:"_buildHighlight",docblock:null,modifiers:[],params:[{name:"highlightRange",optional:!1,type:{name:"Range",alias:"DOMRange"}}],returns:{type:{name:"union",raw:"DOMHighlight | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]}},{name:"null"},{name:"undefined"}]}}},{name:"_getDOMHighlights",docblock:`Take the highlights from props, and deserialize them into DOMHighlights, -according to the latest cache of word ranges.`,modifiers:[],params:[],returns:{type:{name:"signature",type:"object",raw:`{ - [key: string]: DOMHighlight; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},required:!0}}]}}},description:`Take the highlights from props, and deserialize them into DOMHighlights, -according to the latest cache of word ranges.`},{name:"_handleAddHighlight",docblock:"Add the given DOMHighlight to the current set.",modifiers:[],params:[{name:"highlight",optional:!1,type:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, both in terms of - // the first and last word, and in terms of the DOM for caching purposes. - firstWordIndex: number; - lastWordIndex: number; - // TODO(mdr): Things like color will go here, too :) - domRange: DOMRange; -}`,signature:{properties:[{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}},{key:"domRange",value:{name:"Range",required:!0}}]},alias:"DOMHighlight"}}],returns:null,description:"Add the given DOMHighlight to the current set."},{name:"_handleRemoveHighlight",docblock:`Remove the given highlight from the list, and call our callback with the -new set of highlights.`,modifiers:[],params:[{name:"keyToRemove",optional:!1,type:{name:"string"}}],returns:null,description:`Remove the given highlight from the list, and call our callback with the -new set of highlights.`},{name:"_handleWordsUpdate",docblock:`When our WordIndexer sends us a new cache of word ranges, store it in -our component state.`,modifiers:[],params:[{name:"wordRanges",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"Range"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}}],returns:null,description:`When our WordIndexer sends us a new cache of word ranges, store it in -our component state.`}],displayName:"HighlightableContent",props:{children:{required:!1,tsType:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]},description:""},editable:{required:!0,tsType:{name:"boolean"},description:""},enabled:{required:!0,tsType:{name:"boolean"},description:""},onSerializedHighlightsUpdate:{required:!0,tsType:{name:"signature",type:"function",raw:`( - serializedHighlights: SerializedHighlightSet, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - [key: string]: SerializedHighlight; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, in a - // DOM-independent format. - // TODO(mdr): Things like color will go here, too :) - range: SerializedRange; -}`,signature:{properties:[{key:"range",value:{name:"signature",type:"object",raw:`{ - type: "word-indexes"; - firstWordIndex: number; - lastWordIndex: number; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"word-indexes"',required:!0}},{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},name:"serializedHighlights"}],return:{name:"unknown"}}},description:""},serializedHighlights:{required:!0,tsType:{name:"signature",type:"object",raw:`{ - [key: string]: SerializedHighlight; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, in a - // DOM-independent format. - // TODO(mdr): Things like color will go here, too :) - range: SerializedRange; -}`,signature:{properties:[{key:"range",value:{name:"signature",type:"object",raw:`{ - type: "word-indexes"; - firstWordIndex: number; - lastWordIndex: number; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"word-indexes"',required:!0}},{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},description:""}}};function ca(){return{currentRef:[],useRefs:!0,lastRef:0,firstSentenceRef:null,firstQuestionRef:null,lastFootnote:{id:0,text:""}}}class tp extends k.Component{constructor(){super(...arguments),this.getRefContent=()=>this.props.refContent}render(){return d("span",{style:bl,children:"_"})}}class np extends k.Component{render(){return d("span",{style:bl,children:"_"})}}const en=({id:t,number:e})=>{const{strings:r}=ea();return d("span",{className:"perseus-sr-only",children:r[t]({number:e})},"alt-text")},cl={newline:D.defaultRules.newline,paragraph:D.defaultRules.paragraph,escape:D.defaultRules.escape,passageFootnote:{order:D.defaultRules.escape.order+.1,match:D.inlineRegex(/^\^/),parse:(t,e,r)=>{const n=r.lastFootnote.id+1,a={id:n,text:n===1?"*":""+n};return r.lastFootnote.text==="*"&&(r.lastFootnote.text=""+r.lastFootnote.id),r.lastFootnote=a,a},react:(t,e,r)=>d("sup",{children:t.text},r.key)},refStart:{order:D.defaultRules.escape.order+.2,match:function(t){const e=/^\{\{/.exec(t);if(e){let r=2,n=0;for(;r0)n--,r++;else break;r++}return e[1]=t.slice(2,r),e}return null},parse:(t,e,r)=>{if(!r.useRefs)return{ref:null,refContent:null};const n=r.lastRef+1;r.lastRef=n,r.currentRef.push(n);const a=e("(“"+t[1]+`”) - -`,g.defaults({useRefs:!1},ca()));return{ref:n,refContent:a}},react:(t,e,r)=>{const n=t.ref;if(n==null)return null;const a=e(t.refContent,{});return d(tp,{ref:Un+n,refContent:a},Un+n)}},refEnd:{order:D.defaultRules.escape.order+.3,match:D.inlineRegex(/^\}\}/),parse:(t,e,r)=>r.useRefs?{ref:r.currentRef.pop()||null}:{ref:null},react:(t,e,r)=>t.ref!=null?d(np,{ref:Vn+t.ref},Vn+t.ref):null},squareLabel:{order:D.defaultRules.escape.order+.4,match:D.inlineRegex(/^\[\[(\w+)\]\]( *)/),parse:(t,e,r)=>(r.firstQuestionRef||(r.firstQuestionRef=t[1]),{content:t[1],space:t[2].length>0}),react:(t,e,r)=>[d("span",{className:"perseus-passage-square-label",style:Qi,"aria-hidden":"true",children:d("span",{style:ap,children:t.content})},"visual-square"),d(en,{id:"questionMarker",number:t.content},"alt-text"),t.space?" ":null]},circleLabel:{order:D.defaultRules.escape.order+.5,match:D.inlineRegex(/^\(\((\w+)\)\)( *)/),parse:(t,e,r)=>({content:t[1],space:t[2].length>0}),react:(t,e,r)=>[d("span",{className:"perseus-passage-circle-label",style:Qi,"aria-hidden":!0,children:d("span",{style:ip,children:t.content})},"visual-circle"),d(en,{id:"circleMarker",number:t.content},"alt-text"),t.space?" ":null]},squareBracketRef:{order:D.defaultRules.escape.order+.6,match:D.inlineRegex(/^\[(\d+)\]( *)/),parse:(t,e,r)=>(r.firstSentenceRef||(r.firstSentenceRef=t[1]),{content:t[1],space:t[2].length>0}),react:(t,e,r)=>[q("span",{className:"perseus-passage-bracket-label","aria-hidden":"true",children:["[",t.content,"]"]},"visual-brackets"),d(en,{id:"sentenceMarker",number:t.content},"alt-text"),t.space?" ":null]},highlight:{order:D.defaultRules.escape.order+.7,match:D.inlineRegex(/^{highlighting.start}(.+?){highlighting.end}/),parse:(t,e,r)=>({content:t[1]}),react:(t,e,r)=>[d("span",{className:"perseus-highlight",children:t.content},0)]},reviewHighlight:{order:D.defaultRules.escape.order+.7,match:D.inlineRegex(/^{review-highlighting.start}(.+?){review-highlighting.end}/),parse:(t,e,r)=>({content:t[1]}),react:(t,e,r)=>[d("span",{className:"perseus-review-highlight",children:t.content},0)]},strong:D.defaultRules.strong,u:D.defaultRules.u,em:D.defaultRules.em,del:D.defaultRules.del,text:{...D.defaultRules.text,react(t,e,r){return d("span",{children:t.content},r.key)}}},Un="start-ref-",Vn="end-ref-",bl={display:"inline-block",width:0,visibility:"hidden"},Qi={display:"inline",whiteSpace:"nowrap"},ap={display:"inline-block",color:"rgb(255, 255, 255)",backgroundColor:"rgb(90, 90, 90)",paddingLeft:10,paddingRight:10,userSelect:"none",WebkitUserSelect:"none"},ip={display:"inline-block",color:"rgb(255, 255, 255)",backgroundColor:"rgb(90, 90, 90)",userSelect:"none",WebkitUserSelect:"none",width:22,height:22,borderRadius:"50%",textAlign:"center"},sp=D.parserFor(cl),op=(t,e)=>{e=e||{};const r=t+` - -`;return sp(r,g.extend(e,ca()))},lp=D.reactFor(D.ruleOutput(cl,"react")),be={parse:op,output:lp,START_REF_PREFIX:Un,END_REF_PREFIX:Vn,getInitialParseState:ca};class vl extends k.Component{measureLineHeight(){return this._line?this._line.clientHeight:0}render(){return d("div",{className:j.css(up.measurer),"aria-hidden":"true",children:d("div",{ref:e=>this._line=e,className:"paragraph",children:"Line Height Measurement"})})}}const up=j.StyleSheet.create({measurer:{position:"absolute",top:0,left:0,visibility:"hidden",zIndex:-1}}),Pt=class Pt extends k.Component{constructor(){super(...arguments),this.state={nLines:null,startLineNumbersAfter:0,stylesAreApplied:!1},this._handleSerializedHighlightsUpdate=e=>{this.props.onChange({highlights:e})}}static validate(){return G()}componentDidMount(){this._updateState(),this._onResize=g.throttle(()=>{var e;this.shouldRenderJipt()||((e=this._lineHeightMeasurerRef)==null||e.measureLineHeight(),this._updateState())},500),window.addEventListener("resize",this._onResize),this._stylesAppiedTimer=window.setTimeout(()=>{this.setState({stylesAreApplied:!0})},0)}shouldComponentUpdate(e,r){return!g.isEqual(this.props,e)||!g.isEqual(this.state,r)}componentDidUpdate(){this._updateState()}componentWillUnmount(){window.removeEventListener("resize",this._onResize),clearTimeout(this._stylesAppiedTimer)}_updateState(){this.shouldRenderJipt()||this.setState({nLines:this._measureLines(),startLineNumbersAfter:this._getInitialLineNumber()})}_measureLines(){const e=Ar.findDOMNode(this._contentRef),r=_(e).height(),n=this._getLineHeight();return Math.round(r/n)}_getInitialLineNumber(){let e=!0;return this.props.findWidgets((n,a)=>a.type!=="passage"?!1:(n===this.props.widgetId&&(e=!1),e)).map(n=>n.getLineCount()).reduce((n,a)=>n+a,0)}_getLineHeight(){var e;return((e=this._lineHeightMeasurerRef)==null?void 0:e.measureLineHeight())||0}getLineCount(){return this.state.nLines!=null?this.state.nLines:this._measureLines()}_getStartRefLineNumber(e){const r=be.START_REF_PREFIX+e,n=this.refs[r];if(!n)return null;const a=_(Ar.findDOMNode(n));let i=a.next();i.length===0&&(i=a);const s=i.offset().top;return this.state.startLineNumbersAfter+1+this._convertPosToLineNumber(s)}_getEndRefLineNumber(e){const r=be.END_REF_PREFIX+e,n=this.refs[r];if(!n)return null;const a=_(Ar.findDOMNode(n));let i=a.prev();i.length===0&&(i=a);const s=i.height(),o=i.offset().top;let l=this._convertPosToLineNumber(o+s);return s===0&&(l+=1),this.state.startLineNumbersAfter+l}_convertPosToLineNumber(e){const r=Ar.findDOMNode(this._contentRef),n=e-_(r).offset().top,a=this._getLineHeight();return Math.round(n/a)}_getRefContent(e){const r=be.START_REF_PREFIX+e,n=this.refs[r];return n?n.getRefContent():null}getReference(e){const r=this._getStartRefLineNumber(e),n=this._getEndRefLineNumber(e);if(r==null||n==null)return null;const a=this._getRefContent(e);return{startLine:r,endLine:n,content:a}}getUserInput(){return null}simpleValidate(){return G()}_renderInstructions(e){const r=e.firstQuestionRef,n=e.firstSentenceRef,{strings:a}=this.context;let i="";r&&(i+=a.symbolPassage({questionSymbol:"[["+r+"]]",questionNumber:r})),n&&(i+=a.symbolQuestion({sentenceSymbol:"["+n+"]"}));const s=be.parse(i);return d("div",{className:"perseus-widget-passage-instructions",children:be.output(s)})}shouldRenderJipt(){const{JIPT:e}=Te();return e.useJIPT&&this.props.passageText.indexOf("crwdns")!==-1}_renderContent(e){const r=this.state.stylesAreApplied,n=!this.props.reviewModeRubric;return d(pl,{editable:n,enabled:r,onSerializedHighlightsUpdate:this._handleSerializedHighlightsUpdate,serializedHighlights:this.props.highlights,children:q("div",{ref:a=>this._contentRef=a,children:[d(vl,{ref:a=>this._lineHeightMeasurerRef=a}),be.output(e)]})})}_hasFootnotes(){const e=this.props.footnotes;return!/^\s*$/.test(e)}_renderFootnotes(){const e=this.props.footnotes,r=be.parse(e);return be.output(r)}render(){const{strings:e}=this.context;let r;const n=this.state.nLines;this.props.showLineNumbers&&n&&(r=g.range(1,n+1).map(u=>{const y=u+this.state.startLineNumbersAfter;if(y===4){const m=e.lineLabel;return d("span",{className:"line-marker",children:m},"line-marker")}return d("span",{children:y},u)}));const a=be.getInitialParseState(),i=/("{1})([^"]*)("{1})/g,s=this.props.passageText.replace(i,"“$2”"),o=be.parse(s,a),l=/\S/.test(this.props.passageTitle);return d("div",{children:q("div",{className:"perseus-widget-passage-container",children:[this._renderInstructions(a),q("div",{className:"perseus-widget-passage",children:[l&&d("h3",{className:"passage-title",children:d(H,{content:this.props.passageTitle,linterContext:this.props.linterContext,strings:e})}),r&&d("div",{className:"line-numbers","aria-hidden":!0,children:r}),!l&&d("h3",{className:"perseus-sr-only",children:e.beginningPassage}),d("div",{className:"passage-text",children:this.shouldRenderJipt()?d(H,{content:this.props.passageText,strings:e}):this._renderContent(o)}),this._hasFootnotes()&&[d("h4",{className:"perseus-sr-only",children:e.beginningFootnotes},"footnote-start"),d("div",{className:"footnotes",children:this._renderFootnotes()},"footnotes")],d("div",{className:"perseus-sr-only",children:e.endPassage})]})]})})}};Pt.contextType=M,Pt.defaultProps={passageTitle:"",passageText:"",footnotes:"",showLineNumbers:!0,highlights:{},linterContext:B};let wt=Pt;const dp={name:"passage",displayName:"Passage (SAT only)",hidden:!0,widget:wt,transform:t=>g.pick(t,"passageTitle","passageText","footnotes","showLineNumbers"),isLintable:!0};vl.__docgenInfo={description:"",methods:[{name:"measureLineHeight",docblock:null,modifiers:[],params:[],returns:{type:{name:"number"}}}],displayName:"LineHeightMeasurer"};wt.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[],returns:null},{name:"_handleSerializedHighlightsUpdate",docblock:null,modifiers:[],params:[{name:"serializedHighlights",optional:!1,type:{name:"signature",type:"object",raw:`{ - [key: string]: SerializedHighlight; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, in a - // DOM-independent format. - // TODO(mdr): Things like color will go here, too :) - range: SerializedRange; -}`,signature:{properties:[{key:"range",value:{name:"signature",type:"object",raw:`{ - type: "word-indexes"; - firstWordIndex: number; - lastWordIndex: number; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"word-indexes"',required:!0}},{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]},alias:"SerializedHighlightSet"}}],returns:null},{name:"_updateState",docblock:`Line numbering - -These functions support passage line numbering, which is non-trivial -because we manually measure lines to support resizing as well as -continuing line numbers from previous passages.`,modifiers:[],params:[],returns:null,description:`Line numbering - -These functions support passage line numbering, which is non-trivial -because we manually measure lines to support resizing as well as -continuing line numbers from previous passages.`},{name:"_measureLines",docblock:null,modifiers:[],params:[],returns:{type:{name:"number"}}},{name:"_getInitialLineNumber",docblock:null,modifiers:[],params:[],returns:{type:{name:"number"}}},{name:"_getLineHeight",docblock:null,modifiers:[],params:[],returns:{type:{name:"number"}}},{name:"getLineCount",docblock:null,modifiers:[],params:[],returns:{type:{name:"number"}}},{name:"_getStartRefLineNumber",docblock:`Passage refs - -These are functions to support the passage refs inter-widgets feature -where other widgets can fetch the line numbers of a reference inside of -a passage. +| { + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; + }`,elements:[{name:"signature",type:"object",raw:`{ + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"DOT_PLOT_POINT_SIZE",docblock:null,modifiers:[],params:[],returns:null},{name:"DOT_PLOT_POINT_PADDING",docblock:null,modifiers:[],params:[],returns:null},{name:"DOT_TICK_POINT_SIZE",docblock:null,modifiers:[],params:[],returns:null},{name:"setupGraphie",docblock:null,modifiers:[],params:[{name:"prevState",optional:!1,type:null}],returns:null},{name:"showHairlines",docblock:null,modifiers:[],params:[{name:"point",optional:!1,type:null}],returns:null},{name:"hideHairlines",docblock:null,modifiers:[],params:[],returns:null},{name:"labelCategory",docblock:null,modifiers:[],params:[{name:"x",optional:!1,type:null},{name:"category",optional:!1,type:null}],returns:null},{name:"setupCategories",docblock:null,modifiers:[],params:[{name:"config",optional:!1,type:null}],returns:null},{name:"_clampValue",docblock:null,modifiers:[],params:[{name:"v",optional:!1,type:null},{name:"min",optional:!1,type:null},{name:"max",optional:!1,type:null}],returns:null},{name:"_maybeShowDragPrompt",docblock:null,modifiers:[],params:[],returns:null},{name:"_maybeHideDragPrompt",docblock:null,modifiers:[],params:[],returns:null},{name:"setupBar",docblock:null,modifiers:[],params:[{name:"args",optional:!1,type:null}],returns:null},{name:"setupLine",docblock:`Renders a segment of an interactive line to the plotter graph +@param i the index of the point to render +@param startHeight the initial height of the given point +@param config the graph setup, such as scale and dimensions`,modifiers:[],params:[{name:"i",description:"the index of the point to render",optional:!1},{name:"startHeight",description:"the initial height of the given point",optional:!1},{name:"config",description:"the graph setup, such as scale and dimensions",optional:!1}],returns:null,description:"Renders a segment of an interactive line to the plotter graph"},{name:"setupDotplot",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"config",optional:!1,type:null}],returns:null},{name:"setupPic",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"config",optional:!1,type:null}],returns:null},{name:"setupTiledPlot",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"bottomMargin",optional:!1,type:null},{name:"config",optional:!1,type:null},{name:"createImage",optional:!1,type:null}],returns:null},{name:"setPicHeight",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"y",optional:!1,type:null}],returns:null},{name:"changeAndTrack",docblock:null,modifiers:[],params:[{name:"data",optional:!1,type:null}],returns:null},{name:"drawPicHeights",docblock:null,modifiers:[],params:[{name:"values",optional:!1,type:null},{name:"prevValues",optional:!1,type:null}],returns:null},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"}}},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ + // Translatable Text; The Axis labels. e.g. ["X Label", "Y Label"] + labels: ReadonlyArray; + // Translatable Text; Categories to display along the X access. e.g. [">0", ">6", ">12", ">18"] + categories: ReadonlyArray; + // The type of the graph. options "bar", "line", "pic", "histogram", "dotplot" + type: PlotType; + // The maximimum Y tick to display in the graph + maxY: number; + // The scale of the Y Axis + scaleY: number; + // Which ticks to display the labels for. For instance, setting this to "4" will only show every 4th label (plus the last one) + labelInterval: number | null | undefined; + // Creates the specified number of divisions between the horizontal lines. Fewer snaps between lines makes the graph easier for the student to create correctly. + snapsPerLine: number; + // The Y values the graph should start with + starting: ReadonlyArray; + // The Y values that represent the correct answer expected + correct: ReadonlyArray; + // A picture to represent items in a graph. + picUrl: string | null | undefined; + // deprecated + picSize: number | null | undefined; + // deprecated + picBoxHeight: number | null | undefined; + // deprecated + plotDimensions: ReadonlyArray; +}`,signature:{properties:[{key:"labels",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"type",value:{name:"unknown[number]",raw:"(typeof plotterPlotTypes)[number]",required:!0}},{key:"maxY",value:{name:"number",required:!0}},{key:"scaleY",value:{name:"number",required:!0}},{key:"labelInterval",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"snapsPerLine",value:{name:"number",required:!0}},{key:"starting",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"correct",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"picUrl",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"picSize",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"picBoxHeight",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"plotDimensions",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]},alias:"PerseusPlotterRubric"}}],returns:{type:{name:"union",raw:`| { + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; + } +| { + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; + }`,elements:[{name:"signature",type:"object",raw:`{ + type: "invalid"; + message?: string | null | undefined; + suppressAlmostThere?: boolean | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + type: "points"; + earned: number; + total: number; + message?: string | null | undefined; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}}],displayName:"Plotter",props:{widgetId:{required:!0,tsType:{name:"string"},description:""},alignment:{required:!0,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},problemNum:{required:!0,tsType:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},description:""},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; +}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, +) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been +answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at +0 and is incremented for each group widget), and the ID of the +group widget, then returns a react component that will be added +immediately above the renderer in the group widget. If the +function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead +of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead +of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; +}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same +interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM +DOM elements. For example, when provided, will be used +in place of . This allows clients to provide pre-styled +components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component +to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; -todo(matthewc): The refs are created by PassageMarkdown's refStart and refEnd, -somehow bubbling up to Passage's \`this.refs\`. This runs against -current best practices for refs by using string refs, but also -by breaking our expectation of explicit data flow.`,modifiers:[],params:[{name:"referenceNumber",optional:!1,type:{name:"number"}}],returns:{type:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]}},description:`Passage refs + correct?: boolean; -These are functions to support the passage refs inter-widgets feature -where other widgets can fetch the line numbers of a reference inside of -a passage. + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +} & Partial & + Partial`,elements:[{name:"signature",type:"object",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; -todo(matthewc): The refs are created by PassageMarkdown's refStart and refEnd, -somehow bubbling up to Passage's \`this.refs\`. This runs against -current best practices for refs by using string refs, but also -by breaking our expectation of explicit data flow.`},{name:"_getEndRefLineNumber",docblock:null,modifiers:[],params:[{name:"referenceNumber",optional:!1,type:{name:"number"}}],returns:{type:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]}}},{name:"_convertPosToLineNumber",docblock:null,modifiers:[],params:[{name:"absoluteVPos",optional:!1,type:{name:"number"}}],returns:{type:{name:"number"}}},{name:"_getRefContent",docblock:null,modifiers:[],params:[{name:"referenceNumber",optional:!1,type:{name:"number"}}],returns:{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]}}},{name:"getReference",docblock:null,modifiers:[],params:[{name:"referenceNumber",optional:!1,type:{name:"number"}}],returns:{type:{name:"union",raw:"Reference | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - startLine: number; - endLine: number; - content: string | null | undefined; -}`,signature:{properties:[{key:"startLine",value:{name:"number",required:!0}},{key:"endLine",value:{name:"number",required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"null"},{name:"undefined"}]}}},{name:"getUserInput",docblock:`Misc functions + correct?: boolean; -These are misc widget functions used for the widget API`,modifiers:[],params:[],returns:{type:{name:"null"}},description:`Misc functions + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + status: "correct" | "incorrect" | "invalid"; +}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + visible: number; +}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It +also includes any extra parameters that the originating widget provided. +This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is +being used. For mobile web this will be the ProvidedKeypad +component. In this situation we use the MathInput component +from the math-input repo instead of the existing perseus math +input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance +of \`math-input\`'s keypad to the body. This is used by the native +apps so they can have the keypad be defined on the native side. +It is called with an function that, when called, blurs the input, +and is expected to return an object of the shape +keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the +drawing area (scratchpad) should be allowed/disallowed. -These are misc widget functions used for the widget API`},{name:"simpleValidate",docblock:null,modifiers:[],params:[],returns:null},{name:"_renderInstructions",docblock:`Rendering +Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the +page. For example, if this is enabled, the most recently used +radio widget will attempt to keep the "selected" answer in view +after entering review mode. -Functions to render the passage widget.`,modifiers:[],params:[{name:"parseState",optional:!1,type:{name:"intersection",raw:`State & { - currentRef: number[]; - useRefs: boolean; - lastRef: number; - firstSentenceRef: string | null | undefined; - firstQuestionRef: string | null | undefined; - lastFootnote: { - id: number; - text: string; - }; -}`,elements:[{name:"State"},{name:"signature",type:"object",raw:`{ - currentRef: number[]; - useRefs: boolean; - lastRef: number; - firstSentenceRef: string | null | undefined; - firstQuestionRef: string | null | undefined; - lastFootnote: { - id: number; - text: string; - }; -}`,signature:{properties:[{key:"currentRef",value:{name:"Array",elements:[{name:"number"}],raw:"number[]",required:!0}},{key:"useRefs",value:{name:"boolean",required:!0}},{key:"lastRef",value:{name:"number",required:!0}},{key:"firstSentenceRef",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"firstQuestionRef",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"lastFootnote",value:{name:"signature",type:"object",raw:`{ - id: number; - text: string; -}`,signature:{properties:[{key:"id",value:{name:"number",required:!0}},{key:"text",value:{name:"string",required:!0}}]},required:!0}}]}}],alias:"ParseState"}}],returns:{type:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},description:`Rendering +Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio +widgets. This allows users to note which answers they believe to +be incorrect, to find the answer by process of elimination. -Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null,modifiers:[],params:[],returns:{type:{name:"boolean"}}},{name:"_renderContent",docblock:null,modifiers:[],params:[{name:"parsed",optional:!1,type:{name:"Array",elements:[{name:"SingleASTNode"}],raw:"Array",alias:"Array"}}],returns:{type:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}}},{name:"_hasFootnotes",docblock:null,modifiers:[],params:[],returns:{type:{name:"boolean"}}},{name:"_renderFootnotes",docblock:null,modifiers:[],params:[],returns:{type:{name:"ReactReactNode",raw:"React.ReactNode"}}}],displayName:"Passage",props:{onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`( - arg1: { - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; - }, - callback?: () => unknown | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; -}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { +We plan to roll this out to all call sites eventually, but for +now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content +in a editor is delayed before propagated to a prop. For example, +when text is typed in the text area of an Editor component, +there will be a delay equal to the value of \`editorChangeDelay\` +before the change is propagated. This is added for better +responsiveness of the editor when used in certain contexts such +as StructuredItem exercises where constant re-rendering for each +keystroke caused text typed in the text area to appear in it +only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. */ - replace?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; - }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); +}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false +| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. + +Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -52992,7 +70658,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53036,7 +70702,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53080,7 +70746,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53124,7 +70790,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53168,7 +70834,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53212,7 +70878,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53256,7 +70922,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53300,7 +70966,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53344,7 +71010,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53388,7 +71054,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53432,7 +71098,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53476,7 +71142,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53520,7 +71186,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53564,7 +71230,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53608,7 +71274,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53652,7 +71318,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53696,7 +71362,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53740,7 +71406,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53784,7 +71450,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53828,7 +71494,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53872,7 +71538,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53916,7 +71582,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -53960,7 +71626,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -54004,7 +71670,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -54048,7 +71714,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -54092,7 +71758,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -54136,7 +71802,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -54180,7 +71846,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -54224,7 +71890,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -54268,23 +71934,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -54328,46 +71978,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -54411,21 +72022,7 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -54469,238 +72066,10 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - selected: boolean; - crossedOut: boolean; - highlighted: boolean; - rationaleShown: boolean; - correctnessShown: boolean; - previouslyAnswered: boolean; - readOnly: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},widgetId:{required:!0,tsType:{name:"string"},description:""},alignment:{required:!0,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},problemNum:{required:!0,tsType:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},description:""},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +after they have been transformed by the widget's transform function. +This is useful for when we need to know how a widget has shuffled its +the available choices.`}]}}],raw:`Readonly<{ isArticle?: boolean; onFocusChange?: ( newFocusPath: FocusPath, @@ -54837,108 +72206,125 @@ Functions to render the passage widget.`},{name:"shouldRenderJipt",docblock:null * the available choices. */ onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ +}>`},{name:"signature",type:"object",raw:`{ + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; +}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< + APIOptions["setDrawingAreaAvailable"] +>`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< + APIOptions & { + GroupMetadataEditor: NonNullable; + baseElements: NonNullable; + canScrollPage: NonNullable; + crossOutEnabled: NonNullable; + editorChangeDelay: NonNullable; + groupAnnotator: NonNullable; + isArticle: NonNullable; + isMobile: NonNullable; + onFocusChange: NonNullable; + readOnly: NonNullable; + setDrawingAreaAvailable: NonNullable< + APIOptions["setDrawingAreaAvailable"] + >; + showAlignmentOptions: NonNullable; + } +>`},description:""},keypadElement:{required:!1,tsType:{name:"any"},description:""},questionCompleted:{required:!1,tsType:{name:"boolean"},description:""},onFocus:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},onBlur:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},findWidgets:{required:!0,tsType:{name:"signature",type:"function",raw:"(criterion: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"Widget"}],raw:"ReadonlyArray"}}},description:""},reviewModeRubric:{required:!0,tsType:{name:"Rubric"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`( + arg1: { + hints?: ReadonlyArray; + replace?: boolean; + content?: string; + widgets?: WidgetDict; + images?: ImageDict; + // used only in EditorPage + question?: any; + answerArea?: PerseusAnswerArea | null; + itemDataVersion?: Version; + // used in MutirenderEditor + item?: Item; + editorMode?: EditorMode; + jsonMode?: boolean; + // perseus-all-package/widgets/unit.jsx + value?: any; + // widgets/radio/widget.jsx + choiceStates?: ReadonlyArray; + // widgets/numeric-input.jsx + currentValue?: string; + // perseus-all-package/widgets/dropdown.jsx + selected?: number; + // perseus-all-package/widgets/grapher.jsx + plot?: any; + // Interactive Graph callback (see legacy: interactive-graph.tsx) + graph?: PerseusGraphType; + }, + callback?: () => unknown | null | undefined, + silent?: boolean, +) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + hints?: ReadonlyArray; + replace?: boolean; + content?: string; + widgets?: WidgetDict; + images?: ImageDict; + // used only in EditorPage + question?: any; + answerArea?: PerseusAnswerArea | null; + itemDataVersion?: Version; + // used in MutirenderEditor + item?: Item; + editorMode?: EditorMode; + jsonMode?: boolean; + // perseus-all-package/widgets/unit.jsx + value?: any; + // widgets/radio/widget.jsx + choiceStates?: ReadonlyArray; + // widgets/numeric-input.jsx + currentValue?: string; + // perseus-all-package/widgets/dropdown.jsx + selected?: number; + // perseus-all-package/widgets/grapher.jsx + plot?: any; + // Interactive Graph callback (see legacy: interactive-graph.tsx) + graph?: PerseusGraphType; +}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. + * When \`true\`, causes the previous hint to be replaced with this hint when + * displayed. When \`false\`, the previous hint remains visible when this one + * is displayed. This allows for hints that build upon each other. */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + replace?: boolean; +}`,elements:[{name:"signature",type:"object",raw:`{ + // Translatable Markdown content to be rendered. May include references to + // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). + // For each image found in this content, there can be an entry in the + // \`images\` dict (below) with the key being the image's url which defines + // additional attributes for the image. + content: string; + // A dictionary of {[widgetName]: Widget} to be referenced from the content field + widgets: PerseusWidgetsMap; + // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + metadata?: ReadonlyArray; + // A dictionary of {[imageUrl]: PerseusImageDetail}. + images: { + [key: string]: PerseusImageDetail; + }; +}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -56390,181 +73776,23 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [key: string]: PerseusImageDetail; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // The width of the image + width: number; + // the height of the image + height: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. + * When \`true\`, causes the previous hint to be replaced with this hint when + * displayed. When \`false\`, the previous hint remains visible when this one + * is displayed. This allows for hints that build upon each other. */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},{name:"signature",type:"object",raw:`{ - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< - APIOptions["setDrawingAreaAvailable"] ->`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< - APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; - } ->`},description:""},keypadElement:{required:!1,tsType:{name:"any"},description:""},questionCompleted:{required:!1,tsType:{name:"boolean"},description:""},onFocus:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},onBlur:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},findWidgets:{required:!0,tsType:{name:"signature",type:"function",raw:"(arg1: FindWidgetsCallback) => ReadonlyArray",signature:{arguments:[{type:{name:"signature",type:"function",raw:"(id: string, widgetInfo: PerseusWidget) => boolean",signature:{arguments:[{type:{name:"string"},name:"id"},{type:{name:"union",raw:`| CategorizerWidget + replace?: boolean; +}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget | CSProgramWidget | DefinitionWidget | DropdownWidget @@ -58049,410 +75277,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}]},name:"widgetInfo"}],return:{name:"boolean"}}},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"Passage"}],raw:"ReadonlyArray"}}},description:""},reviewModeRubric:{required:!0,tsType:{name:"Rubric"},description:""},trackInteraction:{required:!0,tsType:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"TrackingExtraArgs"},name:"extraData"}],return:{name:"void"}}},description:""},isLastUsedWidget:{required:!0,tsType:{name:"boolean"},description:""},linterContext:{required:!1,tsType:{name:"LinterContextProps"},description:"",defaultValue:{value:"linterContextDefault",computed:!0}},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},highlights:{required:!1,tsType:{name:"signature",type:"object",raw:`{ - [key: string]: SerializedHighlight; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // A range that specifies this highlight's target content, in a - // DOM-independent format. - // TODO(mdr): Things like color will go here, too :) - range: SerializedRange; -}`,signature:{properties:[{key:"range",value:{name:"signature",type:"object",raw:`{ - type: "word-indexes"; - firstWordIndex: number; - lastWordIndex: number; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"word-indexes"',required:!0}},{key:"firstWordIndex",value:{name:"number",required:!0}},{key:"lastWordIndex",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},description:"",defaultValue:{value:"{}",computed:!1}},passageTitle:{defaultValue:{value:'""',computed:!1},required:!1},passageText:{defaultValue:{value:'""',computed:!1},required:!1},footnotes:{defaultValue:{value:'""',computed:!1},required:!1},showLineNumbers:{defaultValue:{value:"true",computed:!1},required:!1}}};const zt=class zt extends k.Component{constructor(){super(...arguments),this.change=(...e)=>ne.apply(this,e)}static validate(){return G()}getUserInput(){return null}simpleValidate(){return G()}render(){return d(H,{content:this.props.content,apiOptions:this.props.apiOptions,linterContext:this.props.linterContext,strings:this.context.strings})}};zt.contextType=M,zt.defaultProps={content:"",linterContext:B};let Hn=zt;const yp={name:"passage-ref-target",displayName:"PassageRefTarget",defaultAlignment:"inline",widget:Hn,hidden:!0,transform:t=>g.pick(t,"content"),version:{major:0,minor:0},isLintable:!0},{deepEq:Ji}=z;function Zi(t,e){return Ji(t,e.starting)?{type:"invalid",message:null}:{type:"points",earned:Ji(t,e.correct)?1:0,total:1,message:null}}const Lt=class Lt extends k.Component{constructor(){super(...arguments),this._isMounted=!1,this.state={values:this.props.starting||[1],categoryHeights:{}},this.DOT_PLOT_POINT_SIZE=()=>this.props.apiOptions.isMobile?6:4,this.DOT_PLOT_POINT_PADDING=()=>8,this.DOT_TICK_POINT_SIZE=()=>2,this.setupGraphie=e=>{const r=this;r.shouldSetupGraphie=!1;const n=V.findDOMNode(r.refs.graphieDiv);_(n).empty();const a=He.createGraphie(n);r.graphie=a,r.graphie.pics=[],r.graphie.dotTicks=[];const i=r.props.type==="bar",s=r.props.type==="line",o=r.props.type==="pic",l=r.props.type==="histogram",u=r.props.type==="dotplot",y=o||u,m={},h=m,p=this.props.apiOptions.isMobile;h.graph={lines:[],bars:[],points:[],dividers:[]},h.scaleY=r.props.scaleY,h.dimX=r.props.categories.length;const c=p?[288,336]:r.props.plotDimensions;if(s)h.dimX+=p?-.2:1;else if(l)h.barPad=0,h.barWidth=1;else if(i)h.barPad=p?.08:.15,h.barWidth=1-2*h.barPad,h.dimX+=(p?-2:2)*h.barPad;else if(y){h.picBoxHeight=r.props.picBoxHeight,h.picBoxWidthPx=c[0]/r.props.categories.length;const A=c[0]-h.dimX*h.picBoxWidthPx;h.picPad=A/(2*h.dimX+2);const O=h.picBoxWidthPx+2*h.picPad;h.picPad=h.picPad/O,h.picBoxWidth=h.picBoxWidthPx/O,h.dimX+=2*h.picPad}u&&(h.picBoxHeight=this.DOT_PLOT_POINT_SIZE()*2+this.DOT_PLOT_POINT_PADDING()),h.dimY=Math.ceil(r.props.maxY/h.scaleY)*h.scaleY;let b=25;(i||s)&&p&&(b=r.props.labels[1].length!==0?17:11),u&&(b/=2),p&&y&&r.props.labels[1].length===0&&(b=0);let T=25,R=25*3;if(p&&(i||y)){const A=Math.max(0,...Object.values(r.state.categoryHeights));if(A){let O=25;y&&(O+=10),R=O+A}}if(p?h.scale=[(c[0]-b*4)/h.dimX,(c[1]-(T+R))/h.dimY]:h.scale=g.map([h.dimX,h.dimY],function(A,O){return c[O]/A}),y&&(h.scale[1]=h.picBoxHeight/h.scaleY),b/=h.scale[0],T/=h.scale[1],R/=h.scale[1],a.init({range:[[-3*b,h.dimX+b],[-R,h.dimY+T]],scale:h.scale,isMobile:this.props.apiOptions.isMobile}),a.addMouseLayer({allowScratchpad:!0,setDrawingAreaAvailable:this.props.apiOptions.setDrawingAreaAvailable}),!y){const A=p?h.scaleY:0;for(let O=A;O<=h.dimY;O+=h.scaleY)a.label([0,O],Ve.roundToApprox(O,2),"left",!0),a.style({stroke:p?"#e9ebec":"#000",strokeWidth:1,opacity:p?1:.3},function(){a.line([0,O],[h.dimX,O])})}(i||s)&&p&&!this.props.static&&(r.graphie.dragPrompt=a.label([h.dimX/2,h.dimY/2],this.context.strings.dragHandles,"center",!1).css("font-weight","bold").css("color",I.KA_GREEN).css("display","none")),r.setupCategories(m),y&&p&&(r.graphie.dotPrompt=a.label([h.dimX/2,h.dimY/2],this.context.strings.tapAddPoints,"center",!1).css("font-weight","bold").css("color",I.KA_GREEN).css("display","none")),y&&r.drawPicHeights(r.state.values,e.values),a.style({stroke:"#000",strokeWidth:2,opacity:1},function(){y?u?a.style({stroke:p?I.GRAY_G:"#000",strokeWidth:p?1:2},()=>a.line([p?0:.5,0],[h.dimX-(p?0:.5),0])):(a.line([0,0],[h.dimX,0]),(r.props.labels[1].length!==0||!p)&&a.style({stroke:p?I.GRAY_G:"#000",strokeWidth:p?1:2},()=>a.line([0,0],[0,h.dimY]))):(a.style({stroke:p?I.GRAY_G:"#000",strokeWidth:p?1:2},()=>a.line([p?-b*3:0,0],[h.dimX+(p?b:0),0])),(i||s)&&p||a.style({stroke:p?I.GRAY_G:"#000",strokeWidth:p?1:2},()=>a.line([0,0],[0,h.dimY])))}),a.label([h.dimX/2,p?-R:-35/h.scale[1]],r.props.labels[0],p?"above":"below",!1).css("font-weight","bold").css("color",p&&I.GRAY_F),a.label([(p?-35:-60)/h.scale[0],h.dimY/2],r.props.labels[1],"center",!1).css("font-weight","bold").css("color",p&&I.GRAY_F).addClass("rotate"),this.props.apiOptions.isMobile&&(this.horizHairline=new Nr(this.graphie,[0,0],[0,0],{normalStyle:{strokeWidth:1}}),this.horizHairline.attr({stroke:I.INTERACTIVE}),this.horizHairline.hide(),this.hairlineRange=[[0,h.dimX],[0,h.dimY]])},this.showHairlines=e=>{this.props.apiOptions.isMobile&&(this.horizHairline.moveTo([this.hairlineRange[0][0],e[1]],[this.hairlineRange[0][1],e[1]]),this.horizHairline.show())},this.hideHairlines=()=>{this.props.apiOptions.isMobile&&this.horizHairline.hide()},this.labelCategory=(e,r)=>{const n=this.props.apiOptions.isMobile,a=this.graphie;r=r+"";let i=!1;const s=r.match(/^\$(.*)\$$/);s&&(r=s[1],i=!0);const o=5,l=45,u=l*(Math.PI/180),y=`translateX(-50%) translateX(${o}px) translateY(-50%) rotate(-${l}deg)`,m=n&&!s;return new Promise(h=>{a.style({color:n?I.GRAY_G:"inherit",transform:m?y:"none",transformOrigin:"100%"},()=>{const p=a.label([e,n?-.5:0],r,"below",i),c=14+(m?Math.round(p.height()*Math.cos(u)+(p.width()+o)*Math.sin(u)):p.height());h({category:r,height:c})})})},this.setupCategories=e=>{const r=this,n=e,a=r.graphie,i=this.props.apiOptions.isMobile,s=[];r.props.type==="histogram"?(g.times(r.props.categories.length-1,function(o){r.setupBar({index:o,startHeight:r.state.values[o],config:e,isHistogram:!0})}),g.each(r.props.categories,function(o,l){const u=.5+l*n.barWidth;s.push(r.labelCategory(u,o));const y=6/n.scale[1];a.style({stroke:"#000",strokeWidth:i?1:2,opacity:1},function(){a.line([u,-y],[u,0])})})):g.each(r.props.categories,function(o,l){const u=r.state.values[l];let y;r.props.type==="bar"?y=r.setupBar({index:l,startHeight:u,config:e,isHistogram:!1}):r.props.type==="line"?y=r.setupLine(l,u,e):r.props.type==="pic"?y=r.setupPic(l,e):r.props.type==="dotplot"&&(y=r.setupDotplot(l,e));let m=0,h=-6/n.scale[1];r.props.type==="dotplot"&&!i&&(m=-h),r.props.type==="dotplot"?(l%r.props.labelInterval===0||l===r.props.categories.length-1)&&(s.push(r.labelCategory(y,o)),m*=1.5,h*=1.5):s.push(r.labelCategory(y,o)),a.style({stroke:i?I.GRAY_G:"#000",strokeWidth:i?1:2,opacity:1},function(){a.line([y,m],[y,h])})}),Promise.all(s).then(o=>{if(r._isMounted){const l={};o.forEach(({category:u,height:y})=>l[u]=y),r.setState({categoryHeights:l})}})},this._clampValue=(e,r,n)=>Math.max(Math.min(e,n),r),this._maybeShowDragPrompt=()=>{this.graphie.dragPrompt!=null&&(this.graphie.dragPrompt[0].style.display="inline")},this._maybeHideDragPrompt=()=>{this.graphie.dragPrompt!=null&&(this.graphie.dragPrompt[0].style.display="none")},this.setupBar=e=>{const r=this.props.apiOptions.isMobile,n=e.index,a=e.startHeight,i=e.config,s=e.isHistogram,o=this,l=o.graphie,u=i.barWidth/2;let y;s?y=.5+n*i.barWidth+u:y=(r?u:.5+i.barPad)+n;const m=function(h,p){const c=l.scalePoint(0);if(i.graph.bars[h].scale(1,Math.max(r?.2:.01,p/i.scaleY),c[0],c[1]),s){const b=i.graph.dividers[h-1],T=i.graph.dividers[h];if(b){const R=Math.min(o.state.values[h-1],p);b.scale(1,Math.max(.01,R/i.scaleY),c[0],c[1])}if(T){const R=Math.min(o.state.values[h+1],p);T.scale(1,Math.max(.01,R/i.scaleY),c[0],c[1])}}};if(l.style({stroke:"none",fill:r?I.BLUE_C:I.LIGHT_BLUE,opacity:1},function(){i.graph.bars[n]=l.path([[y-u,0],[y-u,i.scaleY],[y+u,i.scaleY],[y+u,0],[y-u,0]])}),s&&n>0&&l.style({stroke:"#000",strokeWidth:1,opacity:.3},function(){i.graph.dividers.push(l.path([[y-u,0],[y-u,i.scaleY]]))}),r){const h=i.scaleY/o.props.snapsPerLine;i.graph.lines[n]=E.addMaybeMobileMovablePoint(this,{coord:[y,a],constraints:[(p,c,b)=>[y,this._clampValue(Math.round(p[1]/h)*h,0,i.dimY)]],onMoveStart:function(){i.graph.bars[n].attr({fill:I.INTERACTIVE})},onMove:function(){const p=i.graph.lines[n].coord()[1],c=[...o.state.values];c[n]=p,o.setState({values:c}),o.changeAndTrack({values:c}),o._maybeHideDragPrompt(),m(n,p)},onMoveEnd:function(){i.graph.bars[n].attr({fill:I.BLUE_C})}}),i.graph.lines[n].state.visibleShape.wrapper.style.zIndex="1",o._maybeShowDragPrompt()}else i.graph.lines[n]=l.addMovableLineSegment({coordA:[y-u,a],coordZ:[y+u,a],snapY:i.scaleY/o.props.snapsPerLine,constraints:{constrainX:!0},normalStyle:{stroke:I.INTERACTIVE,"stroke-width":this.props.static?0:4}}),i.graph.lines[n].onMove=function(h,p){let c=this.coordA[1];(c<0||c>i.dimY)&&(c=Math.min(Math.max(c,0),i.dimY),this.coordA[1]=this.coordZ[1]=c,this.transform());const b=[...o.state.values];b[n]=c,o.setState({values:b}),o.changeAndTrack({values:b}),m(n,c)};return m(n,a),y},this.setupLine=(e,r,n)=>{const a=this.props.apiOptions.isMobile,i=this,s=n,o=i.graphie,l=e+(a?.4:1);if(a){const u=n.scaleY/i.props.snapsPerLine;s.graph.points[e]=E.addMaybeMobileMovablePoint(this,{coord:[l,r],constraints:[(y,m,h)=>[l,this._clampValue(Math.round(y[1]/u)*u,0,n.dimY)]],onMove:function(){const y=s.graph.points[e].coord()[1],m=[...i.state.values];m[e]=y,i.setState({values:m}),i.changeAndTrack({values:m}),i._maybeHideDragPrompt()}}),i._maybeShowDragPrompt(),e>0&&(s.graph.lines[e]=E.addMovableLine(o,{points:[s.graph.points[e-1],s.graph.points[e]],constraints:E.MovablePoint.constraints.fixed(),normalStyle:{stroke:I.BLUE_C,"stroke-width":2},highlightStyle:{stroke:I.BLUE_C,"stroke-width":2}}))}else s.graph.points[e]=o.addMovablePoint({coord:[l,r],constraints:{constrainX:!0},normalStyle:{fill:I.INTERACTIVE,stroke:I.INTERACTIVE},snapY:s.scaleY/i.props.snapsPerLine}),s.graph.points[e].onMove=function(u,y){y=Math.min(Math.max(y,0),s.dimY);const m=[...i.state.values];return m[e]=y,i.setState({values:m}),i.changeAndTrack({values:m}),[u,y]},e>0&&(s.graph.lines[e]=o.addMovableLineSegment({pointA:s.graph.points[e-1],pointZ:s.graph.points[e],constraints:{fixed:!0},normalStyle:{stroke:"#9ab8ed","stroke-width":2}}));return l},this.setupDotplot=(e,r)=>{const n=this.graphie,a=this.props.apiOptions.isMobile;return this.setupTiledPlot(e,a?.5:1,r,(i,s)=>n.ellipse([i,s],[this.DOT_PLOT_POINT_SIZE()/n.scale[0],this.DOT_PLOT_POINT_SIZE()/n.scale[1]],{fill:I.INTERACTIVE,stroke:I.INTERACTIVE}))},this.setupPic=(e,r)=>{const n=this.graphie;return this.setupTiledPlot(e,0,r,(a,i)=>{const s=n.scalePoint([a,i]),o=this.props.picSize;return n.raphael.image(this.props.picUrl,s[0]-o/2,s[1]-o/2,o,o)})},this.setupTiledPlot=(e,r,n,a)=>{const i=this,s=n,o=i.graphie,l=o.pics,u=o.dotTicks,y=e+.5+s.picPad;o.mouselayer.canvas.style.touchAction="none",l[e]=[],u[e]=[];const m=Math.round(s.dimY/s.scaleY)+1;return g(m).times(function(h){h-=1;const p=(h+.5)*s.scaleY,c=y-s.picBoxWidth/2,b=p+.5*s.scaleY,T=o.scalePoint([c,b+r]),R=o.mouselayer.rect(T[0],T[1],s.picBoxWidthPx,s.picBoxHeight);_(R[0]).css({fill:"#000",opacity:0,cursor:"pointer"}).on("vmousedown",function(A){A.preventDefault(),i.whichPicClicked=e,i.setPicHeight(e,b),_(document).on("vmouseup.plotTile",function(O){_(document).unbind(".plotTile")}),_(document).on("vmousemove.plotTile",function(O){O.preventDefault();const f=o.getMouseCoord(O)[1],v=Math.floor(f-r),C=(Math.max(-1,Math.floor(v/s.scaleY))+.5)*s.scaleY,W=Math.min(C+.5*s.scaleY,s.dimY);i.setPicHeight(i.whichPicClicked,W)})}),!(h<0)&&(l[e][h]=a(y,p+r),u[e][h]=o.ellipse([y,p+r],[i.DOT_TICK_POINT_SIZE()/o.scale[0],i.DOT_TICK_POINT_SIZE()/o.scale[1]],{fill:"#dee1e3",stroke:"#dee1e3"}))}),y},this.setPicHeight=(e,r)=>{const n=[...this.state.values];n[e]=r,this.drawPicHeights(n,this.state.values),this.setState({values:n}),this.changeAndTrack({values:n})},this.changeAndTrack=e=>{this.props.onChange(e),this.props.trackInteraction()},this.drawPicHeights=(e,r)=>{const n=this,a=n.graphie,i=a.pics,s=this.props.apiOptions.isMobile;if(s){const o=e.every(l=>l===0);a.dotPrompt[0].style.display=o?"inline":"none"}g.each(i,function(o,l){g.each(o,function(u,y){const m=(y+1)*n.props.scaleY,h=m<=e[l];if(n.props.type==="dotplot"){const p=m<=r[l];h&&!p&&u.animate({"stroke-width":8},75,()=>u.animate({"stroke-width":2},75))}_(u[0]).css({display:h?"inline":"none"}),a.dotTicks[l][y][0].style.display=h||!s?"none":"inline"})})}}static validate(e,r){return Zi(e,r)}componentDidMount(){this._isMounted=!0,this.setupGraphie(this.state)}UNSAFE_componentWillReceiveProps(e){const r=["type","labels","categories","scaleY","maxY","snapsPerLine","picUrl","labelInterval","static"];this.shouldSetupGraphie=g.any(r,n=>!g.isEqual(this.props[n],e[n]),this),!g.isEqual(this.props.starting,e.starting)&&!g.isEqual(this.state.values,e.starting)&&(this.shouldSetupGraphie=!0,this.setState({values:e.starting}))}componentDidUpdate(e,r){this.shouldSetupGraphie=this.shouldSetupGraphie||!g.isEqual(this.state.categoryHeights,r.categoryHeights),this.shouldSetupGraphie&&this.setupGraphie(r)}componentWillUnmount(){this._isMounted=!1}getUserInput(){return this.state.values}simpleValidate(e){return Zi(this.getUserInput(),e)}render(){const r={marginBottom:this.props.labels[0]?75:0};return d("div",{className:"perseus-widget-plotter graphie "+_e.INTERACTIVE,ref:"graphieDiv",style:r})}};Lt.contextType=M,Lt.defaultProps={type:"bar",labels:["",""],categories:[""],scaleY:1,maxY:10,snapsPerLine:2,picSize:40,picBoxHeight:48,picUrl:"",plotDimensions:[380,300],labelInterval:1};let kt=Lt;const mp=g.identity,gp={name:"plotter",displayName:"Plotter",hidden:!0,widget:kt,staticTransform:mp};kt.__docgenInfo={description:"",methods:[{name:"validate",docblock:null,modifiers:["static"],params:[{name:"userInput",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",alias:"PerseusPlotterUserInput"}},{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ - // Translatable Text; The Axis labels. e.g. ["X Label", "Y Label"] - labels: ReadonlyArray; - // Translatable Text; Categories to display along the X access. e.g. [">0", ">6", ">12", ">18"] - categories: ReadonlyArray; - // The type of the graph. options "bar", "line", "pic", "histogram", "dotplot" - type: PlotType; - // The maximimum Y tick to display in the graph - maxY: number; - // The scale of the Y Axis - scaleY: number; - // Which ticks to display the labels for. For instance, setting this to "4" will only show every 4th label (plus the last one) - labelInterval: number | null | undefined; - // Creates the specified number of divisions between the horizontal lines. Fewer snaps between lines makes the graph easier for the student to create correctly. - snapsPerLine: number; - // The Y values the graph should start with - starting: ReadonlyArray; - // The Y values that represent the correct answer expected - correct: ReadonlyArray; - // A picture to represent items in a graph. - picUrl: string | null | undefined; - // deprecated - picSize: number | null | undefined; - // deprecated - picBoxHeight: number | null | undefined; - // deprecated - plotDimensions: ReadonlyArray; -}`,signature:{properties:[{key:"labels",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"type",value:{name:"unknown[number]",raw:"(typeof plotterPlotTypes)[number]",required:!0}},{key:"maxY",value:{name:"number",required:!0}},{key:"scaleY",value:{name:"number",required:!0}},{key:"labelInterval",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"snapsPerLine",value:{name:"number",required:!0}},{key:"starting",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"correct",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"picUrl",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"picSize",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"picBoxHeight",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"plotDimensions",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]},alias:"PerseusPlotterRubric"}}],returns:{type:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}},{name:"DOT_PLOT_POINT_SIZE",docblock:null,modifiers:[],params:[],returns:null},{name:"DOT_PLOT_POINT_PADDING",docblock:null,modifiers:[],params:[],returns:null},{name:"DOT_TICK_POINT_SIZE",docblock:null,modifiers:[],params:[],returns:null},{name:"setupGraphie",docblock:null,modifiers:[],params:[{name:"prevState",optional:!1,type:null}],returns:null},{name:"showHairlines",docblock:null,modifiers:[],params:[{name:"point",optional:!1,type:null}],returns:null},{name:"hideHairlines",docblock:null,modifiers:[],params:[],returns:null},{name:"labelCategory",docblock:null,modifiers:[],params:[{name:"x",optional:!1,type:null},{name:"category",optional:!1,type:null}],returns:null},{name:"setupCategories",docblock:null,modifiers:[],params:[{name:"config",optional:!1,type:null}],returns:null},{name:"_clampValue",docblock:null,modifiers:[],params:[{name:"v",optional:!1,type:null},{name:"min",optional:!1,type:null},{name:"max",optional:!1,type:null}],returns:null},{name:"_maybeShowDragPrompt",docblock:null,modifiers:[],params:[],returns:null},{name:"_maybeHideDragPrompt",docblock:null,modifiers:[],params:[],returns:null},{name:"setupBar",docblock:null,modifiers:[],params:[{name:"args",optional:!1,type:null}],returns:null},{name:"setupLine",docblock:`Renders a segment of an interactive line to the plotter graph -@param i the index of the point to render -@param startHeight the initial height of the given point -@param config the graph setup, such as scale and dimensions`,modifiers:[],params:[{name:"i",description:"the index of the point to render",optional:!1},{name:"startHeight",description:"the initial height of the given point",optional:!1},{name:"config",description:"the graph setup, such as scale and dimensions",optional:!1}],returns:null,description:"Renders a segment of an interactive line to the plotter graph"},{name:"setupDotplot",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"config",optional:!1,type:null}],returns:null},{name:"setupPic",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"config",optional:!1,type:null}],returns:null},{name:"setupTiledPlot",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"bottomMargin",optional:!1,type:null},{name:"config",optional:!1,type:null},{name:"createImage",optional:!1,type:null}],returns:null},{name:"setPicHeight",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"y",optional:!1,type:null}],returns:null},{name:"changeAndTrack",docblock:null,modifiers:[],params:[{name:"data",optional:!1,type:null}],returns:null},{name:"drawPicHeights",docblock:null,modifiers:[],params:[{name:"values",optional:!1,type:null},{name:"prevValues",optional:!1,type:null}],returns:null},{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"}}},{name:"simpleValidate",docblock:null,modifiers:[],params:[{name:"rubric",optional:!1,type:{name:"signature",type:"object",raw:`{ - // Translatable Text; The Axis labels. e.g. ["X Label", "Y Label"] - labels: ReadonlyArray; - // Translatable Text; Categories to display along the X access. e.g. [">0", ">6", ">12", ">18"] - categories: ReadonlyArray; - // The type of the graph. options "bar", "line", "pic", "histogram", "dotplot" - type: PlotType; - // The maximimum Y tick to display in the graph - maxY: number; - // The scale of the Y Axis - scaleY: number; - // Which ticks to display the labels for. For instance, setting this to "4" will only show every 4th label (plus the last one) - labelInterval: number | null | undefined; - // Creates the specified number of divisions between the horizontal lines. Fewer snaps between lines makes the graph easier for the student to create correctly. - snapsPerLine: number; - // The Y values the graph should start with - starting: ReadonlyArray; - // The Y values that represent the correct answer expected - correct: ReadonlyArray; - // A picture to represent items in a graph. - picUrl: string | null | undefined; - // deprecated - picSize: number | null | undefined; - // deprecated - picBoxHeight: number | null | undefined; - // deprecated - plotDimensions: ReadonlyArray; -}`,signature:{properties:[{key:"labels",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"type",value:{name:"unknown[number]",raw:"(typeof plotterPlotTypes)[number]",required:!0}},{key:"maxY",value:{name:"number",required:!0}},{key:"scaleY",value:{name:"number",required:!0}},{key:"labelInterval",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"snapsPerLine",value:{name:"number",required:!0}},{key:"starting",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"correct",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"picUrl",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!0}},{key:"picSize",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"picBoxHeight",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!0}},{key:"plotDimensions",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]},alias:"PerseusPlotterRubric"}}],returns:{type:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}}}],displayName:"Plotter",props:{widgetId:{required:!0,tsType:{name:"string"},description:""},alignment:{required:!0,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},problemNum:{required:!0,tsType:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},description:""},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -58496,7 +75321,79 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ + _multi: ItemTree; +}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -58540,7 +75437,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -58584,7 +75481,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -58628,7 +75525,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -58672,7 +75569,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -58716,7 +75613,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -58760,7 +75657,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -58804,7 +75701,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -58848,7 +75745,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -58892,7 +75789,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -58936,7 +75833,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -58980,7 +75877,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59024,7 +75921,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59068,7 +75965,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59112,7 +76009,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59156,7 +76053,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59200,7 +76097,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59244,7 +76141,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59288,7 +76185,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59332,7 +76229,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59376,7 +76273,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59420,7 +76317,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59464,7 +76361,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59508,7 +76405,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59552,7 +76449,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59596,7 +76493,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59640,7 +76537,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59684,7 +76581,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59728,7 +76625,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59772,7 +76669,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59816,7 +76713,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59860,7 +76757,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -59904,265 +76801,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},{name:"signature",type:"object",raw:`{ - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< - APIOptions["setDrawingAreaAvailable"] ->`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< - APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; - } ->`},description:""},keypadElement:{required:!1,tsType:{name:"any"},description:""},questionCompleted:{required:!1,tsType:{name:"boolean"},description:""},onFocus:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},onBlur:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},findWidgets:{required:!0,tsType:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray"}}},description:""},reviewModeRubric:{required:!0,tsType:{name:"Rubric"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`( - arg1: { - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; - }, - callback?: () => unknown | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; -}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; - }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60206,7 +76845,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60250,7 +76889,54 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60294,7 +76980,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60338,7 +77024,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60382,7 +77068,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60426,7 +77112,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60470,7 +77156,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60514,7 +77200,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60558,7 +77244,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60602,7 +77288,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60646,7 +77332,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60690,7 +77376,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60734,7 +77420,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60778,7 +77464,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60822,7 +77508,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60866,7 +77552,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60910,7 +77596,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60954,7 +77640,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -60998,7 +77684,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61042,7 +77728,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61086,7 +77772,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61130,7 +77816,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61174,7 +77860,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61218,7 +77904,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61262,7 +77948,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61306,7 +77992,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61350,7 +78036,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61394,7 +78080,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61438,7 +78124,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61482,7 +78168,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61526,7 +78212,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61570,7 +78256,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61614,23 +78300,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61674,46 +78344,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61757,21 +78388,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -61815,7 +78432,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ // @ts-expect-error - TS2315 - Type 'Tree' is not generic. [k: string]: Tree; }`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ @@ -62031,7 +78648,7 @@ the available choices.`}]}}],raw:`Readonly<{ // NOTE(jeremy): This is referenced in the component. Verify if there's any // production data that still has this. coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},trackInteraction:{required:!0,tsType:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"TrackingExtraArgs"},name:"extraData"}],return:{name:"void"}}},description:""},isLastUsedWidget:{required:!0,tsType:{name:"boolean"},description:""},linterContext:{required:!0,tsType:{name:"LinterContextProps"},description:""},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},labelInterval:{required:!1,tsType:{name:"NonNullable",elements:[{name:"union",raw:'PerseusPlotterWidgetOptions["labelInterval"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"1",computed:!1}},picSize:{required:!1,tsType:{name:"NonNullable",elements:[{name:"union",raw:'PerseusPlotterWidgetOptions["picSize"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"40",computed:!1}},type:{defaultValue:{value:'"bar"',computed:!1},required:!1},labels:{defaultValue:{value:'["", ""]',computed:!1},required:!1},categories:{defaultValue:{value:'[""]',computed:!1},required:!1},scaleY:{defaultValue:{value:"1",computed:!1},required:!1},maxY:{defaultValue:{value:"10",computed:!1},required:!1},snapsPerLine:{defaultValue:{value:"2",computed:!1},required:!1},picBoxHeight:{defaultValue:{value:"48",computed:!1},required:!1},picUrl:{defaultValue:{value:'""',computed:!1},required:!1},plotDimensions:{defaultValue:{value:"[380, 300]",computed:!1},required:!1}}};function hp(t){const e=`/python-program/${t}/embedded`;return As(e)}const Ia=class Ia extends k.Component{render(){const e=hp(this.props.programID),r={height:this.props.height,width:"100%"},n=["allow-popups","allow-same-origin","allow-scripts","allow-top-navigation"].join(" ");return d(K,{style:pp.container,children:d("iframe",{sandbox:n,src:e,style:r,allowFullScreen:!0})})}};Ia.defaultProps={height:400};let Gn=Ia;const pp=j.StyleSheet.create({container:{margin:"auto",width:"100%"}}),cp={name:"python-program",displayName:"Python Program",widget:Gn};function es(t,e){return t.changed?{type:"points",earned:z.deepEq(t.options,e.correct)?1:0,total:1,message:null}:{type:"invalid",message:null}}const{shuffle:bp}=z,Na=class Na extends k.Component{constructor(){super(...arguments),this._isMounted=!1,this.state={changed:!1},this.handleChange=e=>{this._isMounted&&this.setState({changed:!0},()=>{setTimeout(()=>{this.props.onChange(e),this.props.trackInteraction()},0)})},this.moveOptionToIndex=(e,r)=>{this.refs.sortable.moveOptionToIndex(e,r)}}static validate(e,r){return es(e,r)}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1}getUserInput(){return{options:this.refs.sortable.getOptions(),changed:this.state.changed}}simpleValidate(e){return es(this.getUserInput(),e)}render(){const e=bp(this.props.correct,this.props.problemNum,!0),{apiOptions:r}=this.props,n=r.isMobile?8:5;return d("div",{className:"perseus-widget-sorter perseus-clearfix",children:d(nn,{options:e,layout:this.props.layout,margin:n,padding:this.props.padding,onChange:this.handleChange,linterContext:this.props.linterContext,ref:"sortable"})})}};Na.defaultProps={correct:[],layout:"horizontal",padding:!0,problemNum:0,onChange:function(){},linterContext:B};let Kn=Na;const vp={name:"sorter",displayName:"Sorter",widget:Kn,isLintable:!0};function rs(t,e,r){const n=function(y){return g.filter(y,function(m){return g.some(m,g.identity)})},a=n(e.answers),i=n(t);if(g.some(i,function(y){return g.some(y,function(m){return m===""})})||!i.length)return{type:"invalid",message:null};if(i.length!==a.length)return{type:"points",earned:0,total:1,message:null};const o=Lr.number.createValidatorFunctional;let l=null;return{type:"points",earned:g.every(a,function(y){for(let m=0;mthis.props.answers.length,this._getColumns=()=>this.props.answers[0].length,this.onValueChange=(e,r,n)=>{const a=g.map(this.props.answers,g.clone);a[e][r]=n.target?n.target.value:n,this.props.onChange({answers:a}),this.props.trackInteraction()},this.onHeaderChange=(e,r)=>{const n=this.props.headers.slice();n[e]=r.content,this.props.onChange({headers:n})},this._handleFocus=e=>{this.props.onFocus(e)},this._handleBlur=e=>{this.props.onBlur(e)},this.focus=()=>(this.focusInputPath(fp()),!0),this.focusInputPath=e=>{const r=Jr(e),n=this.refs[r];this.props.apiOptions.customKeypad?n.focus():V.findDOMNode(n).focus()},this.blurInputPath=e=>{const r=Jr(e),n=this.refs[r];this.props.apiOptions.customKeypad?n.blur():V.findDOMNode(n).blur()},this.getDOMNodeForPath=e=>{const r=Jr(e);return V.findDOMNode(this.refs[r])},this.getInputPaths=()=>{const e=this._getRows(),r=this._getColumns(),n=[];return g(e).times(a=>{g(r).times(i=>{const s=Or(a,i);n.push(s)})}),n},this.getGrammarTypeForPath=e=>"number",this.setInputValue=(e,r,n)=>{const a=wl(e),i=kl(e),s=g.map(this.props.answers,g.clone);s[a][i]=r,this.props.onChange({answers:s},n)}}static validate(e,r,n){return rs(e,r,n)}getUserInput(){return g.map(this.props.answers,g.clone)}simpleValidate(e){return rs(this.getUserInput(),e,this.context.strings)}render(){const e=this._getRows(),r=this._getColumns(),n=this.props.headers;let a,i;const s={};return this.props.apiOptions.customKeypad?(a=Fr,i={width:80},s.keypadElement=this.props.keypadElement):(a="input",i={}),q("table",{className:"perseus-widget-table-of-values non-markdown",children:[d("thead",{children:d("tr",{children:g.map(n,(o,l)=>this.props.editableHeaders?d("th",{children:d(this.props.Editor,{ref:"columnHeader"+l,apiOptions:this.props.apiOptions,content:o,widgetEnabled:!1,onChange:g.partial(this.onHeaderChange,l)})},l):d("th",{children:d(H,{content:o,linterContext:this.props.linterContext,strings:this.context.strings})},l))})}),d("tbody",{children:g(e).times(o=>d("tr",{children:g(r).times(l=>d("td",{children:d(a,{ref:Jr(Or(o,l)),type:"text",value:this.props.answers[o][l],disabled:this.props.apiOptions.readOnly,onFocus:g.partial(this._handleFocus,Or(o,l)),onBlur:g.partial(this._handleBlur,Or(o,l)),onChange:g.partial(this.onValueChange,o,l),style:i,...s})},l))},o))})]})}};_t.contextType=M,_t.defaultProps=function(){const n=g(4).times(function(){return z.stringArrayOfSize(1)});return{apiOptions:ge.defaults,headers:[""],editableHeaders:!1,rows:4,columns:1,answers:n,linterContext:B}}();let Bn=_t;const wp=t=>{const e=t.answers.length,r=t.answers[0].length,n=g(e).times(function(){return z.stringArrayOfSize(r)});return g.extend({},t,{answers:n})},kp={name:"table",displayName:"Table (deprecated - use markdown table instead)",accessible:!0,widget:Bn,transform:wp,hidden:!0,isLintable:!0},ts=1280,ns=720,qp="{host}/embed_video?slug={slug}&internal_video_only=1",Tp=/^https?:\/\//,Ap=/(khanacademy\.org|localhost)/,Rp=/(vimeo\.com)/,Ea=class Ea extends k.Component{constructor(){super(...arguments),this.getUserInput=()=>null,this.change=(...e)=>ne.apply(this,e)}static validate(){return G()}simpleValidate(){return G()}render(){const{InitialRequestUrl:e}=Te(),r=this.props.location;if(!r)return d("div",{});let n;if(Tp.test(r))n=r,Rp.test(n)&&(n.indexOf("?")===-1?n+="?dnt=1":n+="&dnt=1");else{n=qp.replace("{slug}",r);let a="https://www.khanacademy.org";Ap.test(e.host)&&(a=e.origin),n=n.replace("{host}",a)}return q(K,{children:[q(Iu,{width:ts,height:ns,children:[d(K,{style:St.srOnly,children:this.context.strings.videoWrapper}),d("iframe",{className:"perseus-video-widget",sandbox:"allow-same-origin allow-scripts",width:ts,height:ns,src:n,allowFullScreen:!0})]},r+this.props.alignment),d(Nu,{location:r})]})}};Ea.contextType=M;let Yn=Ea;const Op={name:"video",displayName:"Video",defaultAlignment:"block",supportedAlignments:["block","float-left","float-right","full-width"],widget:Yn},xp=[sd,md,bd,qd,hd,Dd,Od,jd,Vd,Hd,Bd,ty,fg,Cg,Sg,Eg,th,Oh,Fh,Dh,dp,qs,yp,hu,gp,cp,vp,kp,Op,pd],_c=[...id,...xp],Ft=class Ft extends k.Component{constructor(e){super(e),this.sectionRenderers=[],this._handleFocusChange=(r,n)=>{r?this._setCurrentFocus(r):this._onRendererBlur(n)},this._setCurrentFocus=r=>{const{keypadElement:n,apiOptions:a}=this.props,{isMobile:i}=a,s=this._currentFocus;this._currentFocus=r;let o=!1,l;if(this._currentFocus){const[y,...m]=this._currentFocus;o=this.sectionRenderers[y].getInputPaths().some(p=>z.inputPathsEqual(p,m)),l=this.sectionRenderers[y].getDOMNodeForPath(m)}const{onFocusChange:u}=this.props.apiOptions;u&&setTimeout(()=>{const y=n==null?void 0:n.getDOMNode(),m=y&&o?y.getBoundingClientRect().height:0;u(this._currentFocus,s,m,o?l:null)},0),n&&i&&(o?n.activate():n.dismiss())},this._onRendererBlur=r=>{const n=this._currentFocus;z.inputPathsEqual(r,n)&&setTimeout(()=>{z.inputPathsEqual(this._currentFocus,n)&&this._setCurrentFocus(null)})},this.blur=()=>{if(this._currentFocus){const[r,...n]=this._currentFocus;this.sectionRenderers[r].blurPath(n)}},this._sections=()=>{const r=Array.isArray(this.props.json)?this.props.json:[this.props.json];if(Te().JIPT.useJIPT){const n=[];for(const a of r)Nl.parseToArray(a.content).forEach(i=>{n.push({...a,content:i})});return n}return r}}componentDidMount(){this._currentFocus=null}shouldComponentUpdate(e){return e!==this.props}render(){const e={...ge.defaults,...this.props.apiOptions,isArticle:!0},r=We({"framework-perseus":!0,"perseus-article":!0,[_e.MOBILE]:e.isMobile}),n=this._sections().map((a,i)=>d("div",{className:"clearfix",children:k.createElement(H,{...a,ref:s=>{s&&(this.sectionRenderers[i]=s)},key:i,key_:i,keypadElement:this.props.keypadElement,apiOptions:{...e,onFocusChange:(s,o)=>{this._handleFocusChange(s&&[i].concat(s),o&&[i].concat(o))}},linterContext:El(this.props.linterContext,"article"),legacyPerseusLint:this.props.legacyPerseusLint,strings:this.context.strings})},i));return d("div",{className:r,children:d(_l.Provider,{value:this.props.dependencies,children:n})})}};Ft.contextType=M,Ft.defaultProps={apiOptions:ge.defaults,useNewStyles:!1,linterContext:B};let Xn=Ft;Xn.__docgenInfo={description:"",methods:[{name:"_handleFocusChange",docblock:null,modifiers:[],params:[{name:"newFocusPath",optional:!1,type:null},{name:"oldFocusPath",optional:!1,type:null}],returns:null},{name:"_setCurrentFocus",docblock:null,modifiers:[],params:[{name:"newFocusPath",optional:!1,type:null}],returns:null},{name:"_onRendererBlur",docblock:null,modifiers:[],params:[{name:"blurPath",optional:!1,type:null}],returns:null},{name:"blur",docblock:null,modifiers:[],params:[],returns:null},{name:"_sections",docblock:null,modifiers:[],params:[],returns:null}],displayName:"ArticleRenderer",props:{apiOptions:{defaultValue:{value:`{ +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},trackInteraction:{required:!0,tsType:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"TrackingExtraArgs"},name:"extraData"}],return:{name:"void"}}},description:""},isLastUsedWidget:{required:!0,tsType:{name:"boolean"},description:""},linterContext:{required:!0,tsType:{name:"LinterContextProps"},description:""},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""},labelInterval:{required:!1,tsType:{name:"NonNullable",elements:[{name:"union",raw:'PerseusPlotterWidgetOptions["labelInterval"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"1",computed:!1}},picSize:{required:!1,tsType:{name:"NonNullable",elements:[{name:"union",raw:'PerseusPlotterWidgetOptions["picSize"]'}],raw:'NonNullable'},description:"",defaultValue:{value:"40",computed:!1}},type:{defaultValue:{value:'"bar"',computed:!1},required:!1},labels:{defaultValue:{value:'["", ""]',computed:!1},required:!1},categories:{defaultValue:{value:'[""]',computed:!1},required:!1},scaleY:{defaultValue:{value:"1",computed:!1},required:!1},maxY:{defaultValue:{value:"10",computed:!1},required:!1},snapsPerLine:{defaultValue:{value:"2",computed:!1},required:!1},picBoxHeight:{defaultValue:{value:"48",computed:!1},required:!1},picUrl:{defaultValue:{value:'""',computed:!1},required:!1},plotDimensions:{defaultValue:{value:"[380, 300]",computed:!1},required:!1}}};function Yh(t){const e=`/python-program/${t}/embedded`;return Ws(e)}const Wa=class Wa extends v.Component{getDOMNodeForPath(e){return null}render(){const e=Yh(this.props.programID),r={height:this.props.height,width:"100%"},n=["allow-popups","allow-same-origin","allow-scripts","allow-top-navigation"].join(" ");return d(G,{style:Qh.container,children:d("iframe",{sandbox:n,src:e,style:r,allowFullScreen:!0})})}};Wa.defaultProps={height:400};let $n=Wa;const Qh=x.StyleSheet.create({container:{margin:"auto",width:"100%"}}),Jh={name:"python-program",displayName:"Python Program",widget:$n};function Yi(t,e){return t.changed?{type:"points",earned:z.deepEq(t.options,e.correct)?1:0,total:1,message:null}:{type:"invalid",message:null}}const{shuffle:Zh}=z,Ca=class Ca extends v.Component{constructor(){super(...arguments),this._isMounted=!1,this.state={changed:!1},this.handleChange=e=>{this._isMounted&&this.setState({changed:!0},()=>{setTimeout(()=>{this.props.onChange(e),this.props.trackInteraction()},0)})},this.moveOptionToIndex=(e,r)=>{this.refs.sortable.moveOptionToIndex(e,r)}}static validate(e,r){return Yi(e,r)}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1}getUserInput(){return{options:this.refs.sortable.getOptions(),changed:this.state.changed}}simpleValidate(e){return Yi(this.getUserInput(),e)}render(){const e=Zh(this.props.correct,this.props.problemNum,!0),{apiOptions:r}=this.props,n=r.isMobile?8:5;return d("div",{className:"perseus-widget-sorter perseus-clearfix",children:d(en,{options:e,layout:this.props.layout,margin:n,padding:this.props.padding,onChange:this.handleChange,linterContext:this.props.linterContext,ref:"sortable"})})}};Ca.defaultProps={correct:[],layout:"horizontal",padding:!0,problemNum:0,onChange:function(){},linterContext:B};let Hn=Ca;const ep={name:"sorter",displayName:"Sorter",widget:Hn,isLintable:!0};function Qi(t,e,r){const n=function(y){return g.filter(y,function(m){return g.some(m,g.identity)})},a=n(e.answers),i=n(t);if(g.some(i,function(y){return g.some(y,function(m){return m===""})})||!i.length)return{type:"invalid",message:null};if(i.length!==a.length)return{type:"points",earned:0,total:1,message:null};const o=Lr.number.createValidatorFunctional;let l=null;return{type:"points",earned:g.every(a,function(y){for(let m=0;mthis.props.answers.length,this._getColumns=()=>this.props.answers[0].length,this.onValueChange=(e,r,n)=>{const a=g.map(this.props.answers,g.clone);a[e][r]=n.target?n.target.value:n,this.props.onChange({answers:a}),this.props.trackInteraction()},this.onHeaderChange=(e,r)=>{const n=this.props.headers.slice();n[e]=r.content,this.props.onChange({headers:n})},this._handleFocus=e=>{this.props.onFocus(e)},this._handleBlur=e=>{this.props.onBlur(e)},this.focus=()=>(this.focusInputPath(rp()),!0),this.focusInputPath=e=>{const r=Yr(e),n=this.refs[r];this.props.apiOptions.customKeypad?n.focus():V.findDOMNode(n).focus()},this.blurInputPath=e=>{const r=Yr(e),n=this.refs[r];this.props.apiOptions.customKeypad?n.blur():V.findDOMNode(n).blur()},this.getInputPaths=()=>{const e=this._getRows(),r=this._getColumns(),n=[];return g(e).times(a=>{g(r).times(i=>{const s=Ar(a,i);n.push(s)})}),n},this.getGrammarTypeForPath=e=>"number",this.setInputValue=(e,r,n)=>{const a=pl(e),i=cl(e),s=g.map(this.props.answers,g.clone);s[a][i]=r,this.props.onChange({answers:s},n)}}static validate(e,r,n){return Qi(e,r,n)}getUserInput(){return g.map(this.props.answers,g.clone)}simpleValidate(e){return Qi(this.getUserInput(),e,this.context.strings)}getDOMNodeForPath(e){const r=Yr(e);return V.findDOMNode(this.refs[r])}render(){const e=this._getRows(),r=this._getColumns(),n=this.props.headers;let a,i;const s={};return this.props.apiOptions.customKeypad?(a=Pr,i={width:80},s.keypadElement=this.props.keypadElement):(a="input",i={}),f("table",{className:"perseus-widget-table-of-values non-markdown",children:[d("thead",{children:d("tr",{children:g.map(n,(o,l)=>this.props.editableHeaders?d("th",{children:d(this.props.Editor,{ref:"columnHeader"+l,apiOptions:this.props.apiOptions,content:o,widgetEnabled:!1,onChange:g.partial(this.onHeaderChange,l)})},l):d("th",{children:d($,{content:o,linterContext:this.props.linterContext,strings:this.context.strings})},l))})}),d("tbody",{children:g(e).times(o=>d("tr",{children:g(r).times(l=>d("td",{children:d(a,{ref:Yr(Ar(o,l)),type:"text",value:this.props.answers[o][l],disabled:this.props.apiOptions.readOnly,onFocus:g.partial(this._handleFocus,Ar(o,l)),onBlur:g.partial(this._handleBlur,Ar(o,l)),onChange:g.partial(this.onValueChange,o,l),style:i,...s})},l))},o))})]})}};zt.contextType=S,zt.defaultProps=function(){const n=g(4).times(function(){return z.stringArrayOfSize(1)});return{apiOptions:ye.defaults,headers:[""],editableHeaders:!1,rows:4,columns:1,answers:n,linterContext:B}}();let Gn=zt;const tp=t=>{const e=t.answers.length,r=t.answers[0].length,n=g(e).times(function(){return z.stringArrayOfSize(r)});return g.extend({},t,{answers:n})},np={name:"table",displayName:"Table (deprecated - use markdown table instead)",accessible:!0,widget:Gn,transform:tp,hidden:!0,isLintable:!0},Ji=1280,Zi=720,ap="{host}/embed_video?slug={slug}&internal_video_only=1",ip=/^https?:\/\//,sp=/(khanacademy\.org|localhost)/,op=/(vimeo\.com)/,Ia=class Ia extends v.Component{constructor(){super(...arguments),this.getUserInput=()=>null,this.change=(...e)=>re.apply(this,e)}static validate(){return H()}simpleValidate(){return H()}render(){const{InitialRequestUrl:e}=fe(),r=this.props.location;if(!r)return d("div",{});let n;if(ip.test(r))n=r,op.test(n)&&(n.indexOf("?")===-1?n+="?dnt=1":n+="&dnt=1");else{n=ap.replace("{slug}",r);let a="https://www.khanacademy.org";sp.test(e.host)&&(a=e.origin),n=n.replace("{host}",a)}return f(G,{children:[f(xu,{width:Ji,height:Zi,children:[d(G,{style:_t.srOnly,children:this.context.strings.videoWrapper}),d("iframe",{className:"perseus-video-widget",sandbox:"allow-same-origin allow-scripts",width:Ji,height:Zi,src:n,allowFullScreen:!0})]},r+this.props.alignment),d(ju,{location:r})]})}};Ia.contextType=S;let Bn=Ia;const lp={name:"video",displayName:"Video",defaultAlignment:"block",supportedAlignments:["block","float-left","float-right","full-width"],widget:Bn},up=[Ad,Cd,Ld,Md,Nd,sy,$d,Gd,ly,uy,my,wy,Pg,Kg,nh,Qg,sh,Ch,Dh,Gh,bd,xs,Bh,du,Xh,Jh,ep,np,lp,Ed],vc=[...Td,...up],Lt=class Lt extends v.Component{constructor(e){super(e),this.sectionRenderers=[],this._handleFocusChange=(r,n)=>{r?this._setCurrentFocus(r):this._onRendererBlur(n)},this._setCurrentFocus=r=>{const{keypadElement:n,apiOptions:a}=this.props,{isMobile:i}=a,s=this._currentFocus;this._currentFocus=r;let o=!1,l;if(this._currentFocus){const[y,...m]=this._currentFocus;o=this.sectionRenderers[y].getInputPaths().some(p=>z.inputPathsEqual(p,m)),l=this.sectionRenderers[y].getDOMNodeForPath(m)}const{onFocusChange:u}=this.props.apiOptions;u&&setTimeout(()=>{const y=n==null?void 0:n.getDOMNode(),m=y&&o?y.getBoundingClientRect().height:0;u(this._currentFocus,s,m,o?l:null)},0),n&&i&&(o?n.activate():n.dismiss())},this._onRendererBlur=r=>{const n=this._currentFocus;z.inputPathsEqual(r,n)&&setTimeout(()=>{z.inputPathsEqual(this._currentFocus,n)&&this._setCurrentFocus(null)})},this.blur=()=>{if(this._currentFocus){const[r,...n]=this._currentFocus;this.sectionRenderers[r].blurPath(n)}},this._sections=()=>{const r=Array.isArray(this.props.json)?this.props.json:[this.props.json];if(fe().JIPT.useJIPT){const n=[];for(const a of r)xl.parseToArray(a.content).forEach(i=>{n.push({...a,content:i})});return n}return r}}componentDidMount(){this._currentFocus=null}shouldComponentUpdate(e){return e!==this.props}render(){const e={...ye.defaults,...this.props.apiOptions,isArticle:!0},r=Re({"framework-perseus":!0,"perseus-article":!0,[ze.MOBILE]:e.isMobile}),n=this._sections().map((a,i)=>d("div",{className:"clearfix",children:v.createElement($,{...a,ref:s=>{s&&(this.sectionRenderers[i]=s)},key:i,key_:i,keypadElement:this.props.keypadElement,apiOptions:{...e,onFocusChange:(s,o)=>{this._handleFocusChange(s&&[i].concat(s),o&&[i].concat(o))}},linterContext:jl(this.props.linterContext,"article"),legacyPerseusLint:this.props.legacyPerseusLint,strings:this.context.strings})},i));return d("div",{className:r,children:d(Nl.Provider,{value:this.props.dependencies,children:n})})}};Lt.contextType=S,Lt.defaultProps={apiOptions:ye.defaults,useNewStyles:!1,linterContext:B};let Kn=Lt;Kn.__docgenInfo={description:"",methods:[{name:"_handleFocusChange",docblock:null,modifiers:[],params:[{name:"newFocusPath",optional:!1,type:null},{name:"oldFocusPath",optional:!1,type:null}],returns:null},{name:"_setCurrentFocus",docblock:null,modifiers:[],params:[{name:"newFocusPath",optional:!1,type:null}],returns:null},{name:"_onRendererBlur",docblock:null,modifiers:[],params:[{name:"blurPath",optional:!1,type:null}],returns:null},{name:"blur",docblock:null,modifiers:[],params:[],returns:null},{name:"_sections",docblock:null,modifiers:[],params:[],returns:null}],displayName:"ArticleRenderer",props:{apiOptions:{defaultValue:{value:`{ isArticle: false, isMobile: false, onFocusChange: function () {}, @@ -62052,4 +78669,4 @@ the available choices.`}]}}],raw:`Readonly<{ canScrollPage: false, crossOutEnabled: false, editorChangeDelay: 0, -}`,computed:!1},required:!1},useNewStyles:{defaultValue:{value:"false",computed:!1},required:!1},linterContext:{defaultValue:{value:"PerseusLinter.linterContextDefault",computed:!0},required:!1}}};export{Xn as A,sd as C,lr as E,Dd as G,Ec as I,Sg as M,lt as N,Pc as P,Bo as S,kp as T,Zg as a,tr as b,ne as c,Pu as d,wg as e,$u as f,Lc as g,Gs as h,Sm as i,zm as j,Nm as k,Q as l,_m as m,Lm as n,Fm as o,Ic as p,Pm as q,Em as r,Ei as s,Go as t,fg as u,Nc as v,_c as w,gp as x,zc as y}; +}`,computed:!1},required:!1},useNewStyles:{defaultValue:{value:"false",computed:!1},required:!1},linterContext:{defaultValue:{value:"PerseusLinter.linterContextDefault",computed:!0},required:!1}}};export{Kn as A,Ad as C,sr as E,sy as G,hc as I,nh as M,st as N,pc as P,Zo as S,np as T,er as a,Fg as b,re as c,Cu as d,Pu as e,Qs as f,bc as g,ng as h,Zm as i,Ym as j,rg as k,Y as l,eg as m,tg as n,Jm as o,mc as p,Qm as q,zi as r,Pg as s,Qo as t,gc as u,Xh as v,vc as w,cc as x}; diff --git a/assets/article-renderer.stories-qJVrh-Ez.js b/assets/article-renderer.stories-7DyugAbN.js similarity index 84% rename from assets/article-renderer.stories-qJVrh-Ez.js rename to assets/article-renderer.stories-7DyugAbN.js index 2fc9ba528c..6d67cb69d0 100644 --- a/assets/article-renderer.stories-qJVrh-Ez.js +++ b/assets/article-renderer.stories-7DyugAbN.js @@ -1,4 +1,4 @@ -import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{a as _}from"./mobile-keypad-hKjeQGNp.js";import{a as j}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{s as p}from"./test-dependencies-UUeUFXqw.js";import{s as k,m as M,p as W,a as T,b as D}from"./article-renderer.testdata-spwNviYy.js";import{A as m}from"./article-renderer-6f7Dak4j.js";import{T as b}from"./test-keypad-context-wrapper-UieRILfg.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";import"./renderer-vBOYiNCS.js";import"./version-akiLXZts.js";import"./util-XcxTwqb0.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./prop-types-3bOVFRDQ.js";import"./enums-x5qaTru7.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";const Kr={title:"Perseus/Renderers/Article Renderer",argTypes:{useNewStyles:{control:"boolean"}}},t=e=>r(m,{json:k,dependencies:p,useNewStyles:e.useNewStyles}),o=e=>r(m,{json:M,dependencies:p,useNewStyles:e.useNewStyles}),i=({useNewStyles:e})=>r(m,{json:W,dependencies:p,useNewStyles:e}),s=({useNewStyles:e})=>r(b,{children:r(_.Consumer,{children:({keypadElement:a,setRenderer:c})=>r(m,{ref:d=>{c(d)},json:T,dependencies:p,useNewStyles:e,apiOptions:{isMobile:!0,customKeypad:!0,onFocusChange:j("onFocusChange")},keypadElement:a})})}),n=({useNewStyles:e})=>r(b,{children:r(_.Consumer,{children:({keypadElement:a,setRenderer:c})=>r(m,{ref:d=>{c(d)},json:D,dependencies:p,useNewStyles:e,apiOptions:{isMobile:!0,customKeypad:!0},keypadElement:a})})});t.__docgenInfo={description:"",methods:[],displayName:"ASingleSectionArticle"};o.__docgenInfo={description:"",methods:[],displayName:"BMultiSectionArticle"};i.__docgenInfo={description:"",methods:[],displayName:"PassageArticle"};s.__docgenInfo={description:"",methods:[],displayName:"ExpressionArticle"};n.__docgenInfo={description:"",methods:[],displayName:"MultiSectionedExpressionArticle"};var l,u,y;t.parameters={...t.parameters,docs:{...(l=t.parameters)==null?void 0:l.docs,source:{originalSource:`(args: { +import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{a as _}from"./mobile-keypad-hKjeQGNp.js";import{a as j}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{s as p}from"./test-dependencies-OZugV_HD.js";import{s as k,m as M,p as W,a as T,b as D}from"./article-renderer.testdata-spwNviYy.js";import{A as m}from"./article-renderer-TMdCDA85.js";import{T as b}from"./test-keypad-context-wrapper-UieRILfg.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";import"./renderer-hPmI_Chp.js";import"./version-akiLXZts.js";import"./util-YrNvlCNO.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./prop-types-3bOVFRDQ.js";import"./enums-x5qaTru7.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";const Kr={title:"Perseus/Renderers/Article Renderer",argTypes:{useNewStyles:{control:"boolean"}}},t=e=>r(m,{json:k,dependencies:p,useNewStyles:e.useNewStyles}),o=e=>r(m,{json:M,dependencies:p,useNewStyles:e.useNewStyles}),i=({useNewStyles:e})=>r(m,{json:W,dependencies:p,useNewStyles:e}),s=({useNewStyles:e})=>r(b,{children:r(_.Consumer,{children:({keypadElement:a,setRenderer:c})=>r(m,{ref:d=>{c(d)},json:T,dependencies:p,useNewStyles:e,apiOptions:{isMobile:!0,customKeypad:!0,onFocusChange:j("onFocusChange")},keypadElement:a})})}),n=({useNewStyles:e})=>r(b,{children:r(_.Consumer,{children:({keypadElement:a,setRenderer:c})=>r(m,{ref:d=>{c(d)},json:D,dependencies:p,useNewStyles:e,apiOptions:{isMobile:!0,customKeypad:!0},keypadElement:a})})});t.__docgenInfo={description:"",methods:[],displayName:"ASingleSectionArticle"};o.__docgenInfo={description:"",methods:[],displayName:"BMultiSectionArticle"};i.__docgenInfo={description:"",methods:[],displayName:"PassageArticle"};s.__docgenInfo={description:"",methods:[],displayName:"ExpressionArticle"};n.__docgenInfo={description:"",methods:[],displayName:"MultiSectionedExpressionArticle"};var l,u,y;t.parameters={...t.parameters,docs:{...(l=t.parameters)==null?void 0:l.docs,source:{originalSource:`(args: { useNewStyles; }): React.ReactElement => { return ; diff --git a/assets/base-radio-ffaiqOwN.js b/assets/base-radio-TdBv-OLd.js similarity index 99% rename from assets/base-radio-ffaiqOwN.js rename to assets/base-radio-TdBv-OLd.js index 8af315fedb..704e93df24 100644 --- a/assets/base-radio-ffaiqOwN.js +++ b/assets/base-radio-TdBv-OLd.js @@ -1,4 +1,4 @@ -import{a as X,j as b}from"./jsx-runtime-FVsy8kgq.js";import{l as v}from"./index-awljIyHI.js";import{c as C}from"./index-dnMhQZ-1.js";import{r as x}from"./index-TT1qJ6UJ.js";import{R as M}from"./index-7vsPyIck.js";import{_ as Z}from"./jquery-yG1GhClm.js";import{u as ee}from"./i18n-context-hxuRe8oU.js";import{C as j}from"./perseus-api-mOiZT07d.js";import{h as re,r as N,n as z,s as U}from"./constants-I_nlPaPx.js";import{m as E}from"./media-queries-MaBBbpNq.js";import{s as te}from"./shared-3pf9YZIg.js";import{U as ne}from"./util-XcxTwqb0.js";import{C as ae}from"./choice-E4eyMygy.js";import{C as ie}from"./choice-none-above-tmJoP6pY.js";typeof HTMLElement<"u"&&!HTMLElement.prototype.scrollTo&&(HTMLElement.prototype.scrollTo=function(e,n){this.scrollLeft=e,this.scrollTop=n});const S=(e,n)=>{typeof e.scrollTo=="function"?e.scrollTo(0,n):"scrollTop"in e&&(e.scrollTop=n)},se=(e,n,i=0,t)=>{const o=e===window?window.pageYOffset:e.scrollTop,d=n,h=d-o,u=17,q=i/u;let p=0;const w=setInterval(function(){if(pe===document.body||e==null?window:e.scrollHeight>e.clientHeight?e:D(e.parentElement),oe=750,le=(e,n)=>{setTimeout(()=>{const i=D(e),t=e.getBoundingClientRect(),o=i===window?{top:0,bottom:window.innerHeight}:i.getBoundingClientRect();let d=0;const h=i===window?window.scrollY:i.scrollTop;if(t.bottom>o.bottom){let u=t.bottom-o.bottom;t.top+u{if(n.canScrollPage&&p&&i&&!T.current){const r=t.findIndex(a=>a.checked);if(r>=0){const a=f.current[r],l=M.findDOMNode(a.current);l&&le(l)}}T.current=i},[n,t,p,i]);function L(r,a){const{multipleSelect:c,choices:l,onChange:A}=e;let m;a.checked&&!c?m=l.map(g=>!1):m=l.map(g=>g.checked);const O=l.map(g=>g.crossedOut);m[r]=a.checked,O[r]=a.crossedOut,A({checked:m,crossedOut:O})}w==null||w(r=>{const a=f.current[r||0],l=M.findDOMNode(a.current);if(l)l.focus();else return!1;return!0});const R=!!i,I=n.isMobile,V=t[0].highlighted,G=t[t.length-1].highlighted,K=C("perseus-widget-radio",!o&&"perseus-rendered-radio",v.css(s.radio,s.responsiveRadioContainer,V&&I&&s.radioContainerFirstHighlighted,G&&I&&s.radioContainerLastHighlighted)),B=C("instructions",v.css(s.instructions,I&&s.instructionsMobile)),_=de(d,u,q,W),Y=v.css(s.responsiveFieldset),Q=X("fieldset",{className:`perseus-widget-radio-fieldset ${Y}`,children:[b("legend",{className:"perseus-sr-only",children:_}),b("div",{className:B,"aria-hidden":"true",children:_}),b("ul",{className:K,style:{listStyle:"none"},children:t.map((r,a)=>{let c=ae;const l=x.createRef();f.current[a]=l;const A={apiOptions:n,multipleSelect:d,checked:r.checked,crossedOut:r.crossedOut,previouslyAnswered:r.previouslyAnswered,reviewMode:R,correct:r.correct,rationale:r.rationale,content:r.content,disabled:n.readOnly||r.disabled,showCorrectness:R||!!r.showCorrectness,showRationale:r.hasRationale&&(R||r.showRationale),pos:a,onChange:y=>{o||L(a,y)}};r.isNoneOfTheAbove&&(c=ie,Z.extend(A,{showContent:r.revealNoneOfTheAbove}));const m=t[a+1],O=!!m&&m.highlighted,g=y=>v.css(te.aboveScratchpad,s.item,s.responsiveItem,y&&s.selectedItem,y&&r.highlighted&&s.aboveBackdrop,y&&r.highlighted&&n.isMobile&&s.aboveBackdropMobile,O&&n.isMobile&&s.nextHighlighted);g(!0);let P;R&&i&&(P=i.choices[a].correct?j.CORRECT:j.INCORRECT);const J=C(g(r.checked),j.RADIO.OPTION,r.checked&&j.RADIO.SELECTED,P);let $=null,F;return o&&(F=y=>{let k=y.target;for(;k&&k!==$;){if(k.getAttribute("data-is-radio-icon")){L(a,{checked:!r.checked,crossedOut:r.crossedOut});return}k=k.parentNode}}),b("li",{ref:y=>$=y,className:J,onClick:F,onTouchStart:h?void 0:ue,children:b(c,{...A,ref:l})},a)})})]});return b("div",{className:v.css(s.responsiveContainer),children:Q})};H.defaultProps={editMode:!1,multipleSelect:!1};const s=v.StyleSheet.create({instructions:{display:"block",color:re,fontSize:14,lineHeight:1.25,fontFamily:"inherit",fontStyle:"normal",fontWeight:"bold",marginBottom:16},instructionsMobile:{fontSize:18,[E.smOrSmaller]:{fontSize:16},[E.xl]:{fontSize:20}},radio:{padding:0},responsiveRadioContainer:{borderBottom:`1px solid ${N}`,borderTop:`1px solid ${N}`,width:"auto",[E.smOrSmaller]:{marginLeft:z,marginRight:z}},radioContainerFirstHighlighted:{borderTop:"1px solid rgba(0, 0, 0, 0)"},radioContainerLastHighlighted:{borderBottom:"1px solid rgba(0, 0, 0, 0)"},item:{marginLeft:20},responsiveItem:{marginLeft:0,padding:0,":not(:last-child)":{borderBottom:`1px solid ${N}`}},selectedItem:{background:"white"},aboveBackdrop:{position:"relative",zIndex:1062},aboveBackdropMobile:{boxShadow:"0 0 4px 0 rgba(0, 0, 0, 0.2),0 0 2px 0 rgba(0, 0, 0, 0.1)",":not(:last-child)":{borderBottom:"1px solid rgba(0, 0, 0, 0)"}},nextHighlighted:{":not(:last-child)":{borderBottom:"1px solid rgba(0, 0, 0, 0)"}},responsiveContainer:{overflow:"auto",marginLeft:z,paddingLeft:U},responsiveFieldset:{paddingRight:U,minWidth:"auto"}});H.__docgenInfo={description:"",methods:[],displayName:"BaseRadio",props:{apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ +import{a as X,j as b}from"./jsx-runtime-FVsy8kgq.js";import{l as v}from"./index-awljIyHI.js";import{c as C}from"./index-dnMhQZ-1.js";import{r as x}from"./index-TT1qJ6UJ.js";import{R as M}from"./index-7vsPyIck.js";import{_ as Z}from"./jquery-yG1GhClm.js";import{u as ee}from"./i18n-context-hxuRe8oU.js";import{C as j}from"./perseus-api-mOiZT07d.js";import{h as re,r as N,n as z,s as U}from"./constants-I_nlPaPx.js";import{m as E}from"./media-queries-MaBBbpNq.js";import{s as te}from"./shared-3pf9YZIg.js";import{U as ne}from"./util-YrNvlCNO.js";import{C as ae}from"./choice-E4eyMygy.js";import{C as ie}from"./choice-none-above-HXEAXx7K.js";typeof HTMLElement<"u"&&!HTMLElement.prototype.scrollTo&&(HTMLElement.prototype.scrollTo=function(e,n){this.scrollLeft=e,this.scrollTop=n});const S=(e,n)=>{typeof e.scrollTo=="function"?e.scrollTo(0,n):"scrollTop"in e&&(e.scrollTop=n)},se=(e,n,i=0,t)=>{const o=e===window?window.pageYOffset:e.scrollTop,d=n,h=d-o,u=17,q=i/u;let p=0;const w=setInterval(function(){if(pe===document.body||e==null?window:e.scrollHeight>e.clientHeight?e:D(e.parentElement),oe=750,le=(e,n)=>{setTimeout(()=>{const i=D(e),t=e.getBoundingClientRect(),o=i===window?{top:0,bottom:window.innerHeight}:i.getBoundingClientRect();let d=0;const h=i===window?window.scrollY:i.scrollTop;if(t.bottom>o.bottom){let u=t.bottom-o.bottom;t.top+u{if(n.canScrollPage&&p&&i&&!T.current){const r=t.findIndex(a=>a.checked);if(r>=0){const a=f.current[r],l=M.findDOMNode(a.current);l&&le(l)}}T.current=i},[n,t,p,i]);function L(r,a){const{multipleSelect:c,choices:l,onChange:A}=e;let m;a.checked&&!c?m=l.map(g=>!1):m=l.map(g=>g.checked);const O=l.map(g=>g.crossedOut);m[r]=a.checked,O[r]=a.crossedOut,A({checked:m,crossedOut:O})}w==null||w(r=>{const a=f.current[r||0],l=M.findDOMNode(a.current);if(l)l.focus();else return!1;return!0});const R=!!i,I=n.isMobile,V=t[0].highlighted,G=t[t.length-1].highlighted,K=C("perseus-widget-radio",!o&&"perseus-rendered-radio",v.css(s.radio,s.responsiveRadioContainer,V&&I&&s.radioContainerFirstHighlighted,G&&I&&s.radioContainerLastHighlighted)),B=C("instructions",v.css(s.instructions,I&&s.instructionsMobile)),_=de(d,u,q,W),Y=v.css(s.responsiveFieldset),Q=X("fieldset",{className:`perseus-widget-radio-fieldset ${Y}`,children:[b("legend",{className:"perseus-sr-only",children:_}),b("div",{className:B,"aria-hidden":"true",children:_}),b("ul",{className:K,style:{listStyle:"none"},children:t.map((r,a)=>{let c=ae;const l=x.createRef();f.current[a]=l;const A={apiOptions:n,multipleSelect:d,checked:r.checked,crossedOut:r.crossedOut,previouslyAnswered:r.previouslyAnswered,reviewMode:R,correct:r.correct,rationale:r.rationale,content:r.content,disabled:n.readOnly||r.disabled,showCorrectness:R||!!r.showCorrectness,showRationale:r.hasRationale&&(R||r.showRationale),pos:a,onChange:y=>{o||L(a,y)}};r.isNoneOfTheAbove&&(c=ie,Z.extend(A,{showContent:r.revealNoneOfTheAbove}));const m=t[a+1],O=!!m&&m.highlighted,g=y=>v.css(te.aboveScratchpad,s.item,s.responsiveItem,y&&s.selectedItem,y&&r.highlighted&&s.aboveBackdrop,y&&r.highlighted&&n.isMobile&&s.aboveBackdropMobile,O&&n.isMobile&&s.nextHighlighted);g(!0);let P;R&&i&&(P=i.choices[a].correct?j.CORRECT:j.INCORRECT);const J=C(g(r.checked),j.RADIO.OPTION,r.checked&&j.RADIO.SELECTED,P);let $=null,F;return o&&(F=y=>{let k=y.target;for(;k&&k!==$;){if(k.getAttribute("data-is-radio-icon")){L(a,{checked:!r.checked,crossedOut:r.crossedOut});return}k=k.parentNode}}),b("li",{ref:y=>$=y,className:J,onClick:F,onTouchStart:h?void 0:ue,children:b(c,{...A,ref:l})},a)})})]});return b("div",{className:v.css(s.responsiveContainer),children:Q})};H.defaultProps={editMode:!1,multipleSelect:!1};const s=v.StyleSheet.create({instructions:{display:"block",color:re,fontSize:14,lineHeight:1.25,fontFamily:"inherit",fontStyle:"normal",fontWeight:"bold",marginBottom:16},instructionsMobile:{fontSize:18,[E.smOrSmaller]:{fontSize:16},[E.xl]:{fontSize:20}},radio:{padding:0},responsiveRadioContainer:{borderBottom:`1px solid ${N}`,borderTop:`1px solid ${N}`,width:"auto",[E.smOrSmaller]:{marginLeft:z,marginRight:z}},radioContainerFirstHighlighted:{borderTop:"1px solid rgba(0, 0, 0, 0)"},radioContainerLastHighlighted:{borderBottom:"1px solid rgba(0, 0, 0, 0)"},item:{marginLeft:20},responsiveItem:{marginLeft:0,padding:0,":not(:last-child)":{borderBottom:`1px solid ${N}`}},selectedItem:{background:"white"},aboveBackdrop:{position:"relative",zIndex:1062},aboveBackdropMobile:{boxShadow:"0 0 4px 0 rgba(0, 0, 0, 0.2),0 0 2px 0 rgba(0, 0, 0, 0.1)",":not(:last-child)":{borderBottom:"1px solid rgba(0, 0, 0, 0)"}},nextHighlighted:{":not(:last-child)":{borderBottom:"1px solid rgba(0, 0, 0, 0)"}},responsiveContainer:{overflow:"auto",marginLeft:z,paddingLeft:U},responsiveFieldset:{paddingRight:U,minWidth:"auto"}});H.__docgenInfo={description:"",methods:[],displayName:"BaseRadio",props:{apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ isArticle?: boolean; onFocusChange?: ( newFocusPath: FocusPath, diff --git a/assets/base-radio.stories-FR_3w-BQ.js b/assets/base-radio.stories-Nmnh2CE6.js similarity index 94% rename from assets/base-radio.stories-FR_3w-BQ.js rename to assets/base-radio.stories-Nmnh2CE6.js index bf8b22e7be..992cbb8022 100644 --- a/assets/base-radio.stories-FR_3w-BQ.js +++ b/assets/base-radio.stories-Nmnh2CE6.js @@ -1,4 +1,4 @@ -import{j as n}from"./jsx-runtime-FVsy8kgq.js";import{a as z}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{B as i}from"./base-radio-ffaiqOwN.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./index-awljIyHI.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./jquery-yG1GhClm.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./constants-I_nlPaPx.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./renderer-vBOYiNCS.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";function o(t){return{...{checked:!1,crossedOut:!1,content:"",rationale:"",hasRationale:!1,showRationale:!1,showCorrectness:!1,correct:!1,isNoneOfTheAbove:!1,highlighted:!1,previouslyAnswered:!1,revealNoneOfTheAbove:!1,disabled:!1},...t}}const Je={title:"Perseus/Widgets/Radio/Base Radio",args:{multipleSelect:!1,editMode:!1,countChoices:!1}},c={apiOptions:{},choices:[o({content:"Content 1"}),o({content:"Content 2"}),o({content:"Content 3",correct:!0}),o({isNoneOfTheAbove:!0})],deselectEnabled:!1,editMode:!1,labelWrap:!1,countChoices:!1,numCorrect:1,multipleSelect:!1,onChange:z("changed"),isLastUsedWidget:!1},l=t=>{const e={...c,...t};return n(i,{...e})},p=t=>{const e={...c,multipleSelect:!1};return n(i,{...e})},u=t=>{const e={...c,multipleSelect:!0};return n(i,{...e})},d=t=>{const e={...c,multipleSelect:!0,numCorrect:2,countChoices:!0};return n(i,{...e})},m=t=>{const e=Array(4).fill(null).map((a,r)=>o({content:`Choice ${r+1}`}));e[1].checked=!0;const s={...c,multipleSelect:!1,choices:e};return n(i,{...s})},h=t=>{const e=Array(4).fill(null).map((a,r)=>o({content:`Choice ${r+1}`}));e[1].checked=!0,e[2].checked=!0;const s={...c,multipleSelect:!0,choices:e};return n(i,{...s})},S=t=>{const e=Array(4).fill(null).map((r,f)=>o({content:`Choice ${f+1}`,rationale:"This is a neat rationale",hasRationale:!0,showRationale:!0,correct:!1,showCorrectness:!0}));e[1].checked=!0,e[2].correct=!0;const s=e.map(({correct:r})=>({content:"",correct:r})),a={...c,multipleSelect:!1,reviewModeRubric:{choices:s},choices:e};return n(i,{...a})},g=t=>{const e=Array(4).fill(null).map((r,f)=>o({content:`Choice ${f+1}`,rationale:"This is a neat rationale",hasRationale:!0,showRationale:!0,correct:!1,showCorrectness:!0}));e[1].checked=!0,e[2].checked=!0,e[2].correct=!0,e[3].correct=!0;const s=e.map(r=>({content:"",correct:r.correct})),a={...c,multipleSelect:!0,numCorrect:2,reviewModeRubric:{choices:s},choices:e};return n(i,{...a})};l.__docgenInfo={description:"",methods:[],displayName:"Interactive",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};p.__docgenInfo={description:"",methods:[],displayName:"SingleSelectWithNothingSelected",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};u.__docgenInfo={description:"",methods:[],displayName:"MultipleSelectWithNothingSelected",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};d.__docgenInfo={description:"",methods:[],displayName:"MultipleSelectWithCountChoicesLabel",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};m.__docgenInfo={description:"",methods:[],displayName:"SingleSelected",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};h.__docgenInfo={description:"",methods:[],displayName:"MultipleSelected",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};S.__docgenInfo={description:"",methods:[],displayName:"SingleKitchenSink",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};g.__docgenInfo={description:"",methods:[],displayName:"MultipleKitchenSink",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};var b,y,C;l.parameters={...l.parameters,docs:{...(b=l.parameters)==null?void 0:b.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as n}from"./jsx-runtime-FVsy8kgq.js";import{a as z}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{B as i}from"./base-radio-TdBv-OLd.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./index-awljIyHI.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./jquery-yG1GhClm.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./constants-I_nlPaPx.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./renderer-hPmI_Chp.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";function o(t){return{...{checked:!1,crossedOut:!1,content:"",rationale:"",hasRationale:!1,showRationale:!1,showCorrectness:!1,correct:!1,isNoneOfTheAbove:!1,highlighted:!1,previouslyAnswered:!1,revealNoneOfTheAbove:!1,disabled:!1},...t}}const Je={title:"Perseus/Widgets/Radio/Base Radio",args:{multipleSelect:!1,editMode:!1,countChoices:!1}},c={apiOptions:{},choices:[o({content:"Content 1"}),o({content:"Content 2"}),o({content:"Content 3",correct:!0}),o({isNoneOfTheAbove:!0})],deselectEnabled:!1,editMode:!1,labelWrap:!1,countChoices:!1,numCorrect:1,multipleSelect:!1,onChange:z("changed"),isLastUsedWidget:!1},l=t=>{const e={...c,...t};return n(i,{...e})},p=t=>{const e={...c,multipleSelect:!1};return n(i,{...e})},u=t=>{const e={...c,multipleSelect:!0};return n(i,{...e})},d=t=>{const e={...c,multipleSelect:!0,numCorrect:2,countChoices:!0};return n(i,{...e})},m=t=>{const e=Array(4).fill(null).map((a,r)=>o({content:`Choice ${r+1}`}));e[1].checked=!0;const s={...c,multipleSelect:!1,choices:e};return n(i,{...s})},h=t=>{const e=Array(4).fill(null).map((a,r)=>o({content:`Choice ${r+1}`}));e[1].checked=!0,e[2].checked=!0;const s={...c,multipleSelect:!0,choices:e};return n(i,{...s})},S=t=>{const e=Array(4).fill(null).map((r,f)=>o({content:`Choice ${f+1}`,rationale:"This is a neat rationale",hasRationale:!0,showRationale:!0,correct:!1,showCorrectness:!0}));e[1].checked=!0,e[2].correct=!0;const s=e.map(({correct:r})=>({content:"",correct:r})),a={...c,multipleSelect:!1,reviewModeRubric:{choices:s},choices:e};return n(i,{...a})},g=t=>{const e=Array(4).fill(null).map((r,f)=>o({content:`Choice ${f+1}`,rationale:"This is a neat rationale",hasRationale:!0,showRationale:!0,correct:!1,showCorrectness:!0}));e[1].checked=!0,e[2].checked=!0,e[2].correct=!0,e[3].correct=!0;const s=e.map(r=>({content:"",correct:r.correct})),a={...c,multipleSelect:!0,numCorrect:2,reviewModeRubric:{choices:s},choices:e};return n(i,{...a})};l.__docgenInfo={description:"",methods:[],displayName:"Interactive",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};p.__docgenInfo={description:"",methods:[],displayName:"SingleSelectWithNothingSelected",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};u.__docgenInfo={description:"",methods:[],displayName:"MultipleSelectWithNothingSelected",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};d.__docgenInfo={description:"",methods:[],displayName:"MultipleSelectWithCountChoicesLabel",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};m.__docgenInfo={description:"",methods:[],displayName:"SingleSelected",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};h.__docgenInfo={description:"",methods:[],displayName:"MultipleSelected",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};S.__docgenInfo={description:"",methods:[],displayName:"SingleKitchenSink",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};g.__docgenInfo={description:"",methods:[],displayName:"MultipleKitchenSink",props:{multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},editMode:{required:!0,tsType:{name:"boolean"},description:""},countChoices:{required:!0,tsType:{name:"boolean"},description:""}}};var b,y,C;l.parameters={...l.parameters,docs:{...(b=l.parameters)==null?void 0:b.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const overwrittenProps = ({ ...defaultProps, ...args diff --git a/assets/behavior-X6OD0iDh.js b/assets/behavior-bUq-LmpJ.js similarity index 94% rename from assets/behavior-X6OD0iDh.js rename to assets/behavior-bUq-LmpJ.js index 1a4eb6f3cd..7f4bb30f7c 100644 --- a/assets/behavior-X6OD0iDh.js +++ b/assets/behavior-bUq-LmpJ.js @@ -1,4 +1,4 @@ -import{j as e,a}from"./jsx-runtime-FVsy8kgq.js";import{g as b}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{l as t}from"./index-awljIyHI.js";import{r as T}from"./index-TT1qJ6UJ.js";const v=class v extends T.Component{constructor(n){super(n),this.handleClick=r=>{this.props.disabled||(this.props.shouldUpdate()&&(this.waitingForClick=!1),this.props.onClick&&!this.props.disabled&&this.props.onClick(r))},this.handleMouseEnter=()=>{!this.props.disabled&&this.props.shouldUpdate()&&!this.waitingForClick&&this.setState({hovered:!0})},this.handleMouseLeave=()=>{!this.props.disabled&&this.props.shouldUpdate()&&!this.waitingForClick&&this.setState({hovered:!1})},this.handleTouchStart=()=>{!this.props.disabled&&this.props.shouldUpdate()&&this.setState({hovered:!0})},this.handleTouchEnd=()=>{!this.props.disabled&&this.props.shouldUpdate()&&(this.setState({hovered:!1}),this.waitingForClick=!0)},this.handleMouseDown=()=>{!this.props.disabled&&this.props.shouldUpdate()&&(this.setState({focused:!1}),this.focusFlag=!0)},this.handleBlur=()=>{!this.props.disabled&&this.props.shouldUpdate()&&this.setState({focused:!1})},this.handleFocus=()=>{!this.props.disabled&&this.props.shouldUpdate()&&(this.focusFlag?this.focusFlag=!1:this.setState({focused:!0}))},this.state={focused:!1,hovered:n.startHovered}}render(){const n={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:r}=this.props;return(r==null?void 0:r(this.state,n))||null}};v.defaultProps={startHovered:!1,shouldUpdate:()=>!0};let m=v;m.__docgenInfo={description:"",methods:[{name:"handleClick",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"ReactMouseEvent",raw:"React.MouseEvent",alias:"React.MouseEvent"}}],returns:null},{name:"handleMouseEnter",docblock:null,modifiers:[],params:[],returns:null},{name:"handleMouseLeave",docblock:null,modifiers:[],params:[],returns:null},{name:"handleTouchStart",docblock:null,modifiers:[],params:[],returns:null},{name:"handleTouchEnd",docblock:null,modifiers:[],params:[],returns:null},{name:"handleMouseDown",docblock:null,modifiers:[],params:[],returns:null},{name:"handleBlur",docblock:null,modifiers:[],params:[],returns:null},{name:"handleFocus",docblock:null,modifiers:[],params:[],returns:null}],displayName:"HoverBehavior",props:{children:{required:!1,tsType:{name:"signature",type:"function",raw:"(state: State, handlers: Handlers) => React.ReactElement",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ +import{j as e,a}from"./jsx-runtime-FVsy8kgq.js";import{g as b}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{l as t}from"./index-awljIyHI.js";import{r as T}from"./index-TT1qJ6UJ.js";const v=class v extends T.Component{constructor(n){super(n),this.handleClick=r=>{this.props.disabled||(this.props.shouldUpdate()&&(this.waitingForClick=!1),this.props.onClick&&!this.props.disabled&&this.props.onClick(r))},this.handleMouseEnter=()=>{!this.props.disabled&&this.props.shouldUpdate()&&!this.waitingForClick&&this.setState({hovered:!0})},this.handleMouseLeave=()=>{!this.props.disabled&&this.props.shouldUpdate()&&!this.waitingForClick&&this.setState({hovered:!1})},this.handleTouchStart=()=>{!this.props.disabled&&this.props.shouldUpdate()&&this.setState({hovered:!0})},this.handleTouchEnd=()=>{!this.props.disabled&&this.props.shouldUpdate()&&(this.setState({hovered:!1}),this.waitingForClick=!0)},this.handleMouseDown=()=>{!this.props.disabled&&this.props.shouldUpdate()&&(this.setState({focused:!1}),this.focusFlag=!0)},this.handleBlur=()=>{!this.props.disabled&&this.props.shouldUpdate()&&this.setState({focused:!1})},this.handleFocus=()=>{!this.props.disabled&&this.props.shouldUpdate()&&(this.focusFlag?this.focusFlag=!1:this.setState({focused:!0}))},this.state={focused:!1,hovered:n.startHovered}}render(){const n={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:r}=this.props;return(r==null?void 0:r(this.state,n))||null}};v.defaultProps={startHovered:!1,shouldUpdate:()=>!0};let m=v;m.__docgenInfo={description:"",methods:[{name:"handleClick",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"ReactMouseEvent",raw:"React.MouseEvent",alias:"React.MouseEvent"}}],returns:null},{name:"handleMouseEnter",docblock:null,modifiers:[],params:[],returns:null},{name:"handleMouseLeave",docblock:null,modifiers:[],params:[],returns:null},{name:"handleTouchStart",docblock:null,modifiers:[],params:[],returns:null},{name:"handleTouchEnd",docblock:null,modifiers:[],params:[],returns:null},{name:"handleMouseDown",docblock:null,modifiers:[],params:[],returns:null},{name:"handleBlur",docblock:null,modifiers:[],params:[],returns:null},{name:"handleFocus",docblock:null,modifiers:[],params:[],returns:null}],displayName:"HoverBehavior",props:{children:{required:!1,tsType:{name:"signature",type:"function",raw:"(state: State, handlers: Handlers) => React.ReactElement",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ focused: boolean; hovered: boolean; }`,signature:{properties:[{key:"focused",value:{name:"boolean",required:!0}},{key:"hovered",value:{name:"boolean",required:!0}}]}},name:"state"},{type:{name:"signature",type:"object",raw:`{ diff --git a/assets/behavior.stories-CrtW_WGC.js b/assets/behavior.stories-eKeCO3Mp.js similarity index 72% rename from assets/behavior.stories-CrtW_WGC.js rename to assets/behavior.stories-eKeCO3Mp.js index 7b0d25af65..c5a0e624be 100644 --- a/assets/behavior.stories-CrtW_WGC.js +++ b/assets/behavior.stories-eKeCO3Mp.js @@ -1,4 +1,4 @@ -import{j as n}from"./jsx-runtime-FVsy8kgq.js";import{a}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{r as c}from"./index-TT1qJ6UJ.js";import{B as l}from"./behavior-X6OD0iDh.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";const ir={title:"PerseusEditor/Widgets/Label Image/Behavior"},t=u=>{const[r,e]=c.useState({multipleAnswers:!1,hideChoicesFromInstructions:!1}),s={multipleAnswers:r.multipleAnswers,hideChoicesFromInstructions:r.hideChoicesFromInstructions,onChange:o=>{a("onChange")(o),e({...r,...o})}};return n(l,{preferredPopoverDirection:"NONE",...s})};t.__docgenInfo={description:"",methods:[],displayName:"Default"};var i,m,p;t.parameters={...t.parameters,docs:{...(i=t.parameters)==null?void 0:i.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as n}from"./jsx-runtime-FVsy8kgq.js";import{a}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{r as c}from"./index-TT1qJ6UJ.js";import{B as l}from"./behavior-bUq-LmpJ.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";const ir={title:"PerseusEditor/Widgets/Label Image/Behavior"},t=u=>{const[r,e]=c.useState({multipleAnswers:!1,hideChoicesFromInstructions:!1}),s={multipleAnswers:r.multipleAnswers,hideChoicesFromInstructions:r.hideChoicesFromInstructions,onChange:o=>{a("onChange")(o),e({...r,...o})}};return n(l,{preferredPopoverDirection:"NONE",...s})};t.__docgenInfo={description:"",methods:[],displayName:"Default"};var i,m,p;t.parameters={...t.parameters,docs:{...(i=t.parameters)==null?void 0:i.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const [state, setState] = React.useState({ multipleAnswers: false, hideChoicesFromInstructions: false diff --git a/assets/categorizer-editor-am_KbYeJ.js b/assets/categorizer-editor-B70XrHDb.js similarity index 76% rename from assets/categorizer-editor-am_KbYeJ.js rename to assets/categorizer-editor-B70XrHDb.js index 6beff27067..aeb0c884af 100644 --- a/assets/categorizer-editor-am_KbYeJ.js +++ b/assets/categorizer-editor-B70XrHDb.js @@ -1 +1 @@ -import{a as o,j as r}from"./jsx-runtime-FVsy8kgq.js";import{C as p,c as n,p as m}from"./article-renderer-6f7Dak4j.js";import{_ as l}from"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as c}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as u}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{E as d}from"./editor-jsonify-iuVqcZSO.js";import{C as f}from"./index-QCAhLhLD.js";import{P as s}from"./index-0C4KXdeC.js";import{r as h}from"./index-TT1qJ6UJ.js";const{TextListEditor:i}=u,g=p.widget,a=class a extends h.Component{constructor(){super(...arguments),this.change=(...e)=>n.apply(this,e),this.serialize=()=>d.serialize.call(this)}render(){return o("div",{children:[r("div",{className:"perseus-widget-row",children:r(f,{label:"Randomize item order",checked:this.props.randomizeItems,onChange:e=>{this.props.onChange({randomizeItems:e})}})}),"Categories:",r(i,{options:this.props.categories,onChange:e=>{this.change("categories",e)},layout:"horizontal"}),"Items:",r(i,{options:this.props.items,onChange:e=>{this.change({items:e,values:l.first(this.props.values,e.length)})},layout:"vertical"}),r(g,{apiOptions:this.props.apiOptions,items:this.props.items,categories:this.props.categories,values:this.props.values,onChange:e=>{this.props.onChange(e)},trackInteraction:function(){}})]})}};a.propTypes={...m,apiOptions:c.propTypes,items:s.arrayOf(s.string),categories:s.arrayOf(s.string),values:s.arrayOf(s.number),randomizeItems:s.bool},a.widgetName="categorizer",a.defaultProps={items:[],categories:[],values:[],randomizeItems:!1};let t=a;t.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"CategorizerEditor",props:{items:{defaultValue:{value:"[]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"string"}},required:!1},categories:{defaultValue:{value:"[]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"string"}},required:!1},values:{defaultValue:{value:"[]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1},randomizeItems:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},apiOptions:{description:"",type:{name:"custom",raw:"ApiOptions.propTypes"},required:!1}},composes:["@khanacademy/perseus"]};export{t as C}; +import{a as o,j as r}from"./jsx-runtime-FVsy8kgq.js";import{C as p,c as n,p as m}from"./article-renderer-TMdCDA85.js";import{_ as l}from"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as c}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as u}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{E as d}from"./editor-jsonify-SX5E4P_Y.js";import{C as f}from"./index-QCAhLhLD.js";import{P as s}from"./index-k-0mNqHS.js";import{r as h}from"./index-TT1qJ6UJ.js";const{TextListEditor:i}=u,g=p.widget,a=class a extends h.Component{constructor(){super(...arguments),this.change=(...e)=>n.apply(this,e),this.serialize=()=>d.serialize.call(this)}render(){return o("div",{children:[r("div",{className:"perseus-widget-row",children:r(f,{label:"Randomize item order",checked:this.props.randomizeItems,onChange:e=>{this.props.onChange({randomizeItems:e})}})}),"Categories:",r(i,{options:this.props.categories,onChange:e=>{this.change("categories",e)},layout:"horizontal"}),"Items:",r(i,{options:this.props.items,onChange:e=>{this.change({items:e,values:l.first(this.props.values,e.length)})},layout:"vertical"}),r(g,{apiOptions:this.props.apiOptions,items:this.props.items,categories:this.props.categories,values:this.props.values,onChange:e=>{this.props.onChange(e)},trackInteraction:function(){}})]})}};a.propTypes={...m,apiOptions:c.propTypes,items:s.arrayOf(s.string),categories:s.arrayOf(s.string),values:s.arrayOf(s.number),randomizeItems:s.bool},a.widgetName="categorizer",a.defaultProps={items:[],categories:[],values:[],randomizeItems:!1};let t=a;t.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"CategorizerEditor",props:{items:{defaultValue:{value:"[]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"string"}},required:!1},categories:{defaultValue:{value:"[]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"string"}},required:!1},values:{defaultValue:{value:"[]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1},randomizeItems:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},apiOptions:{description:"",type:{name:"custom",raw:"ApiOptions.propTypes"},required:!1}},composes:["@khanacademy/perseus"]};export{t as C}; diff --git a/assets/categorizer-editor.stories-uPdGtW4L.js b/assets/categorizer-editor.stories-smKQGz1C.js similarity index 65% rename from assets/categorizer-editor.stories-uPdGtW4L.js rename to assets/categorizer-editor.stories-smKQGz1C.js index 3288be07ac..c4903fc054 100644 --- a/assets/categorizer-editor.stories-uPdGtW4L.js +++ b/assets/categorizer-editor.stories-smKQGz1C.js @@ -1,3 +1,3 @@ -import{j as p}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as m}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{a as e}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{C as a}from"./categorizer-editor-am_KbYeJ.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-h_CiYGGb.js";import"./index-dnMhQZ-1.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./icon-paths-AuJwhOz7.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./shared-3pf9YZIg.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./answer-choices-uB4giKvU.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-tmJoP6pY.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./strings-OAjNfY6D.js";import"./bundle.esm-7jAAHVxW.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./components-GHvuFaIn.js";import"./editor-jsonify-iuVqcZSO.js";import"./index-0C4KXdeC.js";const ot={title:"PerseusEditor/Widgets/Categorizer Editor"},r=s=>p(a,{onChange:e("onChange"),apiOptions:m.defaults});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var t,o,i;r.parameters={...r.parameters,docs:{...(t=r.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as p}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as m}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{a as e}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{C as a}from"./categorizer-editor-B70XrHDb.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-h_CiYGGb.js";import"./index-dnMhQZ-1.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./icon-paths-AuJwhOz7.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./shared-3pf9YZIg.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./answer-choices-xSqM961S.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-HXEAXx7K.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./strings-OAjNfY6D.js";import"./bundle.esm-7jAAHVxW.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./components-h6HHhmoA.js";import"./editor-jsonify-SX5E4P_Y.js";import"./index-k-0mNqHS.js";const ot={title:"PerseusEditor/Widgets/Categorizer Editor"},r=s=>p(a,{onChange:e("onChange"),apiOptions:m.defaults});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var t,o,i;r.parameters={...r.parameters,docs:{...(t=r.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(i=(o=r.parameters)==null?void 0:o.docs)==null?void 0:i.source}}};const it=["Default"];export{r as Default,it as __namedExportsOrder,ot as default}; diff --git a/assets/categorizer.stories-DqVSQ-gQ.js b/assets/categorizer.stories-WvBvRviL.js similarity index 72% rename from assets/categorizer.stories-DqVSQ-gQ.js rename to assets/categorizer.stories-WvBvRviL.js index a0a3bbbf74..cf68faa065 100644 --- a/assets/categorizer.stories-DqVSQ-gQ.js +++ b/assets/categorizer.stories-WvBvRviL.js @@ -1,4 +1,4 @@ -import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{R as m}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const e={content:`**Classify each graph according to the kind of relationship it suggests.** +import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{R as m}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const e={content:`**Classify each graph according to the kind of relationship it suggests.** $\\qquad\\qquad\\quad\\text{Graph 1}\\qquad\\qquad\\quad\\qquad\\qquad\\quad\\text{Graph 2}$ diff --git a/assets/choice-E4eyMygy.js b/assets/choice-E4eyMygy.js index 329552569a..ddef346cad 100644 --- a/assets/choice-E4eyMygy.js +++ b/assets/choice-E4eyMygy.js @@ -1 +1 @@ -import{j as m,a as N}from"./jsx-runtime-FVsy8kgq.js";import{b as V,a as K,_ as L,V as D}from"./index-6h5t6F0w.js";import{r as a}from"./index-TT1qJ6UJ.js";import{c as Z,L as ae}from"./react-router-dom-W_e8xVUu.js";import{i as ne,g as de}from"./index-o3wWn3Y5.js";import{l as H}from"./index-awljIyHI.js";import{b as le,L as se}from"./index-h_CiYGGb.js";import{C as ce}from"./index-ngddCaVG.js";import{m as ue,c as fe,u as pe,a as be,T as me}from"./index-rfN0X25E.js";import{c as i,b as k,s as h,a as M}from"./index-deFLJwr4.js";import{P as U}from"./index-xuPsLuPk.js";import{C as X}from"./index-2dmvOE3q.js";import{S as ge}from"./index-qUyqkRvh.js";import{P as ye,b as he}from"./index-BPSWBbj5.js";import{c as Y}from"./index-dnMhQZ-1.js";import{u as xe}from"./i18n-context-hxuRe8oU.js";import{I as ve}from"./icon-YuYiVxsK.js";import{C as Ce,A as ke}from"./perseus-api-mOiZT07d.js";import{m as we}from"./media-queries-MaBBbpNq.js";import{g as j,C as Se}from"./choice-icon-LAaL9HdM.js";import{O as Ie}from"./option-status-6glEGOB8.js";const q={color:{bg:{action:{default:i.blue,active:i.activeBlue,inverse:i.fadedBlue},critical:{default:i.red,active:i.activeRed,inverse:i.fadedRed},primary:{default:i.white,disabled:i.offBlack32,inverse:i.darkBlue},secondary:{default:"none",inverse:"none",focus:i.white,active:{action:i.fadedBlue,critical:i.fadedRed}},tertiary:{hover:i.white},icon:{secondaryHover:"transparent"}},text:{disabled:i.offBlack32,inverse:i.white,primary:{disabled:i.white64},secondary:{inverse:i.white50},icon:{secondaryHover:"inherit"}},border:{disabled:i.offBlack32,primary:{inverse:i.white},secondary:{action:i.offBlack50,critical:i.offBlack50,inverse:i.white50},tertiary:{inverse:i.white}}},border:{width:{secondary:k.width.hairline,focused:k.width.thin,disabled:k.width.thin},radius:{default:k.radius.medium_4,tertiary:k.radius.xSmall_2,small:k.radius.medium_4,large:k.radius.large_6,icon:k.radius.full}},size:{height:{tertiaryHover:h.xxxxSmall_2,small:h.xLarge_32,medium:40,large:56}},margin:{icon:{offset:-h.xxxxSmall_2}},padding:{xsmall:h.xxxxSmall_2,small:h.xxSmall_6,medium:h.small_12,large:h.medium_16,xLarge:h.xLarge_32},font:{size:{large:18},lineHeight:{large:M.lineHeight.medium},weight:{default:M.weight.bold}}},Be=ue(q,{color:{bg:{secondary:{default:i.offWhite,active:{action:i.fadedBlue8,critical:i.fadedRed8},focus:i.offWhite},icon:{secondaryHover:i.fadedBlue16}},border:{secondary:{action:i.fadedBlue,critical:i.fadedRed}},text:{icon:{secondaryHover:i.blue}}},border:{radius:{default:k.radius.xLarge_12,small:k.radius.large_6,large:k.radius.xLarge_12},width:{focused:k.width.hairline}},margin:{icon:{offset:-h.xSmall_8}},font:{weight:{default:M.weight.regular}}}),Oe={default:q,khanmigo:Be},ee=fe(q);function ze(o){const n=a.useContext(me),r=Oe[n]||q;return a.createElement(ee.Provider,{value:r},o.children)}function G({icon:o,size:n,style:r,testId:l}){const e={"aria-hidden":!0,color:"currentColor",style:r,testId:l};switch(n){case"small":return a.createElement(U,L({},e,{size:"small",icon:o}));case"medium":default:return a.createElement(U,L({},e,{size:"medium",icon:o}))}}const Ee=["children","skipClientNav","color","disabled","focused","hovered","href","kind","labelStyle","light","pressed","size","style","testId","type","spinner","startIcon","endIcon","id","waiting"],Le=V("a"),_e=V("button"),Te=V(ae),We=a.forwardRef(function(n,r){const{theme:l,themeName:e}=pe(ee),t=be(Re,l),s=x=>{const{children:d,skipClientNav:u,color:g,disabled:C,focused:f,hovered:S,href:I=void 0,kind:v="primary",labelStyle:_,light:B=!1,pressed:c,size:y="medium",style:$,testId:p,type:T=void 0,spinner:O,startIcon:z,endIcon:b,id:W}=n,R=K(n,Ee),w=Ne(g,v,B,y,l,e),E=O||C,re=[t.shared,E&&t.disabled,z&&t.withStartIcon,b&&t.withEndIcon,w.default,E&&w.disabled,v!=="tertiary"&&!E&&(c?w.active:(S||f)&&w.focus),v==="tertiary"&&!c&&f&&[w.focus,E&&w.disabledFocus],y==="small"&&t.small,y==="large"&&t.large],A=L({"data-testid":p,id:W,role:"button",style:[re,$]},R),oe=y==="small"?le:se,te=a.createElement(oe,{style:[t.text,y==="large"&&t.largeText,_,O&&t.hiddenText,v==="tertiary"&&t.textWithFocus,v==="tertiary"&&!E&&(c?[w.hover,w.active]:S&&w.hover)],testId:p?`${p}-inner-label`:void 0},d),ie={medium:"small",small:"xsmall",large:"medium"},Q=y==="small"?"small":"medium",F=a.createElement(a.Fragment,null,z&&a.createElement(D,{style:t.iconWrapper},a.createElement(G,{size:Q,icon:z,style:[t.startIcon,v==="tertiary"&&t.tertiaryStartIcon],testId:p?`${p}-start-icon`:void 0})),te,O&&a.createElement(ce,{style:t.spinner,size:ie[y],light:v==="primary",testId:`${p||"button"}-spinner`}),b&&a.createElement(D,{testId:p?`${p}-end-icon-wrapper`:void 0,style:[P.endIcon,t.iconWrapper,t.endIconWrapper,v==="tertiary"&&t.endIconWrapperTertiary,(f||S)&&v!=="primary"&&t.iconWrapperSecondaryHovered]},a.createElement(G,{size:Q,icon:b,testId:p?`${p}-end-icon`:void 0})));return I&&!E?x&&!u&&ne(I)?a.createElement(Te,L({},A,{to:I,ref:r}),F):a.createElement(Le,L({},A,{href:I,ref:r}),F):a.createElement(_e,L({type:T||"button"},A,{"aria-disabled":E,ref:r}),F)};return a.createElement(Z.Consumer,null,x=>s(x))}),Re=o=>({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",height:o.size.height.medium,paddingTop:0,paddingBottom:0,paddingLeft:o.padding.large,paddingRight:o.padding.large,border:"none",borderRadius:o.border.radius.default,cursor:"pointer",outline:"none",textDecoration:"none",boxSizing:"border-box",touchAction:"manipulation",userSelect:"none",":focus":{WebkitTapHighlightColor:"rgba(0,0,0,0)"}},disabled:{cursor:"auto"},small:{borderRadius:o.border.radius.small,height:o.size.height.small},large:{borderRadius:o.border.radius.large,height:o.size.height.large},text:{alignItems:"center",fontWeight:o.font.weight.default,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",display:"inline-block",pointerEvents:"none"},largeText:{fontSize:o.font.size.large,lineHeight:`${o.font.lineHeight.large}px`},textWithFocus:{position:"relative"},hiddenText:{visibility:"hidden"},spinner:{position:"absolute"},startIcon:{marginRight:o.padding.small,marginLeft:o.margin.icon.offset},tertiaryStartIcon:{marginLeft:0},endIcon:{marginLeft:o.padding.small},iconWrapper:{borderRadius:o.border.radius.icon,padding:o.padding.xsmall,minWidth:"auto"},iconWrapperSecondaryHovered:{backgroundColor:o.color.bg.icon.secondaryHover,color:o.color.text.icon.secondaryHover},endIconWrapper:{marginLeft:o.padding.small,marginRight:o.margin.icon.offset},endIconWrapperTertiary:{marginRight:0}}),P={},Ne=(o="default",n,r,l,e,t)=>{const s=o==="destructive"?e.color.bg.critical.default:e.color.bg.action.default,x=`${s}-${n}-${r}-${l}-${t}`;if(P[x])return P[x];const d=o==="destructive"?e.color.bg.critical.inverse:e.color.bg.action.inverse,u=o==="destructive"?e.color.bg.critical.active:e.color.bg.action.active,g=l==="large"?e.padding.xLarge:e.padding.large;let C={};if(n==="primary"){const f=r?e.color.bg.primary.inverse:e.color.bg.primary.default;C={default:{background:r?e.color.bg.primary.default:s,color:r?s:e.color.text.inverse,paddingLeft:g,paddingRight:g},focus:{boxShadow:`0 0 0 1px ${f}, 0 0 0 3px ${r?e.color.bg.primary.default:s}`},active:{boxShadow:`0 0 0 1px ${f}, 0 0 0 3px ${r?d:u}`,background:r?d:u,color:r?u:d},disabled:{background:r?d:e.color.bg.primary.disabled,color:r?s:e.color.text.primary.disabled,cursor:"default",":focus":{boxShadow:`0 0 0 1px ${r?e.color.bg.primary.disabled:e.color.bg.primary.default}, 0 0 0 3px ${r?d:e.color.bg.primary.disabled}`}}}}else if(n==="secondary"){const f=o==="destructive"?e.color.border.secondary.critical:e.color.border.secondary.action,S=o==="destructive"?e.color.bg.secondary.active.critical:e.color.bg.secondary.active.action;C={default:{background:r?e.color.bg.secondary.inverse:e.color.bg.secondary.default,color:r?e.color.text.inverse:s,borderColor:r?e.color.border.secondary.inverse:f,borderStyle:"solid",borderWidth:e.border.width.secondary,paddingLeft:g,paddingRight:g},focus:{background:r?e.color.bg.secondary.inverse:e.color.bg.secondary.focus,borderColor:"transparent",outlineColor:r?e.color.border.primary.inverse:s,outlineStyle:"solid",outlineWidth:e.border.width.focused},active:{background:r?u:S,color:r?d:u,borderColor:"transparent",outlineColor:r?d:u,outlineStyle:"solid",outlineWidth:e.border.width.focused},disabled:{color:r?e.color.text.secondary.inverse:e.color.text.disabled,outlineColor:r?d:e.color.border.disabled,cursor:"default",":focus":{outlineColor:r?e.color.border.secondary.inverse:e.color.border.disabled,outlineStyle:"solid",outlineWidth:e.border.width.disabled}}}}else if(n==="tertiary")C={default:{background:"none",color:r?e.color.text.inverse:s,paddingLeft:0,paddingRight:0},hover:{":after":{content:"''",position:"absolute",height:e.size.height.tertiaryHover,width:"100%",right:0,bottom:0,background:r?e.color.bg.tertiary.hover:s,borderRadius:e.border.radius.tertiary}},focus:{outlineStyle:"solid",outlineColor:r?e.color.border.tertiary.inverse:s,outlineWidth:e.border.width.focused,borderRadius:e.border.radius.default},active:{color:r?d:u,":after":{height:e.size.height.tertiaryHover,background:r?d:u}},disabled:{color:r?d:e.color.text.disabled,cursor:"default"},disabledFocus:{outlineColor:r?e.color.border.tertiary.inverse:e.color.border.disabled}};else throw new Error("Button kind not recognized");return P[x]=H.StyleSheet.create(C),P[x]},$e=["href","type","children","skipClientNav","onClick","beforeNav","safeWithNav","tabIndex","target","rel","color","kind","light","size","disabled","spinner"],Pe=a.forwardRef(function(n,r){const{href:l=void 0,type:e=void 0,children:t,skipClientNav:s,onClick:x,beforeNav:d=void 0,safeWithNav:u=void 0,tabIndex:g,target:C,rel:f,color:S="default",kind:I="primary",light:v=!1,size:_="medium",disabled:B=!1,spinner:c=!1}=n,y=K(n,$e),$=p=>{const T=de(l,s,p),O=(z,b)=>a.createElement(We,L({},y,z,b,{disabled:B,spinner:c||z.waiting,color:S,kind:I,light:v,size:_,skipClientNav:s,href:l,target:C,type:e,tabIndex:g,ref:r}),t);return d?a.createElement(T,{disabled:c||B,href:l,role:"button",type:e,onClick:x,beforeNav:d,safeWithNav:u,rel:f},O):a.createElement(T,{disabled:c||B,href:l,role:"button",type:e,onClick:x,safeWithNav:u,target:C,rel:f},O)};return a.createElement(ze,null,a.createElement(Z.Consumer,null,p=>$(p)))});function He(o,n,r,l,e,t){return e&&r?n?t.choiceCheckedCorrect({letter:o}):l?t.choiceCrossedOutCorrect({letter:o}):t.choiceCorrect({letter:o}):e&&!r?n?t.choiceCheckedIncorrect({letter:o}):l?t.choiceCrossedOutIncorrect({letter:o}):t.choiceIncorrect({letter:o}):n?t.choiceChecked({letter:o}):l?t.choiceCrossedOut({letter:o}):t.choice({letter:o})}const qe="16px 16px",Ae="12px 16px",Fe={path:"M27.218 6.82l0 13.578q0 2.852-1.984 4.836t-4.836 1.984l-13.578 0q-2.852 0-4.836-1.984t-1.984-4.836l0-13.578q0-2.852 1.984-4.836t4.836-1.984l13.578 0q2.852 0 4.836 1.984t1.984 4.836zm36.27 0l0 13.578q0 2.852-1.984 4.836t-4.836 1.984l-13.578 0q-2.852 0-4.836-1.984t-1.984-4.836l0-13.578q0-2.852 1.984-4.836t4.836-1.984l13.578 0q2.852 0 4.836 1.984t1.984 4.836zm36.27 0l0 13.578q0 2.852-1.984 4.836t-4.836 1.984l-13.578 0q-2.852 0-4.836-1.984t-1.984-4.836l0-13.578q0-2.852 1.984-4.836t4.836-1.984l13.578 0q2.852 0 4.836 1.984t1.984 4.836z",width:100,height:27.284},je=function(o){const{disabled:n=!1,checked:r=!1,content:l,crossedOut:e,showCorrectness:t,multipleSelect:s,onChange:x=b=>{},reviewMode:d,correct:u=!1,apiOptions:g=ke.defaults,previouslyAnswered:C=!1,pos:f=0,showRationale:S=!1,rationale:I,forwardedRef:v}=o,[_,B]=a.useState(!1),{strings:c}=xe();a.useEffect(()=>{_&&n&&B(!1)},[n,_,B]);function y(b){const W=b.checked??r,R=b.crossedOut??e;x({checked:W,crossedOut:R})}const $=Y("description",H.css(J.description)),p=Y("perseus-radio-rationale-content",H.css(J.rationale)),T=!d&&g.readOnly||e,O=j(f,c),z=He(O,r,u,e,t,c);return N("div",{style:{dispay:"flex",flexDirection:"column",color:i.offBlack},className:$,children:[N("div",{style:{display:"flex",flexDirection:"row",opacity:T?.5:1,overflowX:"auto",overflowY:"hidden"},children:[m("div",{className:"perseus-sr-only",children:N("label",{children:[z,"   ",l,m("input",{type:s?"checkbox":"radio",checked:r,onClick:()=>{y({checked:!r,crossedOut:!1})},onChange:()=>{},disabled:n||g.readOnly,tabIndex:-1,className:Ce.RADIO.OPTION_CONTENT})]})}),m(X,{onClick:()=>{y({checked:!r,crossedOut:!1})},disabled:n||g.readOnly,style:{flex:1,color:i.offBlack,userSelect:"text"},ref:v,"aria-hidden":"true",children:({hovered:b,focused:W,pressed:R})=>N("div",{style:{display:"flex",flexDirection:"row",justifyContent:"center",alignContent:"center",paddingTop:h.xSmall_8,paddingBottom:h.xSmall_8,paddingLeft:h.xSmall_8},children:[m(Se,{pos:f,correct:u,crossedOut:e,pressed:R,focused:W,checked:r,hovered:b,showCorrectness:t,multipleSelect:s,reviewMode:d,previouslyAnswered:C}),N("span",{style:{paddingLeft:h.small_12,textAlign:"left",flex:1,paddingTop:4},children:[m("div",{children:m(Ie,{checked:r,correct:u,crossedOut:e,previouslyAnswered:C,reviewMode:d})}),m("div",{children:l})]})]})}),g.crossOutEnabled&&!d&&m(ye,{dismissEnabled:!0,content:({close:b})=>m(he,{title:c.crossOut,content:c.crossOutOption,closeButtonVisible:!0,actions:N(D,{children:[m(ge,{size:h.medium_16}),m(Pe,{kind:"primary","aria-label":c.crossOutChoice({letter:j(f,c)}),disabled:g.readOnly||d,onClick:()=>{y(e?{crossedOut:!1}:{checked:!1,crossedOut:!0}),b()},children:e?c.bringBack:c.crossOut})]})}),children:({open:b})=>m(X,{onClick:b,"aria-label":c.openMenuForChoice({letter:j(f,c)}),style:{alignSelf:"center",padding:"5px",display:"flex",justifyContent:"center",alignItems:"center",marginLeft:"10px"},children:({hovered:W,focused:R,pressed:w})=>m(ve,{icon:Fe,size:3,color:i.offBlack64})})})]}),S&&m("div",{className:p,"data-testid":`perseus-radio-rationale-content-${f}`,children:I})]})},J=H.StyleSheet.create({description:{display:"inline-block",width:"100%"},rationale:{display:"block",padding:qe,paddingTop:0,marginLeft:54,color:i.offBlack64,[we.smOrSmaller]:{padding:Ae,paddingTop:0}}}),cr=a.forwardRef((o,n)=>m(je,{...o,forwardedRef:n}));export{Pe as B,cr as C}; +import{j as m,a as N}from"./jsx-runtime-FVsy8kgq.js";import{b as V,a as K,_ as L,V as D}from"./index-6h5t6F0w.js";import{r as a}from"./index-TT1qJ6UJ.js";import{c as Z,L as ae}from"./react-router-dom-W_e8xVUu.js";import{i as ne,g as de}from"./index-o3wWn3Y5.js";import{l as H}from"./index-awljIyHI.js";import{b as le,L as se}from"./index-h_CiYGGb.js";import{C as ce}from"./index-ngddCaVG.js";import{m as ue,c as fe,u as pe,a as be,T as me}from"./index-rfN0X25E.js";import{c as i,b as k,s as h,a as M}from"./index-deFLJwr4.js";import{P as U}from"./index-xuPsLuPk.js";import{C as X}from"./index-WNT3sUKf.js";import{S as ge}from"./index-qUyqkRvh.js";import{P as ye,b as he}from"./index-BPSWBbj5.js";import{c as Y}from"./index-dnMhQZ-1.js";import{u as xe}from"./i18n-context-hxuRe8oU.js";import{I as ve}from"./icon-YuYiVxsK.js";import{C as Ce,A as ke}from"./perseus-api-mOiZT07d.js";import{m as we}from"./media-queries-MaBBbpNq.js";import{g as j,C as Se}from"./choice-icon-LAaL9HdM.js";import{O as Ie}from"./option-status-6glEGOB8.js";const q={color:{bg:{action:{default:i.blue,active:i.activeBlue,inverse:i.fadedBlue},critical:{default:i.red,active:i.activeRed,inverse:i.fadedRed},primary:{default:i.white,disabled:i.offBlack32,inverse:i.darkBlue},secondary:{default:"none",inverse:"none",focus:i.white,active:{action:i.fadedBlue,critical:i.fadedRed}},tertiary:{hover:i.white},icon:{secondaryHover:"transparent"}},text:{disabled:i.offBlack32,inverse:i.white,primary:{disabled:i.white64},secondary:{inverse:i.white50},icon:{secondaryHover:"inherit"}},border:{disabled:i.offBlack32,primary:{inverse:i.white},secondary:{action:i.offBlack50,critical:i.offBlack50,inverse:i.white50},tertiary:{inverse:i.white}}},border:{width:{secondary:k.width.hairline,focused:k.width.thin,disabled:k.width.thin},radius:{default:k.radius.medium_4,tertiary:k.radius.xSmall_2,small:k.radius.medium_4,large:k.radius.large_6,icon:k.radius.full}},size:{height:{tertiaryHover:h.xxxxSmall_2,small:h.xLarge_32,medium:40,large:56}},margin:{icon:{offset:-h.xxxxSmall_2}},padding:{xsmall:h.xxxxSmall_2,small:h.xxSmall_6,medium:h.small_12,large:h.medium_16,xLarge:h.xLarge_32},font:{size:{large:18},lineHeight:{large:M.lineHeight.medium},weight:{default:M.weight.bold}}},Be=ue(q,{color:{bg:{secondary:{default:i.offWhite,active:{action:i.fadedBlue8,critical:i.fadedRed8},focus:i.offWhite},icon:{secondaryHover:i.fadedBlue16}},border:{secondary:{action:i.fadedBlue,critical:i.fadedRed}},text:{icon:{secondaryHover:i.blue}}},border:{radius:{default:k.radius.xLarge_12,small:k.radius.large_6,large:k.radius.xLarge_12},width:{focused:k.width.hairline}},margin:{icon:{offset:-h.xSmall_8}},font:{weight:{default:M.weight.regular}}}),Oe={default:q,khanmigo:Be},ee=fe(q);function ze(o){const n=a.useContext(me),r=Oe[n]||q;return a.createElement(ee.Provider,{value:r},o.children)}function G({icon:o,size:n,style:r,testId:l}){const e={"aria-hidden":!0,color:"currentColor",style:r,testId:l};switch(n){case"small":return a.createElement(U,L({},e,{size:"small",icon:o}));case"medium":default:return a.createElement(U,L({},e,{size:"medium",icon:o}))}}const Ee=["children","skipClientNav","color","disabled","focused","hovered","href","kind","labelStyle","light","pressed","size","style","testId","type","spinner","startIcon","endIcon","id","waiting"],Le=V("a"),_e=V("button"),Te=V(ae),We=a.forwardRef(function(n,r){const{theme:l,themeName:e}=pe(ee),t=be(Re,l),s=x=>{const{children:d,skipClientNav:u,color:g,disabled:C,focused:f,hovered:S,href:I=void 0,kind:v="primary",labelStyle:_,light:B=!1,pressed:c,size:y="medium",style:$,testId:p,type:T=void 0,spinner:O,startIcon:z,endIcon:b,id:W}=n,R=K(n,Ee),w=Ne(g,v,B,y,l,e),E=O||C,re=[t.shared,E&&t.disabled,z&&t.withStartIcon,b&&t.withEndIcon,w.default,E&&w.disabled,v!=="tertiary"&&!E&&(c?w.active:(S||f)&&w.focus),v==="tertiary"&&!c&&f&&[w.focus,E&&w.disabledFocus],y==="small"&&t.small,y==="large"&&t.large],A=L({"data-testid":p,id:W,role:"button",style:[re,$]},R),oe=y==="small"?le:se,te=a.createElement(oe,{style:[t.text,y==="large"&&t.largeText,_,O&&t.hiddenText,v==="tertiary"&&t.textWithFocus,v==="tertiary"&&!E&&(c?[w.hover,w.active]:S&&w.hover)],testId:p?`${p}-inner-label`:void 0},d),ie={medium:"small",small:"xsmall",large:"medium"},Q=y==="small"?"small":"medium",F=a.createElement(a.Fragment,null,z&&a.createElement(D,{style:t.iconWrapper},a.createElement(G,{size:Q,icon:z,style:[t.startIcon,v==="tertiary"&&t.tertiaryStartIcon],testId:p?`${p}-start-icon`:void 0})),te,O&&a.createElement(ce,{style:t.spinner,size:ie[y],light:v==="primary",testId:`${p||"button"}-spinner`}),b&&a.createElement(D,{testId:p?`${p}-end-icon-wrapper`:void 0,style:[P.endIcon,t.iconWrapper,t.endIconWrapper,v==="tertiary"&&t.endIconWrapperTertiary,(f||S)&&v!=="primary"&&t.iconWrapperSecondaryHovered]},a.createElement(G,{size:Q,icon:b,testId:p?`${p}-end-icon`:void 0})));return I&&!E?x&&!u&&ne(I)?a.createElement(Te,L({},A,{to:I,ref:r}),F):a.createElement(Le,L({},A,{href:I,ref:r}),F):a.createElement(_e,L({type:T||"button"},A,{"aria-disabled":E,ref:r}),F)};return a.createElement(Z.Consumer,null,x=>s(x))}),Re=o=>({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",height:o.size.height.medium,paddingTop:0,paddingBottom:0,paddingLeft:o.padding.large,paddingRight:o.padding.large,border:"none",borderRadius:o.border.radius.default,cursor:"pointer",outline:"none",textDecoration:"none",boxSizing:"border-box",touchAction:"manipulation",userSelect:"none",":focus":{WebkitTapHighlightColor:"rgba(0,0,0,0)"}},disabled:{cursor:"auto"},small:{borderRadius:o.border.radius.small,height:o.size.height.small},large:{borderRadius:o.border.radius.large,height:o.size.height.large},text:{alignItems:"center",fontWeight:o.font.weight.default,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",display:"inline-block",pointerEvents:"none"},largeText:{fontSize:o.font.size.large,lineHeight:`${o.font.lineHeight.large}px`},textWithFocus:{position:"relative"},hiddenText:{visibility:"hidden"},spinner:{position:"absolute"},startIcon:{marginRight:o.padding.small,marginLeft:o.margin.icon.offset},tertiaryStartIcon:{marginLeft:0},endIcon:{marginLeft:o.padding.small},iconWrapper:{borderRadius:o.border.radius.icon,padding:o.padding.xsmall,minWidth:"auto"},iconWrapperSecondaryHovered:{backgroundColor:o.color.bg.icon.secondaryHover,color:o.color.text.icon.secondaryHover},endIconWrapper:{marginLeft:o.padding.small,marginRight:o.margin.icon.offset},endIconWrapperTertiary:{marginRight:0}}),P={},Ne=(o="default",n,r,l,e,t)=>{const s=o==="destructive"?e.color.bg.critical.default:e.color.bg.action.default,x=`${s}-${n}-${r}-${l}-${t}`;if(P[x])return P[x];const d=o==="destructive"?e.color.bg.critical.inverse:e.color.bg.action.inverse,u=o==="destructive"?e.color.bg.critical.active:e.color.bg.action.active,g=l==="large"?e.padding.xLarge:e.padding.large;let C={};if(n==="primary"){const f=r?e.color.bg.primary.inverse:e.color.bg.primary.default;C={default:{background:r?e.color.bg.primary.default:s,color:r?s:e.color.text.inverse,paddingLeft:g,paddingRight:g},focus:{boxShadow:`0 0 0 1px ${f}, 0 0 0 3px ${r?e.color.bg.primary.default:s}`},active:{boxShadow:`0 0 0 1px ${f}, 0 0 0 3px ${r?d:u}`,background:r?d:u,color:r?u:d},disabled:{background:r?d:e.color.bg.primary.disabled,color:r?s:e.color.text.primary.disabled,cursor:"default",":focus":{boxShadow:`0 0 0 1px ${r?e.color.bg.primary.disabled:e.color.bg.primary.default}, 0 0 0 3px ${r?d:e.color.bg.primary.disabled}`}}}}else if(n==="secondary"){const f=o==="destructive"?e.color.border.secondary.critical:e.color.border.secondary.action,S=o==="destructive"?e.color.bg.secondary.active.critical:e.color.bg.secondary.active.action;C={default:{background:r?e.color.bg.secondary.inverse:e.color.bg.secondary.default,color:r?e.color.text.inverse:s,borderColor:r?e.color.border.secondary.inverse:f,borderStyle:"solid",borderWidth:e.border.width.secondary,paddingLeft:g,paddingRight:g},focus:{background:r?e.color.bg.secondary.inverse:e.color.bg.secondary.focus,borderColor:"transparent",outlineColor:r?e.color.border.primary.inverse:s,outlineStyle:"solid",outlineWidth:e.border.width.focused},active:{background:r?u:S,color:r?d:u,borderColor:"transparent",outlineColor:r?d:u,outlineStyle:"solid",outlineWidth:e.border.width.focused},disabled:{color:r?e.color.text.secondary.inverse:e.color.text.disabled,outlineColor:r?d:e.color.border.disabled,cursor:"default",":focus":{outlineColor:r?e.color.border.secondary.inverse:e.color.border.disabled,outlineStyle:"solid",outlineWidth:e.border.width.disabled}}}}else if(n==="tertiary")C={default:{background:"none",color:r?e.color.text.inverse:s,paddingLeft:0,paddingRight:0},hover:{":after":{content:"''",position:"absolute",height:e.size.height.tertiaryHover,width:"100%",right:0,bottom:0,background:r?e.color.bg.tertiary.hover:s,borderRadius:e.border.radius.tertiary}},focus:{outlineStyle:"solid",outlineColor:r?e.color.border.tertiary.inverse:s,outlineWidth:e.border.width.focused,borderRadius:e.border.radius.default},active:{color:r?d:u,":after":{height:e.size.height.tertiaryHover,background:r?d:u}},disabled:{color:r?d:e.color.text.disabled,cursor:"default"},disabledFocus:{outlineColor:r?e.color.border.tertiary.inverse:e.color.border.disabled}};else throw new Error("Button kind not recognized");return P[x]=H.StyleSheet.create(C),P[x]},$e=["href","type","children","skipClientNav","onClick","beforeNav","safeWithNav","tabIndex","target","rel","color","kind","light","size","disabled","spinner"],Pe=a.forwardRef(function(n,r){const{href:l=void 0,type:e=void 0,children:t,skipClientNav:s,onClick:x,beforeNav:d=void 0,safeWithNav:u=void 0,tabIndex:g,target:C,rel:f,color:S="default",kind:I="primary",light:v=!1,size:_="medium",disabled:B=!1,spinner:c=!1}=n,y=K(n,$e),$=p=>{const T=de(l,s,p),O=(z,b)=>a.createElement(We,L({},y,z,b,{disabled:B,spinner:c||z.waiting,color:S,kind:I,light:v,size:_,skipClientNav:s,href:l,target:C,type:e,tabIndex:g,ref:r}),t);return d?a.createElement(T,{disabled:c||B,href:l,role:"button",type:e,onClick:x,beforeNav:d,safeWithNav:u,rel:f},O):a.createElement(T,{disabled:c||B,href:l,role:"button",type:e,onClick:x,safeWithNav:u,target:C,rel:f},O)};return a.createElement(ze,null,a.createElement(Z.Consumer,null,p=>$(p)))});function He(o,n,r,l,e,t){return e&&r?n?t.choiceCheckedCorrect({letter:o}):l?t.choiceCrossedOutCorrect({letter:o}):t.choiceCorrect({letter:o}):e&&!r?n?t.choiceCheckedIncorrect({letter:o}):l?t.choiceCrossedOutIncorrect({letter:o}):t.choiceIncorrect({letter:o}):n?t.choiceChecked({letter:o}):l?t.choiceCrossedOut({letter:o}):t.choice({letter:o})}const qe="16px 16px",Ae="12px 16px",Fe={path:"M27.218 6.82l0 13.578q0 2.852-1.984 4.836t-4.836 1.984l-13.578 0q-2.852 0-4.836-1.984t-1.984-4.836l0-13.578q0-2.852 1.984-4.836t4.836-1.984l13.578 0q2.852 0 4.836 1.984t1.984 4.836zm36.27 0l0 13.578q0 2.852-1.984 4.836t-4.836 1.984l-13.578 0q-2.852 0-4.836-1.984t-1.984-4.836l0-13.578q0-2.852 1.984-4.836t4.836-1.984l13.578 0q2.852 0 4.836 1.984t1.984 4.836zm36.27 0l0 13.578q0 2.852-1.984 4.836t-4.836 1.984l-13.578 0q-2.852 0-4.836-1.984t-1.984-4.836l0-13.578q0-2.852 1.984-4.836t4.836-1.984l13.578 0q2.852 0 4.836 1.984t1.984 4.836z",width:100,height:27.284},je=function(o){const{disabled:n=!1,checked:r=!1,content:l,crossedOut:e,showCorrectness:t,multipleSelect:s,onChange:x=b=>{},reviewMode:d,correct:u=!1,apiOptions:g=ke.defaults,previouslyAnswered:C=!1,pos:f=0,showRationale:S=!1,rationale:I,forwardedRef:v}=o,[_,B]=a.useState(!1),{strings:c}=xe();a.useEffect(()=>{_&&n&&B(!1)},[n,_,B]);function y(b){const W=b.checked??r,R=b.crossedOut??e;x({checked:W,crossedOut:R})}const $=Y("description",H.css(J.description)),p=Y("perseus-radio-rationale-content",H.css(J.rationale)),T=!d&&g.readOnly||e,O=j(f,c),z=He(O,r,u,e,t,c);return N("div",{style:{dispay:"flex",flexDirection:"column",color:i.offBlack},className:$,children:[N("div",{style:{display:"flex",flexDirection:"row",opacity:T?.5:1,overflowX:"auto",overflowY:"hidden"},children:[m("div",{className:"perseus-sr-only",children:N("label",{children:[z,"   ",l,m("input",{type:s?"checkbox":"radio",checked:r,onClick:()=>{y({checked:!r,crossedOut:!1})},onChange:()=>{},disabled:n||g.readOnly,tabIndex:-1,className:Ce.RADIO.OPTION_CONTENT})]})}),m(X,{onClick:()=>{y({checked:!r,crossedOut:!1})},disabled:n||g.readOnly,style:{flex:1,color:i.offBlack,userSelect:"text"},ref:v,"aria-hidden":"true",children:({hovered:b,focused:W,pressed:R})=>N("div",{style:{display:"flex",flexDirection:"row",justifyContent:"center",alignContent:"center",paddingTop:h.xSmall_8,paddingBottom:h.xSmall_8,paddingLeft:h.xSmall_8},children:[m(Se,{pos:f,correct:u,crossedOut:e,pressed:R,focused:W,checked:r,hovered:b,showCorrectness:t,multipleSelect:s,reviewMode:d,previouslyAnswered:C}),N("span",{style:{paddingLeft:h.small_12,textAlign:"left",flex:1,paddingTop:4},children:[m("div",{children:m(Ie,{checked:r,correct:u,crossedOut:e,previouslyAnswered:C,reviewMode:d})}),m("div",{children:l})]})]})}),g.crossOutEnabled&&!d&&m(ye,{dismissEnabled:!0,content:({close:b})=>m(he,{title:c.crossOut,content:c.crossOutOption,closeButtonVisible:!0,actions:N(D,{children:[m(ge,{size:h.medium_16}),m(Pe,{kind:"primary","aria-label":c.crossOutChoice({letter:j(f,c)}),disabled:g.readOnly||d,onClick:()=>{y(e?{crossedOut:!1}:{checked:!1,crossedOut:!0}),b()},children:e?c.bringBack:c.crossOut})]})}),children:({open:b})=>m(X,{onClick:b,"aria-label":c.openMenuForChoice({letter:j(f,c)}),style:{alignSelf:"center",padding:"5px",display:"flex",justifyContent:"center",alignItems:"center",marginLeft:"10px"},children:({hovered:W,focused:R,pressed:w})=>m(ve,{icon:Fe,size:3,color:i.offBlack64})})})]}),S&&m("div",{className:p,"data-testid":`perseus-radio-rationale-content-${f}`,children:I})]})},J=H.StyleSheet.create({description:{display:"inline-block",width:"100%"},rationale:{display:"block",padding:qe,paddingTop:0,marginLeft:54,color:i.offBlack64,[we.smOrSmaller]:{padding:Ae,paddingTop:0}}}),cr=a.forwardRef((o,n)=>m(je,{...o,forwardedRef:n}));export{Pe as B,cr as C}; diff --git a/assets/choice-none-above-tmJoP6pY.js b/assets/choice-none-above-HXEAXx7K.js similarity index 87% rename from assets/choice-none-above-tmJoP6pY.js rename to assets/choice-none-above-HXEAXx7K.js index 3649ce9970..68a6b43def 100644 --- a/assets/choice-none-above-tmJoP6pY.js +++ b/assets/choice-none-above-HXEAXx7K.js @@ -1 +1 @@ -import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{r as i}from"./index-TT1qJ6UJ.js";import{u as m}from"./i18n-context-hxuRe8oU.js";import{R as p}from"./renderer-vBOYiNCS.js";import{C as d}from"./choice-E4eyMygy.js";const n=function(o){const{showContent:e,content:s,forwardedRef:f,...c}=o,{strings:t}=m(),a={...c,content:e?s:r(p,{content:t.noneOfTheAbove,strings:t},"noneOfTheAboveRenderer")};return r(d,{...a,ref:f})};n.defaultProps={showContent:!0};const b=i.forwardRef((o,e)=>r(n,{...o,forwardedRef:e}));export{b as C}; +import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{r as i}from"./index-TT1qJ6UJ.js";import{u as m}from"./i18n-context-hxuRe8oU.js";import{R as p}from"./renderer-hPmI_Chp.js";import{C as d}from"./choice-E4eyMygy.js";const n=function(o){const{showContent:e,content:s,forwardedRef:f,...c}=o,{strings:t}=m(),a={...c,content:e?s:r(p,{content:t.noneOfTheAbove,strings:t},"noneOfTheAboveRenderer")};return r(d,{...a,ref:f})};n.defaultProps={showContent:!0};const b=i.forwardRef((o,e)=>r(n,{...o,forwardedRef:e}));export{b as C}; diff --git a/assets/choice-none-above.stories-uiVXuZMI.js b/assets/choice-none-above.stories-v1FJoVoF.js similarity index 86% rename from assets/choice-none-above.stories-uiVXuZMI.js rename to assets/choice-none-above.stories-v1FJoVoF.js index af214d183e..2fb39e5799 100644 --- a/assets/choice-none-above.stories-uiVXuZMI.js +++ b/assets/choice-none-above.stories-v1FJoVoF.js @@ -1,4 +1,4 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as s}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{C as a}from"./choice-none-above-tmJoP6pY.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./renderer-vBOYiNCS.js";import"./version-akiLXZts.js";import"./util-XcxTwqb0.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./icon-YuYiVxsK.js";import"./media-queries-MaBBbpNq.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";const fo={title:"Perseus/Widgets/Radio/Choice None of the Above",args:{showContent:!1,content:"This is a possible choice"}},n={checked:!1,rationale:"This is a good rational",correct:!0,disabled:!1,pos:0,reviewMode:!1,showRationale:!1,showCorrectness:!1,multipleSelect:!1,crossedOut:!1,previouslyAnswered:!1,apiOptions:{},onChange:s("changed")},o=i=>{const p={...n,...i};return m(a,{...p})};o.__docgenInfo={description:"",methods:[],displayName:"Example",props:{content:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},showContent:{required:!1,tsType:{name:"boolean"},description:""}}};var t,r,e;o.parameters={...o.parameters,docs:{...(t=o.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as s}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{C as a}from"./choice-none-above-HXEAXx7K.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./renderer-hPmI_Chp.js";import"./version-akiLXZts.js";import"./util-YrNvlCNO.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./icon-YuYiVxsK.js";import"./media-queries-MaBBbpNq.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";const fo={title:"Perseus/Widgets/Radio/Choice None of the Above",args:{showContent:!1,content:"This is a possible choice"}},n={checked:!1,rationale:"This is a good rational",correct:!0,disabled:!1,pos:0,reviewMode:!1,showRationale:!1,showCorrectness:!1,multipleSelect:!1,crossedOut:!1,previouslyAnswered:!1,apiOptions:{},onChange:s("changed")},o=i=>{const p={...n,...i};return m(a,{...p})};o.__docgenInfo={description:"",methods:[],displayName:"Example",props:{content:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},showContent:{required:!1,tsType:{name:"boolean"},description:""}}};var t,r,e;o.parameters={...o.parameters,docs:{...(t=o.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const combineProps = ({ ...ChoiceDefaults, ...args diff --git a/assets/choice.stories-CaPa6g2I.js b/assets/choice.stories-CaPa6g2I.js index 2cb4dbdaea..21a1e360df 100644 --- a/assets/choice.stories-CaPa6g2I.js +++ b/assets/choice.stories-CaPa6g2I.js @@ -1,4 +1,4 @@ -import{j as r,a as p,F as l}from"./jsx-runtime-FVsy8kgq.js";import{a as C}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{C as t}from"./choice-E4eyMygy.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";const i={checked:!1,rationale:"This is a good rationale",content:"This is a possible choice",correct:!0,disabled:!1,pos:0,reviewMode:!1,showRationale:!1,showCorrectness:!1,multipleSelect:!1,crossedOut:!1,previouslyAnswered:!1,onChange:C("changed")},me={title:"Perseus/Widgets/Radio/Choice",args:i},o=a=>r(t,{...a}),n=a=>{const e={...i,checked:!0,showCorrectness:!0},d={...e,correct:!0,content:"This choice is correct"},u={...e,correct:!1,content:"This choice is incorrect"};return p(l,{children:[r(t,{...d}),r(t,{...u})]})},s=a=>{const e={...i,showCorrectness:!0,reviewMode:!0,multipleSelect:!0};return p(l,{children:[r(t,{...e,correct:!0,checked:!0,content:"This choice was correct and checked"}),r(t,{...e,correct:!0,content:"This choice was also correct and not checked"}),r(t,{...e,correct:!1,checked:!0,content:"This choice was incorrect and checked"}),r(t,{...e,correct:!1,content:"This choice was also incorrect and not checked"})]})},c=a=>{const e={...i,checked:!0,showCorrectness:!0,showRationale:!0,reviewMode:!0},d={...e,correct:!0,content:"This choice is correct",rationale:"It was correct because of the way it is"},u={...e,correct:!1,content:"This choice is incorrect",rationale:"It was incorrect because of the way it is"};return p(l,{children:[r(t,{...d}),r(t,{...u})]})};o.__docgenInfo={description:"",methods:[],displayName:"Interactive",props:{checked:{required:!0,tsType:{name:"boolean"},description:""},rationale:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},content:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},correct:{required:!0,tsType:{name:"boolean"},description:""},disabled:{required:!0,tsType:{name:"boolean"},description:""},pos:{required:!0,tsType:{name:"number"},description:""},reviewMode:{required:!0,tsType:{name:"boolean"},description:""},showRationale:{required:!0,tsType:{name:"boolean"},description:""},showCorrectness:{required:!0,tsType:{name:"boolean"},description:""},multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},crossedOut:{required:!0,tsType:{name:"boolean"},description:""},previouslyAnswered:{required:!0,tsType:{name:"boolean"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValues: {checked: boolean; crossedOut: boolean}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{checked: boolean; crossedOut: boolean}",signature:{properties:[{key:"checked",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}}]}},name:"newValues"}],return:{name:"void"}}},description:""}}};n.__docgenInfo={description:"",methods:[],displayName:"Checked",props:{checked:{required:!0,tsType:{name:"boolean"},description:""},rationale:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},content:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},correct:{required:!0,tsType:{name:"boolean"},description:""},disabled:{required:!0,tsType:{name:"boolean"},description:""},pos:{required:!0,tsType:{name:"number"},description:""},reviewMode:{required:!0,tsType:{name:"boolean"},description:""},showRationale:{required:!0,tsType:{name:"boolean"},description:""},showCorrectness:{required:!0,tsType:{name:"boolean"},description:""},multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},crossedOut:{required:!0,tsType:{name:"boolean"},description:""},previouslyAnswered:{required:!0,tsType:{name:"boolean"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValues: {checked: boolean; crossedOut: boolean}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{checked: boolean; crossedOut: boolean}",signature:{properties:[{key:"checked",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}}]}},name:"newValues"}],return:{name:"void"}}},description:""}}};s.__docgenInfo={description:"",methods:[],displayName:"ReviewMode",props:{checked:{required:!0,tsType:{name:"boolean"},description:""},rationale:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},content:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},correct:{required:!0,tsType:{name:"boolean"},description:""},disabled:{required:!0,tsType:{name:"boolean"},description:""},pos:{required:!0,tsType:{name:"number"},description:""},reviewMode:{required:!0,tsType:{name:"boolean"},description:""},showRationale:{required:!0,tsType:{name:"boolean"},description:""},showCorrectness:{required:!0,tsType:{name:"boolean"},description:""},multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},crossedOut:{required:!0,tsType:{name:"boolean"},description:""},previouslyAnswered:{required:!0,tsType:{name:"boolean"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValues: {checked: boolean; crossedOut: boolean}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{checked: boolean; crossedOut: boolean}",signature:{properties:[{key:"checked",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}}]}},name:"newValues"}],return:{name:"void"}}},description:""}}};c.__docgenInfo={description:"",methods:[],displayName:"Rationale",props:{checked:{required:!0,tsType:{name:"boolean"},description:""},rationale:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},content:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},correct:{required:!0,tsType:{name:"boolean"},description:""},disabled:{required:!0,tsType:{name:"boolean"},description:""},pos:{required:!0,tsType:{name:"number"},description:""},reviewMode:{required:!0,tsType:{name:"boolean"},description:""},showRationale:{required:!0,tsType:{name:"boolean"},description:""},showCorrectness:{required:!0,tsType:{name:"boolean"},description:""},multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},crossedOut:{required:!0,tsType:{name:"boolean"},description:""},previouslyAnswered:{required:!0,tsType:{name:"boolean"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValues: {checked: boolean; crossedOut: boolean}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{checked: boolean; crossedOut: boolean}",signature:{properties:[{key:"checked",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}}]}},name:"newValues"}],return:{name:"void"}}},description:""}}};var m,h,y;o.parameters={...o.parameters,docs:{...(m=o.parameters)==null?void 0:m.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as r,a as p,F as l}from"./jsx-runtime-FVsy8kgq.js";import{a as C}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{C as t}from"./choice-E4eyMygy.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";const i={checked:!1,rationale:"This is a good rationale",content:"This is a possible choice",correct:!0,disabled:!1,pos:0,reviewMode:!1,showRationale:!1,showCorrectness:!1,multipleSelect:!1,crossedOut:!1,previouslyAnswered:!1,onChange:C("changed")},me={title:"Perseus/Widgets/Radio/Choice",args:i},o=a=>r(t,{...a}),n=a=>{const e={...i,checked:!0,showCorrectness:!0},d={...e,correct:!0,content:"This choice is correct"},u={...e,correct:!1,content:"This choice is incorrect"};return p(l,{children:[r(t,{...d}),r(t,{...u})]})},s=a=>{const e={...i,showCorrectness:!0,reviewMode:!0,multipleSelect:!0};return p(l,{children:[r(t,{...e,correct:!0,checked:!0,content:"This choice was correct and checked"}),r(t,{...e,correct:!0,content:"This choice was also correct and not checked"}),r(t,{...e,correct:!1,checked:!0,content:"This choice was incorrect and checked"}),r(t,{...e,correct:!1,content:"This choice was also incorrect and not checked"})]})},c=a=>{const e={...i,checked:!0,showCorrectness:!0,showRationale:!0,reviewMode:!0},d={...e,correct:!0,content:"This choice is correct",rationale:"It was correct because of the way it is"},u={...e,correct:!1,content:"This choice is incorrect",rationale:"It was incorrect because of the way it is"};return p(l,{children:[r(t,{...d}),r(t,{...u})]})};o.__docgenInfo={description:"",methods:[],displayName:"Interactive",props:{checked:{required:!0,tsType:{name:"boolean"},description:""},rationale:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},content:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},correct:{required:!0,tsType:{name:"boolean"},description:""},disabled:{required:!0,tsType:{name:"boolean"},description:""},pos:{required:!0,tsType:{name:"number"},description:""},reviewMode:{required:!0,tsType:{name:"boolean"},description:""},showRationale:{required:!0,tsType:{name:"boolean"},description:""},showCorrectness:{required:!0,tsType:{name:"boolean"},description:""},multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},crossedOut:{required:!0,tsType:{name:"boolean"},description:""},previouslyAnswered:{required:!0,tsType:{name:"boolean"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValues: {checked: boolean; crossedOut: boolean}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{checked: boolean; crossedOut: boolean}",signature:{properties:[{key:"checked",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}}]}},name:"newValues"}],return:{name:"void"}}},description:""}}};n.__docgenInfo={description:"",methods:[],displayName:"Checked",props:{checked:{required:!0,tsType:{name:"boolean"},description:""},rationale:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},content:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},correct:{required:!0,tsType:{name:"boolean"},description:""},disabled:{required:!0,tsType:{name:"boolean"},description:""},pos:{required:!0,tsType:{name:"number"},description:""},reviewMode:{required:!0,tsType:{name:"boolean"},description:""},showRationale:{required:!0,tsType:{name:"boolean"},description:""},showCorrectness:{required:!0,tsType:{name:"boolean"},description:""},multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},crossedOut:{required:!0,tsType:{name:"boolean"},description:""},previouslyAnswered:{required:!0,tsType:{name:"boolean"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValues: {checked: boolean; crossedOut: boolean}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{checked: boolean; crossedOut: boolean}",signature:{properties:[{key:"checked",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}}]}},name:"newValues"}],return:{name:"void"}}},description:""}}};s.__docgenInfo={description:"",methods:[],displayName:"ReviewMode",props:{checked:{required:!0,tsType:{name:"boolean"},description:""},rationale:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},content:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},correct:{required:!0,tsType:{name:"boolean"},description:""},disabled:{required:!0,tsType:{name:"boolean"},description:""},pos:{required:!0,tsType:{name:"number"},description:""},reviewMode:{required:!0,tsType:{name:"boolean"},description:""},showRationale:{required:!0,tsType:{name:"boolean"},description:""},showCorrectness:{required:!0,tsType:{name:"boolean"},description:""},multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},crossedOut:{required:!0,tsType:{name:"boolean"},description:""},previouslyAnswered:{required:!0,tsType:{name:"boolean"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValues: {checked: boolean; crossedOut: boolean}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{checked: boolean; crossedOut: boolean}",signature:{properties:[{key:"checked",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}}]}},name:"newValues"}],return:{name:"void"}}},description:""}}};c.__docgenInfo={description:"",methods:[],displayName:"Rationale",props:{checked:{required:!0,tsType:{name:"boolean"},description:""},rationale:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},content:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},correct:{required:!0,tsType:{name:"boolean"},description:""},disabled:{required:!0,tsType:{name:"boolean"},description:""},pos:{required:!0,tsType:{name:"number"},description:""},reviewMode:{required:!0,tsType:{name:"boolean"},description:""},showRationale:{required:!0,tsType:{name:"boolean"},description:""},showCorrectness:{required:!0,tsType:{name:"boolean"},description:""},multipleSelect:{required:!0,tsType:{name:"boolean"},description:""},crossedOut:{required:!0,tsType:{name:"boolean"},description:""},previouslyAnswered:{required:!0,tsType:{name:"boolean"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValues: {checked: boolean; crossedOut: boolean}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{checked: boolean; crossedOut: boolean}",signature:{properties:[{key:"checked",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}}]}},name:"newValues"}],return:{name:"void"}}},description:""}}};var m,h,y;o.parameters={...o.parameters,docs:{...(m=o.parameters)==null?void 0:m.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(y=(h=o.parameters)==null?void 0:h.docs)==null?void 0:y.source}}};var b,w,T;n.parameters={...n.parameters,docs:{...(b=n.parameters)==null?void 0:b.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const sharedProps = ({ diff --git a/assets/color-select-G-xDxP7-.js b/assets/color-select-GgikiV2v.js similarity index 63% rename from assets/color-select-G-xDxP7-.js rename to assets/color-select-GgikiV2v.js index 8dd3305b49..b657e8d1c2 100644 --- a/assets/color-select-G-xDxP7-.js +++ b/assets/color-select-GgikiV2v.js @@ -1 +1 @@ -import{j as e,a as l}from"./jsx-runtime-FVsy8kgq.js";import{l as a}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{V as n}from"./index-6h5t6F0w.js";import{S as c,O as d}from"./answer-choices-uB4giKvU.js";import{S as u}from"./index-qUyqkRvh.js";import{s as y}from"./index-deFLJwr4.js";import{a as f}from"./index-h_CiYGGb.js";import{l as g}from"./index-awljIyHI.js";import{C as S}from"./util-3pmDu6r6.js";const C=Object.keys(a),o=i=>{const{selectedValue:s,style:m,onChange:p}=i;return e(n,{style:[t.row,m],children:l(f,{tag:"label",style:t.row,children:["color",e(u,{size:y.xxSmall_6}),e(c,{selectedValue:s,onChange:p,placeholder:"",children:C.map(r=>e(d,{value:r,label:r,leftAccessory:e(S,{color:r,decorative:!0})},r))})]})})},t=g.StyleSheet.create({row:{display:"flex",flexDirection:"row",alignItems:"center",minWidth:"auto"}}),ee=o;o.__docgenInfo={description:"",methods:[],displayName:"ColorSelect",props:{selectedValue:{required:!0,tsType:{name:"LockedFigureColor"},description:""},style:{required:!1,tsType:{name:"StyleType"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValue: string) => void",signature:{arguments:[{type:{name:"string"},name:"newValue"}],return:{name:"void"}}},description:""}}};export{ee as C}; +import{j as e,a as l}from"./jsx-runtime-FVsy8kgq.js";import{l as a}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{V as n}from"./index-6h5t6F0w.js";import{S as c,O as d}from"./answer-choices-xSqM961S.js";import{S as u}from"./index-qUyqkRvh.js";import{s as y}from"./index-deFLJwr4.js";import{a as f}from"./index-h_CiYGGb.js";import{l as g}from"./index-awljIyHI.js";import{C as S}from"./util-yTFMWwoT.js";const C=Object.keys(a),o=i=>{const{selectedValue:s,style:m,onChange:p}=i;return e(n,{style:[t.row,m],children:l(f,{tag:"label",style:t.row,children:["color",e(u,{size:y.xxSmall_6}),e(c,{selectedValue:s,onChange:p,placeholder:"",children:C.map(r=>e(d,{value:r,label:r,leftAccessory:e(S,{color:r,decorative:!0})},r))})]})})},t=g.StyleSheet.create({row:{display:"flex",flexDirection:"row",alignItems:"center",minWidth:"auto"}}),ee=o;o.__docgenInfo={description:"",methods:[],displayName:"ColorSelect",props:{selectedValue:{required:!0,tsType:{name:"LockedFigureColor"},description:""},style:{required:!1,tsType:{name:"StyleType"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValue: string) => void",signature:{arguments:[{type:{name:"string"},name:"newValue"}],return:{name:"void"}}},description:""}}};export{ee as C}; diff --git a/assets/color-select.stories-J0t3yMA_.js b/assets/color-select.stories-ImdmYgVA.js similarity index 70% rename from assets/color-select.stories-J0t3yMA_.js rename to assets/color-select.stories-ImdmYgVA.js index f65808337b..b3fc6b3919 100644 --- a/assets/color-select.stories-J0t3yMA_.js +++ b/assets/color-select.stories-ImdmYgVA.js @@ -1,4 +1,4 @@ -import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{r as g}from"./index-TT1qJ6UJ.js";import{C as t}from"./color-select-G-xDxP7-.js";import{g as f}from"./util-3pmDu6r6.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";const ar={title:"PerseusEditor/Components/Color Select",component:t},o=e=>s(t,{...e}),c=f("point").color;o.args={id:"color-select",selectedValue:c,onChange:()=>{}};const r={render:function(){const[d,u]=g.useState(c);return s(t,{selectedValue:d,onChange:C=>{u(C)}})}};o.__docgenInfo={description:"",methods:[],displayName:"Default"};var m,i,p;o.parameters={...o.parameters,docs:{...(m=o.parameters)==null?void 0:m.docs,source:{originalSource:`(args): React.ReactElement => { +import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{r as g}from"./index-TT1qJ6UJ.js";import{C as t}from"./color-select-GgikiV2v.js";import{g as f}from"./util-yTFMWwoT.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";const ar={title:"PerseusEditor/Components/Color Select",component:t},o=e=>s(t,{...e}),c=f("point").color;o.args={id:"color-select",selectedValue:c,onChange:()=>{}};const r={render:function(){const[d,u]=g.useState(c);return s(t,{selectedValue:d,onChange:C=>{u(C)}})}};o.__docgenInfo={description:"",methods:[],displayName:"Default"};var m,i,p;o.parameters={...o.parameters,docs:{...(m=o.parameters)==null?void 0:m.docs,source:{originalSource:`(args): React.ReactElement => { return ; }`,...(p=(i=o.parameters)==null?void 0:i.docs)==null?void 0:p.source}}};var a,l,n;r.parameters={...r.parameters,docs:{...(a=r.parameters)==null?void 0:a.docs,source:{originalSource:`{ render: function Render() { diff --git a/assets/color-swatch.stories-ygHiMCQC.js b/assets/color-swatch.stories-NpasFnHF.js similarity index 66% rename from assets/color-swatch.stories-ygHiMCQC.js rename to assets/color-swatch.stories-NpasFnHF.js index d2b512fc2f..32d0ef1c3b 100644 --- a/assets/color-swatch.stories-ygHiMCQC.js +++ b/assets/color-swatch.stories-NpasFnHF.js @@ -1,3 +1,3 @@ -import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{C as p,g as a}from"./util-3pmDu6r6.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";const Xo={title:"PerseusEditor/Components/Color Swatch",component:p},o=i=>e(p,{...i});o.args={color:a("point").color,filled:!0};o.__docgenInfo={description:"",methods:[],displayName:"Default"};var r,t,m;o.parameters={...o.parameters,docs:{...(r=o.parameters)==null?void 0:r.docs,source:{originalSource:`(args): React.ReactElement => { +import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{C as p,g as a}from"./util-yTFMWwoT.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";const Xo={title:"PerseusEditor/Components/Color Swatch",component:p},o=i=>e(p,{...i});o.args={color:a("point").color,filled:!0};o.__docgenInfo={description:"",methods:[],displayName:"Default"};var r,t,m;o.parameters={...o.parameters,docs:{...(r=o.parameters)==null?void 0:r.docs,source:{originalSource:`(args): React.ReactElement => { return ; }`,...(m=(t=o.parameters)==null?void 0:t.docs)==null?void 0:m.source}}};const Yo=["Default"];export{o as Default,Yo as __namedExportsOrder,Xo as default}; diff --git a/assets/components-GHvuFaIn.js b/assets/components-h6HHhmoA.js similarity index 70% rename from assets/components-GHvuFaIn.js rename to assets/components-h6HHhmoA.js index 43d64240a1..00c29650d0 100644 --- a/assets/components-GHvuFaIn.js +++ b/assets/components-h6HHhmoA.js @@ -1 +1 @@ -import{B as o}from"./button-group-nsoLlHtM.js";import{G as r}from"./graph-Y0iFaKoK.js";import{a as t,S as m}from"./svg-image-VUqtnnD6.js";import{H as p}from"./hud-FI3E3dT_.js";import{I as a}from"./icon-YuYiVxsK.js";import{I as i}from"./index-K9BSJPWl.js";import{I as e}from"./inline-icon-tKY1iMkH.js";import{M as n}from"./math-input-b6JdL4xR.js";import{M as s}from"./multi-button-group-a0iIfrwx.js";import{N as f}from"./number-input-dpusjjfa.js";import{R as u}from"./range-input-R0Q6JH86.js";import{T as I}from"./text-input-15gEhfDF.js";import{T as c}from"./text-list-editor-pe7AGDAl.js";const v=Object.freeze(Object.defineProperty({__proto__:null,ButtonGroup:o,Graph:r,Graphie:t,HUD:p,Icon:a,InfoTip:i,InlineIcon:e,MathInput:n,MultiButtonGroup:s,NumberInput:f,RangeInput:u,SvgImage:m,TextInput:I,TextListEditor:c},Symbol.toStringTag,{value:"Module"}));export{v as c}; +import{B as o}from"./button-group-nsoLlHtM.js";import{G as r}from"./graph-myhk4Jua.js";import{a as t,S as m}from"./svg-image-RL9NlJEY.js";import{H as p}from"./hud-FI3E3dT_.js";import{I as a}from"./icon-YuYiVxsK.js";import{I as i}from"./index-K9BSJPWl.js";import{I as e}from"./inline-icon-tKY1iMkH.js";import{M as n}from"./math-input-b6JdL4xR.js";import{M as s}from"./multi-button-group-a0iIfrwx.js";import{N as f}from"./number-input-ZhezuDVT.js";import{R as u}from"./range-input-kzyKWO0E.js";import{T as I}from"./text-input-15gEhfDF.js";import{T as c}from"./text-list-editor-pe7AGDAl.js";const v=Object.freeze(Object.defineProperty({__proto__:null,ButtonGroup:o,Graph:r,Graphie:t,HUD:p,Icon:a,InfoTip:i,InlineIcon:e,MathInput:n,MultiButtonGroup:s,NumberInput:f,RangeInput:u,SvgImage:m,TextInput:I,TextListEditor:c},Symbol.toStringTag,{value:"Module"}));export{v as c}; diff --git a/assets/content-preview.stories-Z9HLruzU.js b/assets/content-preview.stories-pTiS9guE.js similarity index 80% rename from assets/content-preview.stories-Z9HLruzU.js rename to assets/content-preview.stories-pTiS9guE.js index 0cbcc95bf4..e4465a1d85 100644 --- a/assets/content-preview.stories-Z9HLruzU.js +++ b/assets/content-preview.stories-pTiS9guE.js @@ -1,4 +1,4 @@ -import{j as e,a as x,F as W}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import{R as D}from"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import{u as R,a as A}from"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{V as m}from"./index-6h5t6F0w.js";import{s as b}from"./index-deFLJwr4.js";import{r as $}from"./index-TT1qJ6UJ.js";import{c as I}from"./article-renderer.testdata-spwNviYy.js";import{m as L}from"./strings-OAjNfY6D.js";import{b as O}from"./radio.testdata-sITJ8lxE.js";import{D as _}from"./device-framer-YjfQ5GqB.js";import{V as k}from"./viewport-resizer-2eJF63Xv.js";import{S as V,a as H,M}from"./mobile-keypad-hKjeQGNp.js";import"./prop-types-3bOVFRDQ.js";import"./key-translator-IA-2V2LV.js";import"./button-assets-txIojR3b.js";import{l as j}from"./constants-hQyjCzwz.js";import{l as z}from"./index-awljIyHI.js";/* empty css */import"./enums-x5qaTru7.js";import"./index-h_CiYGGb.js";import"./index-dnMhQZ-1.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-7vsPyIck.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./icon-paths-AuJwhOz7.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./shared-3pf9YZIg.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./answer-choices-uB4giKvU.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./asset-context-I7yIqWki.js";import"./index-J2t_5nK1.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./invariant-bu5zBsRS.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-tmJoP6pY.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./bundle.esm-7jAAHVxW.js";import"./components-GHvuFaIn.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";function p({question:t,apiOptions:r,seamless:s,linterContext:P,legacyPerseusLint:T,previewDevice:q}){const C=R(),a=q!=="desktop";return e(m,{className:`framework-perseus ${a?"perseus-mobile":""}`,style:[c.container,s?void 0:c.gutter],children:e(V,{children:e(H.Consumer,{children:({setKeypadActive:S,keypadElement:E,setKeypadElement:N})=>x(W,{children:[e(D,{strings:C.strings,apiOptions:{...r,isMobile:a},keypadElement:E,linterContext:P,legacyPerseusLint:T,...t}),e(M,{onAnalyticsEvent:()=>Promise.resolve(),onDismiss:()=>S(!1),onElementMounted:N})]})})})})}const c=z.StyleSheet.create({container:{padding:b.xxxSmall_4,containerType:"inline-size",containerName:"perseus-root"},gutter:{marginRight:j}});p.__docgenInfo={description:"The `ContentPreview` component provides a simple preview system for Perseus\nContent. Due to how Persus styles are built, the preview styling matches the\ncurrent device based on the viewport width (using `@media` queries for\n`min-width` and `max-width`).\n\nThe preview will render the mobile variant (styling and layout) when the\n`previewDevice` is phone or tablet. Note that the styling cannot be matched\n100% due to the above `@media` query limitation.",methods:[],displayName:"ContentPreview",props:{question:{required:!1,tsType:{name:"PerseusRenderer"},description:""},apiOptions:{required:!1,tsType:{name:"APIOptions"},description:""},seamless:{required:!1,tsType:{name:"boolean"},description:""},linterContext:{required:!1,tsType:{name:"LinterContextProps"},description:""},legacyPerseusLint:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:""},previewDevice:{required:!0,tsType:{name:"DeviceType"},description:""}}};const F=t=>{const[r,s]=$.useState("phone");return x(m,{children:[e(k,{deviceType:r,onViewportSizeChanged:s}),e(_,{nochrome:!1,deviceType:r,children:e(p,{...t})})]})},Vt={title:"PerseusEditor/Content Preview",component:p,decorators:[t=>e(m,{style:{margin:b.xxSmall_6},children:e(A,{strings:L,locale:"en",children:e(t,{})})})],render:t=>e(F,{...t})},o={args:{question:O}},i={args:{question:I}},n={args:{linterContext:{contentType:"exercise",highlightLint:!0,stack:[],paths:[]},question:{content:`# H1s bad +import{j as e,a as x,F as W}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import{R as D}from"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import{u as R,a as A}from"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{V as m}from"./index-6h5t6F0w.js";import{s as b}from"./index-deFLJwr4.js";import{r as $}from"./index-TT1qJ6UJ.js";import{c as I}from"./article-renderer.testdata-spwNviYy.js";import{m as L}from"./strings-OAjNfY6D.js";import{b as O}from"./radio.testdata-sITJ8lxE.js";import{D as _}from"./device-framer-kfyrsN2-.js";import{V as k}from"./viewport-resizer-spuc4uQO.js";import{S as V,a as H,M}from"./mobile-keypad-hKjeQGNp.js";import"./prop-types-3bOVFRDQ.js";import"./key-translator-IA-2V2LV.js";import"./button-assets-txIojR3b.js";import{l as j}from"./constants-hQyjCzwz.js";import{l as z}from"./index-awljIyHI.js";/* empty css */import"./enums-x5qaTru7.js";import"./index-h_CiYGGb.js";import"./index-dnMhQZ-1.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-7vsPyIck.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./icon-paths-AuJwhOz7.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./shared-3pf9YZIg.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./answer-choices-xSqM961S.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./asset-context-I7yIqWki.js";import"./index-J2t_5nK1.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./invariant-bu5zBsRS.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-HXEAXx7K.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./bundle.esm-7jAAHVxW.js";import"./components-h6HHhmoA.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";function p({question:t,apiOptions:r,seamless:s,linterContext:P,legacyPerseusLint:T,previewDevice:q}){const C=R(),a=q!=="desktop";return e(m,{className:`framework-perseus ${a?"perseus-mobile":""}`,style:[c.container,s?void 0:c.gutter],children:e(V,{children:e(H.Consumer,{children:({setKeypadActive:S,keypadElement:E,setKeypadElement:N})=>x(W,{children:[e(D,{strings:C.strings,apiOptions:{...r,isMobile:a},keypadElement:E,linterContext:P,legacyPerseusLint:T,...t}),e(M,{onAnalyticsEvent:()=>Promise.resolve(),onDismiss:()=>S(!1),onElementMounted:N})]})})})})}const c=z.StyleSheet.create({container:{padding:b.xxxSmall_4,containerType:"inline-size",containerName:"perseus-root"},gutter:{marginRight:j}});p.__docgenInfo={description:"The `ContentPreview` component provides a simple preview system for Perseus\nContent. Due to how Persus styles are built, the preview styling matches the\ncurrent device based on the viewport width (using `@media` queries for\n`min-width` and `max-width`).\n\nThe preview will render the mobile variant (styling and layout) when the\n`previewDevice` is phone or tablet. Note that the styling cannot be matched\n100% due to the above `@media` query limitation.",methods:[],displayName:"ContentPreview",props:{question:{required:!1,tsType:{name:"PerseusRenderer"},description:""},apiOptions:{required:!1,tsType:{name:"APIOptions"},description:""},seamless:{required:!1,tsType:{name:"boolean"},description:""},linterContext:{required:!1,tsType:{name:"LinterContextProps"},description:""},legacyPerseusLint:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:""},previewDevice:{required:!0,tsType:{name:"DeviceType"},description:""}}};const F=t=>{const[r,s]=$.useState("phone");return x(m,{children:[e(k,{deviceType:r,onViewportSizeChanged:s}),e(_,{nochrome:!1,deviceType:r,children:e(p,{...t})})]})},Vt={title:"PerseusEditor/Content Preview",component:p,decorators:[t=>e(m,{style:{margin:b.xxSmall_6},children:e(A,{strings:L,locale:"en",children:e(t,{})})})],render:t=>e(F,{...t})},o={args:{question:O}},i={args:{question:I}},n={args:{linterContext:{contentType:"exercise",highlightLint:!0,stack:[],paths:[]},question:{content:`# H1s bad Here is some unclosed math: $1+1=3 diff --git a/assets/cs-program.stories-qaNPw6Pu.js b/assets/cs-program.stories-5FdtaPSQ.js similarity index 66% rename from assets/cs-program.stories-qaNPw6Pu.js rename to assets/cs-program.stories-5FdtaPSQ.js index 65c1022006..916a0a2ad3 100644 --- a/assets/cs-program.stories-qaNPw6Pu.js +++ b/assets/cs-program.stories-5FdtaPSQ.js @@ -1,4 +1,4 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{R as p}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const e={content:`[[☃ cs-program 1]] +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{R as p}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const e={content:`[[☃ cs-program 1]] `,images:{},widgets:{"cs-program 1":{graded:!0,version:{major:0,minor:0},static:!1,type:"cs-program",options:{settings:[{name:"",value:""},{name:"",value:""}],height:540,width:640,programID:"6293105639817216",static:!1,showButtons:!1,showEditor:!1},alignment:"block"}}},Yr={title:"Perseus/Widgets/CS Program"},r=s=>m(p,{question:e});r.__docgenInfo={description:"",methods:[],displayName:"Question1"};var t,o,i;r.parameters={...r.parameters,docs:{...(t=r.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/definition-editor-U6nI8Sor.js b/assets/definition-editor-dEifSd-2.js similarity index 72% rename from assets/definition-editor-U6nI8Sor.js rename to assets/definition-editor-dEifSd-2.js index 3400fd741d..f40deeda99 100644 --- a/assets/definition-editor-U6nI8Sor.js +++ b/assets/definition-editor-dEifSd-2.js @@ -1 +1 @@ -import{a as n,j as e}from"./jsx-runtime-FVsy8kgq.js";import{c as a,p}from"./article-renderer-6f7Dak4j.js";import{_ as m}from"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as l}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{E as d}from"./editor-jsonify-iuVqcZSO.js";import{P as o}from"./index-0C4KXdeC.js";import{r as c}from"./index-TT1qJ6UJ.js";import{E as f}from"./editor-HVcPyY4Q.js";const{TextInput:u}=l,t=class t extends c.Component{constructor(){super(...arguments),this.change=(...i)=>a.apply(this,i),this.serialize=()=>d.serialize.call(this)}render(){return n("div",{className:"perseus-widget-definition-editor",children:[e("a",{href:"https://docs.google.com/document/d/1udaPef4imOfTMhmLDlWq4SM0mxL0r3YHFZE-5J1uGfo",target:"_blank",children:"Definition style guide"}),e("div",{className:"perseus-widget-row",children:n("label",{children:["Word to be defined:"," ",e(u,{value:this.props.togglePrompt,onChange:this.change("togglePrompt"),placeholder:"define me"})]})}),e("div",{className:"perseus-widget-row",children:e(f,{apiOptions:this.props.apiOptions,content:this.props.definition,widgetEnabled:!1,placeholder:"definition goes here",onChange:i=>{const s={};m.has(i,"content")&&(s.definition=i.content),this.change(s)}})})]})}};t.propTypes={...p,togglePrompt:o.string,definition:o.string,apiOptions:o.any},t.widgetName="definition",t.defaultProps={togglePrompt:"",definition:""};let r=t;r.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"DefinitionEditor",props:{togglePrompt:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},definition:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},apiOptions:{description:"",type:{name:"any"},required:!1}},composes:["@khanacademy/perseus"]};export{r as D}; +import{a as n,j as e}from"./jsx-runtime-FVsy8kgq.js";import{c as a,p}from"./article-renderer-TMdCDA85.js";import{_ as m}from"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as l}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{E as d}from"./editor-jsonify-SX5E4P_Y.js";import{P as o}from"./index-k-0mNqHS.js";import{r as c}from"./index-TT1qJ6UJ.js";import{E as f}from"./editor-I-vnrXtz.js";const{TextInput:u}=l,t=class t extends c.Component{constructor(){super(...arguments),this.change=(...i)=>a.apply(this,i),this.serialize=()=>d.serialize.call(this)}render(){return n("div",{className:"perseus-widget-definition-editor",children:[e("a",{href:"https://docs.google.com/document/d/1udaPef4imOfTMhmLDlWq4SM0mxL0r3YHFZE-5J1uGfo",target:"_blank",children:"Definition style guide"}),e("div",{className:"perseus-widget-row",children:n("label",{children:["Word to be defined:"," ",e(u,{value:this.props.togglePrompt,onChange:this.change("togglePrompt"),placeholder:"define me"})]})}),e("div",{className:"perseus-widget-row",children:e(f,{apiOptions:this.props.apiOptions,content:this.props.definition,widgetEnabled:!1,placeholder:"definition goes here",onChange:i=>{const s={};m.has(i,"content")&&(s.definition=i.content),this.change(s)}})})]})}};t.propTypes={...p,togglePrompt:o.string,definition:o.string,apiOptions:o.any},t.widgetName="definition",t.defaultProps={togglePrompt:"",definition:""};let r=t;r.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"DefinitionEditor",props:{togglePrompt:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},definition:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},apiOptions:{description:"",type:{name:"any"},required:!1}},composes:["@khanacademy/perseus"]};export{r as D}; diff --git a/assets/definition-editor.stories-dj4JMG2e.js b/assets/definition-editor.stories-EpH8ra8q.js similarity index 52% rename from assets/definition-editor.stories-dj4JMG2e.js rename to assets/definition-editor.stories-EpH8ra8q.js index 5e1b453a7f..5505a183e4 100644 --- a/assets/definition-editor.stories-dj4JMG2e.js +++ b/assets/definition-editor.stories-EpH8ra8q.js @@ -1,3 +1,3 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{D as e}from"./definition-editor-U6nI8Sor.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./editor-jsonify-iuVqcZSO.js";import"./index-0C4KXdeC.js";import"./editor-HVcPyY4Q.js";import"./index-SM3muJE2.js";import"./section-control-button-c-G3Veu9.js";import"./index-tFzzSRL2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";const nt={title:"PerseusEditor/Widgets/Definition Editor"},o=a=>m(e,{onChange:p("onChange")});o.__docgenInfo={description:"",methods:[],displayName:"Default"};var t,r,i;o.parameters={...o.parameters,docs:{...(t=o.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{D as e}from"./definition-editor-dEifSd-2.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./editor-jsonify-SX5E4P_Y.js";import"./index-k-0mNqHS.js";import"./editor-I-vnrXtz.js";import"./index-fuycm_QE.js";import"./index-SM3muJE2.js";import"./section-control-button-J8oVp9bZ.js";import"./index-tFzzSRL2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";const st={title:"PerseusEditor/Widgets/Definition Editor"},o=a=>m(e,{onChange:p("onChange")});o.__docgenInfo={description:"",methods:[],displayName:"Default"};var t,r,i;o.parameters={...o.parameters,docs:{...(t=o.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; -}`,...(i=(r=o.parameters)==null?void 0:r.docs)==null?void 0:i.source}}};const st=["Default"];export{o as Default,st as __namedExportsOrder,nt as default}; +}`,...(i=(r=o.parameters)==null?void 0:r.docs)==null?void 0:i.source}}};const dt=["Default"];export{o as Default,dt as __namedExportsOrder,st as default}; diff --git a/assets/definition.stories-itXLw16s.js b/assets/definition.stories-A2q8IHrU.js similarity index 80% rename from assets/definition.stories-itXLw16s.js rename to assets/definition.stories-A2q8IHrU.js index 41df766128..ea1c3f296c 100644 --- a/assets/definition.stories-itXLw16s.js +++ b/assets/definition.stories-A2q8IHrU.js @@ -1,4 +1,4 @@ -import{j as o}from"./jsx-runtime-FVsy8kgq.js";import{R as f}from"./renderer-with-debug-ui-fbym8U_I.js";import{s as h}from"./test-dependencies-UUeUFXqw.js";import{A as g}from"./article-renderer-6f7Dak4j.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./side-by-side-kpK-8vW0.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./dependencies-8XILypbq.js";import"./multi-renderer-PglzmXdY.js";import"./renderer-vBOYiNCS.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./hints-renderer-zKC46_AN.js";import"./shared-3pf9YZIg.js";import"./base-radio-ffaiqOwN.js";import"./choice-none-above-tmJoP6pY.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./hud-FI3E3dT_.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./enums-x5qaTru7.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./answer-choices-uB4giKvU.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";const dt={title:"Perseus/Widgets/Definition"},w={content:`Read the excerpt and answer the question below. +import{j as o}from"./jsx-runtime-FVsy8kgq.js";import{R as f}from"./renderer-with-debug-ui-YzY7YHzw.js";import{s as h}from"./test-dependencies-OZugV_HD.js";import{A as g}from"./article-renderer-TMdCDA85.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./side-by-side-kpK-8vW0.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./dependencies-8XILypbq.js";import"./multi-renderer-vtdVtdWv.js";import"./renderer-hPmI_Chp.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./hints-renderer-sA0Ao_qa.js";import"./shared-3pf9YZIg.js";import"./base-radio-TdBv-OLd.js";import"./choice-none-above-HXEAXx7K.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./hud-FI3E3dT_.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./enums-x5qaTru7.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./answer-choices-xSqM961S.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";const dt={title:"Perseus/Widgets/Definition"},w={content:`Read the excerpt and answer the question below. The Governor and Council of the Massachusetts had much conference many days; and at last . . . . concluded a peace and friendship with [[☃ definition 1]], upon these conditions.`,images:{},widgets:{"definition 1":{graded:!0,version:{major:0,minor:0},static:!1,type:"definition",options:{definition:"A Native American people in Connecticut; white settlers in New England, the Pequots, and their respective allies were at war from 1636-1638.",togglePrompt:"the Pequots",static:!1},alignment:"default"}}},y={content:`Read the excerpt and answer the question below. diff --git a/assets/deprecated-standin.stories-owg1iPBd.js b/assets/deprecated-standin.stories-w4UxO0fI.js similarity index 68% rename from assets/deprecated-standin.stories-owg1iPBd.js rename to assets/deprecated-standin.stories-w4UxO0fI.js index b14f691240..b49ac935ca 100644 --- a/assets/deprecated-standin.stories-owg1iPBd.js +++ b/assets/deprecated-standin.stories-w4UxO0fI.js @@ -1,4 +1,4 @@ -import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{R as m}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const Xt={title:"Perseus/Widgets/Deprecated Standin"},e={content:`$\\overleftrightarrow{MN}$ is the perpendicular bisector of segment $\\overline{JL}$. +import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{R as m}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const Xt={title:"Perseus/Widgets/Deprecated Standin"},e={content:`$\\overleftrightarrow{MN}$ is the perpendicular bisector of segment $\\overline{JL}$. **Perform a reflection that proves $M$ must be equidistant from $J$ and $L$ and select the option which explains the proof.** The statement must be true for any point $M$ which lies on the perpendicular bisector. diff --git a/assets/device-framer-YjfQ5GqB.js b/assets/device-framer-kfyrsN2-.js similarity index 71% rename from assets/device-framer-YjfQ5GqB.js rename to assets/device-framer-kfyrsN2-.js index 1e51b5368b..e7f4e05b2a 100644 --- a/assets/device-framer-YjfQ5GqB.js +++ b/assets/device-framer-kfyrsN2-.js @@ -1 +1 @@ -import{j as o}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{p as h,l as a}from"./constants-hQyjCzwz.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{r as m}from"./index-TT1qJ6UJ.js";const r={phone:{width:320,height:480,framedWidth:320},tablet:{width:750,height:920,framedWidth:525},desktop:{width:688,height:600,framedWidth:688}},d=({children:i,deviceType:t="phone",nochrome:p})=>{const e=m.useMemo(()=>r[t].framedWidth/r[t].width,[t]),s=m.useMemo(()=>({backgroundColor:"white",overflow:"scroll",color:"black",textAlign:"left",width:r[t].width,height:r[t].height,border:"solid 1px #CCC",margin:8,zoom:e}),[t,e]);return p?o("div",{style:{overflow:"scroll",width:r[t].framedWidth+2*h+a},children:o("div",{children:i})},"screen"):o("div",{className:"screen",style:{...s,textAlign:"start"},children:i},"screen")};d.__docgenInfo={description:"",methods:[],displayName:"DeviceFramer",props:{deviceType:{defaultValue:{value:'"phone"',computed:!1},required:!1}}};export{d as D}; +import{j as o}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{p as h,l as a}from"./constants-hQyjCzwz.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{r as m}from"./index-TT1qJ6UJ.js";const r={phone:{width:320,height:480,framedWidth:320},tablet:{width:750,height:920,framedWidth:525},desktop:{width:688,height:600,framedWidth:688}},d=({children:i,deviceType:t="phone",nochrome:p})=>{const e=m.useMemo(()=>r[t].framedWidth/r[t].width,[t]),s=m.useMemo(()=>({backgroundColor:"white",overflow:"scroll",color:"black",textAlign:"left",width:r[t].width,height:r[t].height,border:"solid 1px #CCC",margin:8,zoom:e}),[t,e]);return p?o("div",{style:{overflow:"scroll",width:r[t].framedWidth+2*h+a},children:o("div",{children:i})},"screen"):o("div",{className:"screen",style:{...s,textAlign:"start"},children:i},"screen")};d.__docgenInfo={description:"",methods:[],displayName:"DeviceFramer",props:{deviceType:{defaultValue:{value:'"phone"',computed:!1},required:!1}}};export{d as D}; diff --git a/assets/device-framer.stories-q7yy_9TI.js b/assets/device-framer.stories-QCUXbMUG.js similarity index 75% rename from assets/device-framer.stories-q7yy_9TI.js rename to assets/device-framer.stories-QCUXbMUG.js index 1a41a26347..691291ba2e 100644 --- a/assets/device-framer.stories-q7yy_9TI.js +++ b/assets/device-framer.stories-QCUXbMUG.js @@ -1,4 +1,4 @@ -import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{S as D}from"./index-SM3muJE2.js";import{c as p}from"./index-deFLJwr4.js";import{D as m}from"./device-framer-YjfQ5GqB.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./constants-hQyjCzwz.js";const po={component:m,title:"PerseusEditor/Components/Device Framer"},i=()=>r("div",{style:{backgroundColor:p.blue,color:p.offWhite,width:"90%",height:"300px",padding:D.medium_16},children:"The DeviceFramer controls the size of the content inside the frame. So there's not much to look at here except how large each device type's size is."}),o={render:()=>r(m,{deviceType:"phone",nochrome:!0,children:r(i,{})})},t={render:()=>r(m,{deviceType:"tablet",nochrome:!0,children:r(i,{})})},e={render:()=>r(m,{deviceType:"desktop",nochrome:!0,children:r(i,{})})};var n,c,a;o.parameters={...o.parameters,docs:{...(n=o.parameters)==null?void 0:n.docs,source:{originalSource:`{ +import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{S as D}from"./index-SM3muJE2.js";import{c as p}from"./index-deFLJwr4.js";import{D as m}from"./device-framer-kfyrsN2-.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./constants-hQyjCzwz.js";const po={component:m,title:"PerseusEditor/Components/Device Framer"},i=()=>r("div",{style:{backgroundColor:p.blue,color:p.offWhite,width:"90%",height:"300px",padding:D.medium_16},children:"The DeviceFramer controls the size of the content inside the frame. So there's not much to look at here except how large each device type's size is."}),o={render:()=>r(m,{deviceType:"phone",nochrome:!0,children:r(i,{})})},t={render:()=>r(m,{deviceType:"tablet",nochrome:!0,children:r(i,{})})},e={render:()=>r(m,{deviceType:"desktop",nochrome:!0,children:r(i,{})})};var n,c,a;o.parameters={...o.parameters,docs:{...(n=o.parameters)==null?void 0:n.docs,source:{originalSource:`{ render: () => diff --git a/assets/dropdown-editor-YwuHUUGx.js b/assets/dropdown-editor-z4XV_Nz9.js similarity index 86% rename from assets/dropdown-editor-YwuHUUGx.js rename to assets/dropdown-editor-z4XV_Nz9.js index 1a095fa269..af57f91138 100644 --- a/assets/dropdown-editor-YwuHUUGx.js +++ b/assets/dropdown-editor-z4XV_Nz9.js @@ -1,4 +1,4 @@ -import{a as r,j as t}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import{_ as a}from"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as d}from"./components-GHvuFaIn.js";import{I as m}from"./icon-paths-AuJwhOz7.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{E as u}from"./editor-jsonify-iuVqcZSO.js";import{P as i}from"./index-0C4KXdeC.js";import{r as f}from"./index-TT1qJ6UJ.js";import{R as C}from"./index-7vsPyIck.js";const{InfoTip:p,InlineIcon:h}=d,{iconPlus:g,iconTrash:v}=m,c=class c extends f.Component{constructor(){super(...arguments),this.onPlaceholderChange=o=>{const n=o.target.value;this.props.onChange({placeholder:n})},this.onCorrectChange=o=>{const n=a.map(this.props.choices,function(e,s){return a.extend({},e,{correct:s===o})});this.props.onChange({choices:n})},this.onContentChange=(o,n)=>{const e=this.props.choices.slice(),s=a.clone(e[o]);s.content=n.target.value,e[o]=s,this.props.onChange({choices:e})},this.addChoice=o=>{o.preventDefault();const n=this.props.choices,e={content:"",correct:!1};this.props.onChange({choices:n.concat([e])},this.focus.bind(this,n.length))},this.removeChoice=(o,n)=>{n.preventDefault();const e=a(this.props.choices).clone();e.splice(o,1),this.props.onChange({choices:e})},this.focus=o=>(C.findDOMNode(this.refs["editor"+o]).focus(),!0),this.serialize=()=>u.serialize.call(this)}render(){const o=a.uniqueId("perseus_dropdown_");return r("div",{className:"perseus-widget-dropdown",children:[r("div",{className:"dropdown-info",children:["Dropdown",t(p,{children:r("p",{children:["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.']})})]}),r("div",{className:"dropdown-placeholder",children:[t("input",{type:"text",placeholder:"Placeholder value",value:this.props.placeholder,onChange:this.onPlaceholderChange}),t(p,{children:t("p",{children:"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."})})]}),t("div",{className:"clearfix"}),t("ul",{className:"dropdown-choices",children:this.props.choices.map(function(n,e){const s=n.correct?"correct":"incorrect";return t("li",{children:r("div",{children:[t("input",{ref:"radio"+e,type:"radio",name:o,checked:n.correct?"checked":"",onChange:this.onCorrectChange.bind(this,e),value:e}),t("input",{type:"text",ref:"editor"+e,onChange:this.onContentChange.bind(this,e),className:s,value:n.content}),t("a",{href:"#",className:"simple-button orange","aria-label":"Delete choice",onClick:this.removeChoice.bind(this,e),children:t("span",{className:"remove-choice",children:t(h,{...v})})})]})},""+e)},this)}),t("div",{className:"add-choice-container",children:r("a",{href:"#",className:"simple-button orange",onClick:this.addChoice,children:[t(h,{...g})," Add a choice"," "]})})]})}};c.propTypes={choices:i.arrayOf(i.shape({content:i.string,correct:i.bool})),placeholder:i.string},c.widgetName="dropdown",c.defaultProps={placeholder:"",choices:[{content:"",correct:!1}]};let l=c;l.__docgenInfo={description:"",methods:[{name:"onPlaceholderChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"onCorrectChange",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null}],returns:null},{name:"onContentChange",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"addChoice",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"removeChoice",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"DropdownEditor",props:{placeholder:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},choices:{defaultValue:{value:`[ +import{a as r,j as t}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import{_ as a}from"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as d}from"./components-h6HHhmoA.js";import{I as m}from"./icon-paths-AuJwhOz7.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{E as u}from"./editor-jsonify-SX5E4P_Y.js";import{P as i}from"./index-k-0mNqHS.js";import{r as f}from"./index-TT1qJ6UJ.js";import{R as C}from"./index-7vsPyIck.js";const{InfoTip:p,InlineIcon:h}=d,{iconPlus:g,iconTrash:v}=m,c=class c extends f.Component{constructor(){super(...arguments),this.onPlaceholderChange=o=>{const n=o.target.value;this.props.onChange({placeholder:n})},this.onCorrectChange=o=>{const n=a.map(this.props.choices,function(e,s){return a.extend({},e,{correct:s===o})});this.props.onChange({choices:n})},this.onContentChange=(o,n)=>{const e=this.props.choices.slice(),s=a.clone(e[o]);s.content=n.target.value,e[o]=s,this.props.onChange({choices:e})},this.addChoice=o=>{o.preventDefault();const n=this.props.choices,e={content:"",correct:!1};this.props.onChange({choices:n.concat([e])},this.focus.bind(this,n.length))},this.removeChoice=(o,n)=>{n.preventDefault();const e=a(this.props.choices).clone();e.splice(o,1),this.props.onChange({choices:e})},this.focus=o=>(C.findDOMNode(this.refs["editor"+o]).focus(),!0),this.serialize=()=>u.serialize.call(this)}render(){const o=a.uniqueId("perseus_dropdown_");return r("div",{className:"perseus-widget-dropdown",children:[r("div",{className:"dropdown-info",children:["Dropdown",t(p,{children:r("p",{children:["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.']})})]}),r("div",{className:"dropdown-placeholder",children:[t("input",{type:"text",placeholder:"Placeholder value",value:this.props.placeholder,onChange:this.onPlaceholderChange}),t(p,{children:t("p",{children:"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."})})]}),t("div",{className:"clearfix"}),t("ul",{className:"dropdown-choices",children:this.props.choices.map(function(n,e){const s=n.correct?"correct":"incorrect";return t("li",{children:r("div",{children:[t("input",{ref:"radio"+e,type:"radio",name:o,checked:n.correct?"checked":"",onChange:this.onCorrectChange.bind(this,e),value:e}),t("input",{type:"text",ref:"editor"+e,onChange:this.onContentChange.bind(this,e),className:s,value:n.content}),t("a",{href:"#",className:"simple-button orange","aria-label":"Delete choice",onClick:this.removeChoice.bind(this,e),children:t("span",{className:"remove-choice",children:t(h,{...v})})})]})},""+e)},this)}),t("div",{className:"add-choice-container",children:r("a",{href:"#",className:"simple-button orange",onClick:this.addChoice,children:[t(h,{...g})," Add a choice"," "]})})]})}};c.propTypes={choices:i.arrayOf(i.shape({content:i.string,correct:i.bool})),placeholder:i.string},c.widgetName="dropdown",c.defaultProps={placeholder:"",choices:[{content:"",correct:!1}]};let l=c;l.__docgenInfo={description:"",methods:[{name:"onPlaceholderChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"onCorrectChange",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null}],returns:null},{name:"onContentChange",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"addChoice",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"removeChoice",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"DropdownEditor",props:{placeholder:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},choices:{defaultValue:{value:`[ { content: "", correct: false, diff --git a/assets/dropdown-editor.stories-ReLil4hd.js b/assets/dropdown-editor.stories-6WjiMTKJ.js similarity index 65% rename from assets/dropdown-editor.stories-ReLil4hd.js rename to assets/dropdown-editor.stories-6WjiMTKJ.js index 8f5be64717..473781f64f 100644 --- a/assets/dropdown-editor.stories-ReLil4hd.js +++ b/assets/dropdown-editor.stories-6WjiMTKJ.js @@ -1,3 +1,3 @@ -import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{a as m}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{D as e}from"./dropdown-editor-YwuHUUGx.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./editor-jsonify-iuVqcZSO.js";import"./index-0C4KXdeC.js";const tr={title:"PerseusEditor/Widgets/Dropdown Editor"},o=a=>p(e,{onChange:m("onChange")});o.__docgenInfo={description:"",methods:[],displayName:"Default"};var r,t,i;o.parameters={...o.parameters,docs:{...(r=o.parameters)==null?void 0:r.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{a as m}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{D as e}from"./dropdown-editor-z4XV_Nz9.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./editor-jsonify-SX5E4P_Y.js";import"./index-k-0mNqHS.js";const tr={title:"PerseusEditor/Widgets/Dropdown Editor"},o=a=>p(e,{onChange:m("onChange")});o.__docgenInfo={description:"",methods:[],displayName:"Default"};var r,t,i;o.parameters={...o.parameters,docs:{...(r=o.parameters)==null?void 0:r.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(i=(t=o.parameters)==null?void 0:t.docs)==null?void 0:i.source}}};const ir=["Default"];export{o as Default,ir as __namedExportsOrder,tr as default}; diff --git a/assets/dropdown.stories-fsJ_RKEi.js b/assets/dropdown.stories-6_EzhcMU.js similarity index 67% rename from assets/dropdown.stories-fsJ_RKEi.js rename to assets/dropdown.stories-6_EzhcMU.js index 65fd5af33a..eceeba226e 100644 --- a/assets/dropdown.stories-fsJ_RKEi.js +++ b/assets/dropdown.stories-6_EzhcMU.js @@ -1,3 +1,3 @@ -import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{R as m}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const e={content:"The total number of boxes the forklift can carry is [[☃ dropdown 1]] $60$.",images:{},widgets:{"dropdown 1":{type:"dropdown",alignment:"default",static:!1,graded:!0,options:{static:!1,placeholder:"greater/less than or equal to",choices:[{content:"greater than or equal to",correct:!1},{content:"less than or equal to",correct:!0}]},version:{major:0,minor:0}}}},Xt={title:"Perseus/Widgets/Dropdown"},t=s=>p(m,{question:e});t.__docgenInfo={description:"",methods:[],displayName:"Question1"};var o,r,i;t.parameters={...t.parameters,docs:{...(o=t.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{R as m}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const e={content:"The total number of boxes the forklift can carry is [[☃ dropdown 1]] $60$.",images:{},widgets:{"dropdown 1":{type:"dropdown",alignment:"default",static:!1,graded:!0,options:{static:!1,placeholder:"greater/less than or equal to",choices:[{content:"greater than or equal to",correct:!1},{content:"less than or equal to",correct:!0}]},version:{major:0,minor:0}}}},Xt={title:"Perseus/Widgets/Dropdown"},t=s=>p(m,{question:e});t.__docgenInfo={description:"",methods:[],displayName:"Question1"};var o,r,i;t.parameters={...t.parameters,docs:{...(o=t.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(i=(r=t.parameters)==null?void 0:r.docs)==null?void 0:i.source}}};const Yt=["Question1"];export{t as Question1,Yt as __namedExportsOrder,Xt as default}; diff --git a/assets/editor-bnXHS4_2.js b/assets/editor-0vKo6Oc_.js similarity index 91% rename from assets/editor-bnXHS4_2.js rename to assets/editor-0vKo6Oc_.js index 74deb5e619..3291519a97 100644 --- a/assets/editor-bnXHS4_2.js +++ b/assets/editor-0vKo6Oc_.js @@ -1 +1 @@ -import{j as t,a}from"./jsx-runtime-FVsy8kgq.js";import{c as v,p as N}from"./article-renderer-6f7Dak4j.js";import{_ as l}from"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as g}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import{B as O}from"./base-radio-ffaiqOwN.js";import{c as k}from"./components-GHvuFaIn.js";import{I as T}from"./icon-paths-AuJwhOz7.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{C as p}from"./index-QCAhLhLD.js";import{P as n}from"./index-0C4KXdeC.js";import{r as y}from"./index-TT1qJ6UJ.js";import{E as C}from"./editor-HVcPyY4Q.js";const{InlineIcon:h}=k,{iconPlus:b,iconTrash:A}=T,m=class m extends y.Component{render(){const e=this.props.choice.correct?"correct":"incorrect";let s="Type a choice here...";this.props.choice.isNoneOfTheAbove&&(s=this.props.choice.correct?"Type the answer to reveal to the user...":"None of the above");const o=t(C,{ref:"content-editor",apiOptions:this.props.apiOptions,content:this.props.choice.content||"",widgetEnabled:!1,placeholder:s,disabled:this.props.choice.isNoneOfTheAbove&&!this.props.choice.correct,onChange:this.props.onContentChange}),i=t(C,{ref:"clue-editor",apiOptions:this.props.apiOptions,content:this.props.choice.clue||"",widgetEnabled:!1,placeholder:`Why is this choice ${e}?`,onChange:this.props.onClueChange}),r=t("a",{className:"simple-button orange delete-choice",href:"#",onClick:f=>{f.stopPropagation(),f.preventDefault(),this.props.onDelete()},title:"Remove this choice",children:t(h,{...A})});return a("div",{className:"choice-clue-editors",children:[t("div",{className:`choice-editor ${e}`,children:o}),t("div",{className:"clue-editor",children:i}),this.props.showDelete&&r]})}};m.propTypes={apiOptions:g.propTypes,choice:n.object,showDelete:n.bool,onClueChange:n.func,onContentChange:n.func,onDelete:n.func};let u=m;const c=class c extends y.Component{constructor(){super(...arguments),this.change=(...e)=>v.apply(this,e),this.onMultipleSelectChange=e=>{e=e.multipleSelect;const s=l.reduce(this.props.choices,function(o,i){return i.correct?o+1:o},0);if(!e&&s>1){const o=l.map(this.props.choices,function(i){return l.defaults({correct:!1},i)});this.props.onChange({multipleSelect:e,choices:o})}else this.props.onChange({multipleSelect:e})},this.onCountChoicesChange=e=>{e=e.countChoices,this.props.onChange({countChoices:e})},this.onChange=({checked:e})=>{const s=l.map(this.props.choices,(o,i)=>l.extend({},o,{correct:e[i],content:o.isNoneOfTheAbove&&!e[i]?"":o.content}));this.props.onChange({choices:s})},this.onContentChange=(e,s)=>{const o=this.props.choices.slice();o[e]=l.extend({},o[e],{content:s}),this.props.onChange({choices:o})},this.onClueChange=(e,s)=>{const o=this.props.choices.slice();o[e]=l.extend({},o[e],{clue:s}),s===""&&delete o[e].clue,this.props.onChange({choices:o})},this.onDelete=e=>{const s=this.props.choices.slice(),o=s[e];s.splice(e,1),this.props.onChange({choices:s,hasNoneOfTheAbove:this.props.hasNoneOfTheAbove&&!o.isNoneOfTheAbove})},this.addChoice=(e,s)=>{s.preventDefault();const o=this.props.choices.slice(),i={isNoneOfTheAbove:e},r=o.length-(this.props.hasNoneOfTheAbove?1:0);o.splice(r,0,i),this.props.onChange({choices:o,hasNoneOfTheAbove:e||this.props.hasNoneOfTheAbove},()=>{this.refs[`choice-editor${r}`].refs["content-editor"].focus()})},this.setDisplayCount=e=>{this.props.onChange({displayCount:e})},this.focus=()=>(this.refs["choice-editor0"].refs["content-editor"].focus(),!0),this.getSaveWarnings=()=>l.some(l.pluck(this.props.choices,"correct"))?[]:["No choice is marked as correct."],this.serialize=()=>l.pick(this.props,"choices","randomize","multipleSelect","countChoices","displayCount","hasNoneOfTheAbove","deselectEnabled")}render(){const e=l.reduce(this.props.choices,function(s,o){return o.correct?s+1:s},0);return a("div",{children:[a("div",{className:"perseus-widget-row",children:[t("a",{href:"https://docs.google.com/document/d/1frZf7yrWVWb1n4tVjqlzqVUiv1pn4cZXbxgP62-JDBY/edit#heading=h.8ng1isya19nu",target:"_blank",children:"Multiple choice style guide"}),t("br",{}),t("div",{className:"perseus-widget-left-col",children:t(p,{label:"Multiple selections",checked:this.props.multipleSelect,onChange:s=>{this.onMultipleSelectChange({multipleSelect:s})}})}),t("div",{className:"perseus-widget-right-col",children:t(p,{label:"Randomize order",checked:this.props.randomize,onChange:s=>{this.props.onChange({randomize:s})}})}),this.props.multipleSelect&&t("div",{className:"perseus-widget-left-col",children:t(p,{label:"Specify number correct",checked:this.props.countChoices,onChange:s=>{this.onCountChoicesChange({countChoices:s})}})})]}),t(O,{multipleSelect:this.props.multipleSelect,countChoices:this.props.countChoices,numCorrect:e,editMode:!0,labelWrap:!1,apiOptions:this.props.apiOptions,choices:this.props.choices.map((s,o)=>({content:t(u,{ref:`choice-editor${o}`,apiOptions:this.props.apiOptions,choice:s,onContentChange:i=>{"content"in i&&this.onContentChange(o,i.content)},onClueChange:i=>{"content"in i&&this.onClueChange(o,i.content)},onDelete:()=>this.onDelete(o),showDelete:this.props.choices.length>=2}),isNoneOfTheAbove:s.isNoneOfTheAbove,checked:s.correct}),this),onChange:this.onChange}),a("div",{className:"add-choice-container",children:[a("a",{className:"simple-button orange",href:"#",onClick:this.addChoice.bind(this,!1),children:[t(h,{...b})," Add a choice"," "]}),!this.props.hasNoneOfTheAbove&&a("a",{className:"simple-button",href:"#",onClick:this.addChoice.bind(this,!0),children:[t(h,{...b})," None of the above"," "]})]})]})}};c.propTypes={...N,apiOptions:g.propTypes,choices:n.arrayOf(n.shape({content:n.string,clue:n.string,correct:n.bool})),displayCount:n.number,randomize:n.bool,hasNoneOfTheAbove:n.bool,multipleSelect:n.bool,countChoices:n.bool,deselectEnabled:n.bool,static:n.bool},c.widgetName="radio",c.defaultProps={choices:[{},{},{},{}],displayCount:null,randomize:!1,hasNoneOfTheAbove:!1,multipleSelect:!1,countChoices:!1,deselectEnabled:!1};let d=c;d.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"onMultipleSelectChange",docblock:null,modifiers:[],params:[{name:"allowMultiple",optional:!1,type:null}],returns:null},{name:"onCountChoicesChange",docblock:null,modifiers:[],params:[{name:"count",optional:!1,type:null}],returns:null},{name:"onChange",docblock:null,modifiers:[],params:[{name:"{checked}",optional:!1,type:null}],returns:null},{name:"onContentChange",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null},{name:"newContent",optional:!1,type:null}],returns:null},{name:"onClueChange",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null},{name:"newClue",optional:!1,type:null}],returns:null},{name:"onDelete",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null}],returns:null},{name:"addChoice",docblock:null,modifiers:[],params:[{name:"noneOfTheAbove",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"setDisplayCount",docblock:null,modifiers:[],params:[{name:"num",optional:!1,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"RadioEditor",props:{choices:{defaultValue:{value:"[{}, {}, {}, {}]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"shape",value:{content:{name:"string",required:!1},clue:{name:"string",required:!1},correct:{name:"bool",required:!1}}}},required:!1},displayCount:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"number"},required:!1},randomize:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},hasNoneOfTheAbove:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},multipleSelect:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},countChoices:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},deselectEnabled:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},apiOptions:{description:"",type:{name:"custom",raw:"ApiOptions.propTypes"},required:!1},static:{description:"",type:{name:"bool"},required:!1}},composes:["@khanacademy/perseus"]};export{d as R}; +import{j as t,a}from"./jsx-runtime-FVsy8kgq.js";import{c as v,p as N}from"./article-renderer-TMdCDA85.js";import{_ as l}from"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as g}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import{B as O}from"./base-radio-TdBv-OLd.js";import{c as k}from"./components-h6HHhmoA.js";import{I as T}from"./icon-paths-AuJwhOz7.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{C as p}from"./index-QCAhLhLD.js";import{P as n}from"./index-k-0mNqHS.js";import{r as y}from"./index-TT1qJ6UJ.js";import{E as C}from"./editor-I-vnrXtz.js";const{InlineIcon:h}=k,{iconPlus:b,iconTrash:A}=T,m=class m extends y.Component{render(){const e=this.props.choice.correct?"correct":"incorrect";let s="Type a choice here...";this.props.choice.isNoneOfTheAbove&&(s=this.props.choice.correct?"Type the answer to reveal to the user...":"None of the above");const o=t(C,{ref:"content-editor",apiOptions:this.props.apiOptions,content:this.props.choice.content||"",widgetEnabled:!1,placeholder:s,disabled:this.props.choice.isNoneOfTheAbove&&!this.props.choice.correct,onChange:this.props.onContentChange}),i=t(C,{ref:"clue-editor",apiOptions:this.props.apiOptions,content:this.props.choice.clue||"",widgetEnabled:!1,placeholder:`Why is this choice ${e}?`,onChange:this.props.onClueChange}),r=t("a",{className:"simple-button orange delete-choice",href:"#",onClick:f=>{f.stopPropagation(),f.preventDefault(),this.props.onDelete()},title:"Remove this choice",children:t(h,{...A})});return a("div",{className:"choice-clue-editors",children:[t("div",{className:`choice-editor ${e}`,children:o}),t("div",{className:"clue-editor",children:i}),this.props.showDelete&&r]})}};m.propTypes={apiOptions:g.propTypes,choice:n.object,showDelete:n.bool,onClueChange:n.func,onContentChange:n.func,onDelete:n.func};let u=m;const c=class c extends y.Component{constructor(){super(...arguments),this.change=(...e)=>v.apply(this,e),this.onMultipleSelectChange=e=>{e=e.multipleSelect;const s=l.reduce(this.props.choices,function(o,i){return i.correct?o+1:o},0);if(!e&&s>1){const o=l.map(this.props.choices,function(i){return l.defaults({correct:!1},i)});this.props.onChange({multipleSelect:e,choices:o})}else this.props.onChange({multipleSelect:e})},this.onCountChoicesChange=e=>{e=e.countChoices,this.props.onChange({countChoices:e})},this.onChange=({checked:e})=>{const s=l.map(this.props.choices,(o,i)=>l.extend({},o,{correct:e[i],content:o.isNoneOfTheAbove&&!e[i]?"":o.content}));this.props.onChange({choices:s})},this.onContentChange=(e,s)=>{const o=this.props.choices.slice();o[e]=l.extend({},o[e],{content:s}),this.props.onChange({choices:o})},this.onClueChange=(e,s)=>{const o=this.props.choices.slice();o[e]=l.extend({},o[e],{clue:s}),s===""&&delete o[e].clue,this.props.onChange({choices:o})},this.onDelete=e=>{const s=this.props.choices.slice(),o=s[e];s.splice(e,1),this.props.onChange({choices:s,hasNoneOfTheAbove:this.props.hasNoneOfTheAbove&&!o.isNoneOfTheAbove})},this.addChoice=(e,s)=>{s.preventDefault();const o=this.props.choices.slice(),i={isNoneOfTheAbove:e},r=o.length-(this.props.hasNoneOfTheAbove?1:0);o.splice(r,0,i),this.props.onChange({choices:o,hasNoneOfTheAbove:e||this.props.hasNoneOfTheAbove},()=>{this.refs[`choice-editor${r}`].refs["content-editor"].focus()})},this.setDisplayCount=e=>{this.props.onChange({displayCount:e})},this.focus=()=>(this.refs["choice-editor0"].refs["content-editor"].focus(),!0),this.getSaveWarnings=()=>l.some(l.pluck(this.props.choices,"correct"))?[]:["No choice is marked as correct."],this.serialize=()=>l.pick(this.props,"choices","randomize","multipleSelect","countChoices","displayCount","hasNoneOfTheAbove","deselectEnabled")}render(){const e=l.reduce(this.props.choices,function(s,o){return o.correct?s+1:s},0);return a("div",{children:[a("div",{className:"perseus-widget-row",children:[t("a",{href:"https://docs.google.com/document/d/1frZf7yrWVWb1n4tVjqlzqVUiv1pn4cZXbxgP62-JDBY/edit#heading=h.8ng1isya19nu",target:"_blank",children:"Multiple choice style guide"}),t("br",{}),t("div",{className:"perseus-widget-left-col",children:t(p,{label:"Multiple selections",checked:this.props.multipleSelect,onChange:s=>{this.onMultipleSelectChange({multipleSelect:s})}})}),t("div",{className:"perseus-widget-right-col",children:t(p,{label:"Randomize order",checked:this.props.randomize,onChange:s=>{this.props.onChange({randomize:s})}})}),this.props.multipleSelect&&t("div",{className:"perseus-widget-left-col",children:t(p,{label:"Specify number correct",checked:this.props.countChoices,onChange:s=>{this.onCountChoicesChange({countChoices:s})}})})]}),t(O,{multipleSelect:this.props.multipleSelect,countChoices:this.props.countChoices,numCorrect:e,editMode:!0,labelWrap:!1,apiOptions:this.props.apiOptions,choices:this.props.choices.map((s,o)=>({content:t(u,{ref:`choice-editor${o}`,apiOptions:this.props.apiOptions,choice:s,onContentChange:i=>{"content"in i&&this.onContentChange(o,i.content)},onClueChange:i=>{"content"in i&&this.onClueChange(o,i.content)},onDelete:()=>this.onDelete(o),showDelete:this.props.choices.length>=2}),isNoneOfTheAbove:s.isNoneOfTheAbove,checked:s.correct}),this),onChange:this.onChange}),a("div",{className:"add-choice-container",children:[a("a",{className:"simple-button orange",href:"#",onClick:this.addChoice.bind(this,!1),children:[t(h,{...b})," Add a choice"," "]}),!this.props.hasNoneOfTheAbove&&a("a",{className:"simple-button",href:"#",onClick:this.addChoice.bind(this,!0),children:[t(h,{...b})," None of the above"," "]})]})]})}};c.propTypes={...N,apiOptions:g.propTypes,choices:n.arrayOf(n.shape({content:n.string,clue:n.string,correct:n.bool})),displayCount:n.number,randomize:n.bool,hasNoneOfTheAbove:n.bool,multipleSelect:n.bool,countChoices:n.bool,deselectEnabled:n.bool,static:n.bool},c.widgetName="radio",c.defaultProps={choices:[{},{},{},{}],displayCount:null,randomize:!1,hasNoneOfTheAbove:!1,multipleSelect:!1,countChoices:!1,deselectEnabled:!1};let d=c;d.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"onMultipleSelectChange",docblock:null,modifiers:[],params:[{name:"allowMultiple",optional:!1,type:null}],returns:null},{name:"onCountChoicesChange",docblock:null,modifiers:[],params:[{name:"count",optional:!1,type:null}],returns:null},{name:"onChange",docblock:null,modifiers:[],params:[{name:"{checked}",optional:!1,type:null}],returns:null},{name:"onContentChange",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null},{name:"newContent",optional:!1,type:null}],returns:null},{name:"onClueChange",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null},{name:"newClue",optional:!1,type:null}],returns:null},{name:"onDelete",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null}],returns:null},{name:"addChoice",docblock:null,modifiers:[],params:[{name:"noneOfTheAbove",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"setDisplayCount",docblock:null,modifiers:[],params:[{name:"num",optional:!1,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"RadioEditor",props:{choices:{defaultValue:{value:"[{}, {}, {}, {}]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"shape",value:{content:{name:"string",required:!1},clue:{name:"string",required:!1},correct:{name:"bool",required:!1}}}},required:!1},displayCount:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"number"},required:!1},randomize:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},hasNoneOfTheAbove:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},multipleSelect:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},countChoices:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},deselectEnabled:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},apiOptions:{description:"",type:{name:"custom",raw:"ApiOptions.propTypes"},required:!1},static:{description:"",type:{name:"bool"},required:!1}},composes:["@khanacademy/perseus"]};export{d as R}; diff --git a/assets/editor-HVcPyY4Q.js b/assets/editor-I-vnrXtz.js similarity index 97% rename from assets/editor-HVcPyY4Q.js rename to assets/editor-I-vnrXtz.js index ce9e3ec19a..64948415cd 100644 --- a/assets/editor-HVcPyY4Q.js +++ b/assets/editor-I-vnrXtz.js @@ -1,4 +1,4 @@ -import{j as X,a as j0,F as bi}from"./jsx-runtime-FVsy8kgq.js";import{a as wi,S as Si,d as ki}from"./article-renderer-6f7Dak4j.js";import{_ as j,$ as Ai}from"./jquery-yG1GhClm.js";import{U as H0,P as Ci,E as Bi}from"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import{d as Ut,g as Mi,s as zi,u as Ti,e as Ei,f as Aa,h as Di,i as _i,P as Ht,j as qi}from"./renderer-vBOYiNCS.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import{L as Ni}from"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./dependencies-8XILypbq.js";import"./version-akiLXZts.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{c as Fi,g as Ii}from"./_commonjsHelpers-4gQjN7DL.js";import{r as we}from"./index-TT1qJ6UJ.js";import{P as et}from"./index-0C4KXdeC.js";import{c as Oi}from"./components-GHvuFaIn.js";import{I as Ri}from"./icon-paths-AuJwhOz7.js";import{u as Li}from"./index-6h5t6F0w.js";import{S as Pi}from"./index-qUyqkRvh.js";import{S as $i}from"./index-SM3muJE2.js";import{S as Wi}from"./section-control-button-c-G3Veu9.js";import{T as Hi}from"./tex-error-view-Y2BSLjwB.js";var Ma={exports:{}};(function(l,h){(function(S,B){l.exports=B()})(typeof self<"u"?self:Fi,function(){return function(v){var S={};function B(M){if(S[M])return S[M].exports;var N=S[M]={i:M,l:!1,exports:{}};return v[M].call(N.exports,N,N.exports,B),N.l=!0,N.exports}return B.m=v,B.c=S,B.d=function(M,N,R){B.o(M,N)||Object.defineProperty(M,N,{enumerable:!0,get:R})},B.r=function(M){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(M,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(M,"__esModule",{value:!0})},B.t=function(M,N){if(N&1&&(M=B(M)),N&8||N&4&&typeof M=="object"&&M&&M.__esModule)return M;var R=Object.create(null);if(B.r(R),Object.defineProperty(R,"default",{enumerable:!0,value:M}),N&2&&typeof M!="string")for(var C in M)B.d(R,C,(function(n0){return M[n0]}).bind(null,C));return R},B.n=function(M){var N=M&&M.__esModule?function(){return M.default}:function(){return M};return B.d(N,"a",N),N},B.o=function(M,N){return Object.prototype.hasOwnProperty.call(M,N)},B.p="",B(B.s=1)}([function(v,S,B){},function(v,S,B){B.r(S),B(0);var M=function(){function o(e,t,r){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=t,this.end=r}return o.range=function(t,r){return r?!t||!t.loc||!r.loc||t.loc.lexer!==r.loc.lexer?null:new o(t.loc.lexer,t.loc.start,r.loc.end):t&&t.loc},o}(),N=function(){function o(t,r){this.text=void 0,this.loc=void 0,this.text=t,this.loc=r}var e=o.prototype;return e.range=function(r,a){return new o(a,M.range(this,r))},o}(),R=function o(e,t){this.position=void 0;var r="KaTeX parse error: "+e,a,i=t&&t.loc;if(i&&i.start<=i.end){var u=i.lexer.input;a=i.start;var m=i.end;a===u.length?r+=" at end of input: ":r+=" at position "+(a+1)+": ";var d=u.slice(a,m).replace(/[^]/g,"$&̲"),f;a>15?f="…"+u.slice(a-15,a):f=u.slice(0,a);var x;m+15":">","<":"<",'"':""","'":"'"},k0=/[&><"']/g;function T0(o){return String(o).replace(k0,function(e){return Z[e]})}var Q=function o(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?o(e.body[0]):e:e.type==="font"?o(e.body):e},v0=function(e){var t=Q(e);return t.type==="mathord"||t.type==="textord"||t.type==="atom"},e0=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},A0=function(e){var t=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(e);return t!=null?t[1]:"_relative"},F={contains:n0,deflt:c0,escape:T0,hyphenate:a0,getBaseElem:Q,isCharacterBox:v0,protocolFromUrl:A0},Y0=function(){function o(t){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,t=t||{},this.displayMode=F.deflt(t.displayMode,!1),this.output=F.deflt(t.output,"htmlAndMathml"),this.leqno=F.deflt(t.leqno,!1),this.fleqn=F.deflt(t.fleqn,!1),this.throwOnError=F.deflt(t.throwOnError,!0),this.errorColor=F.deflt(t.errorColor,"#cc0000"),this.macros=t.macros||{},this.minRuleThickness=Math.max(0,F.deflt(t.minRuleThickness,0)),this.colorIsTextColor=F.deflt(t.colorIsTextColor,!1),this.strict=F.deflt(t.strict,"warn"),this.trust=F.deflt(t.trust,!1),this.maxSize=Math.max(0,F.deflt(t.maxSize,1/0)),this.maxExpand=Math.max(0,F.deflt(t.maxExpand,1e3))}var e=o.prototype;return e.reportNonstrict=function(r,a,i){var u=this.strict;if(typeof u=="function"&&(u=u(r,a,i)),!(!u||u==="ignore")){if(u===!0||u==="error")throw new C("LaTeX-incompatible input and strict mode is set to 'error': "+(a+" ["+r+"]"),i);u==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(a+" ["+r+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+u+"': "+a+" ["+r+"]"))}},e.useStrictBehavior=function(r,a,i){var u=this.strict;if(typeof u=="function")try{u=u(r,a,i)}catch{u="error"}return!u||u==="ignore"?!1:u===!0||u==="error"?!0:u==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(a+" ["+r+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+u+"': "+a+" ["+r+"]")),!1)},e.isTrusted=function(r){r.url&&!r.protocol&&(r.protocol=F.protocolFromUrl(r.url));var a=typeof this.trust=="function"?this.trust(r):this.trust;return!!a},o}(),_0=function(){function o(t,r,a){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=r,this.cramped=a}var e=o.prototype;return e.sup=function(){return W0[_a[this.id]]},e.sub=function(){return W0[qa[this.id]]},e.fracNum=function(){return W0[Na[this.id]]},e.fracDen=function(){return W0[Fa[this.id]]},e.cramp=function(){return W0[Ia[this.id]]},e.text=function(){return W0[Oa[this.id]]},e.isTight=function(){return this.size>=2},o}(),at=0,_e=1,he=2,G0=3,Se=4,N0=5,me=6,C0=7,W0=[new _0(at,0,!1),new _0(_e,0,!0),new _0(he,1,!1),new _0(G0,1,!0),new _0(Se,2,!1),new _0(N0,2,!0),new _0(me,3,!1),new _0(C0,3,!0)],_a=[Se,N0,Se,N0,me,C0,me,C0],qa=[N0,N0,N0,N0,C0,C0,C0,C0],Na=[he,G0,Se,N0,me,C0,me,C0],Fa=[G0,G0,N0,N0,C0,C0,C0,C0],Ia=[_e,_e,G0,G0,N0,N0,C0,C0],Oa=[at,_e,he,G0,he,G0,he,G0],$={DISPLAY:W0[at],TEXT:W0[he],SCRIPT:W0[Se],SCRIPTSCRIPT:W0[me]},nt=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function Ra(o){for(var e=0;e=a[0]&&o<=a[1])return t.name}return null}var ke=[];nt.forEach(function(o){return o.blocks.forEach(function(e){return ke.push.apply(ke,e)})});function jt(o){for(var e=0;e=ke[e]&&o<=ke[e+1])return!0;return!1}var de=80,La=function(e,t){return"M95,"+(622+e+t)+` +import{j as X,a as j0,F as bi}from"./jsx-runtime-FVsy8kgq.js";import{S as wi,d as Si}from"./article-renderer-TMdCDA85.js";import{_ as j,$ as ki}from"./jquery-yG1GhClm.js";import{U as H0,P as Ai,E as Ci}from"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import{d as Ut,g as Bi,s as Mi,u as zi,e as Ti,f as Aa,h as Ei,i as Di,P as Ht,j as _i}from"./renderer-hPmI_Chp.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import{L as qi}from"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./dependencies-8XILypbq.js";import"./version-akiLXZts.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{c as Ni,g as Fi}from"./_commonjsHelpers-4gQjN7DL.js";import{r as we}from"./index-TT1qJ6UJ.js";import{c as Ii}from"./index-fuycm_QE.js";import{P as et}from"./index-k-0mNqHS.js";import{c as Oi}from"./components-h6HHhmoA.js";import{I as Ri}from"./icon-paths-AuJwhOz7.js";import{u as Li}from"./index-6h5t6F0w.js";import{S as Pi}from"./index-qUyqkRvh.js";import{S as $i}from"./index-SM3muJE2.js";import{S as Wi}from"./section-control-button-J8oVp9bZ.js";import{T as Hi}from"./tex-error-view-Y2BSLjwB.js";var Ma={exports:{}};(function(l,h){(function(S,B){l.exports=B()})(typeof self<"u"?self:Ni,function(){return function(v){var S={};function B(M){if(S[M])return S[M].exports;var N=S[M]={i:M,l:!1,exports:{}};return v[M].call(N.exports,N,N.exports,B),N.l=!0,N.exports}return B.m=v,B.c=S,B.d=function(M,N,R){B.o(M,N)||Object.defineProperty(M,N,{enumerable:!0,get:R})},B.r=function(M){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(M,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(M,"__esModule",{value:!0})},B.t=function(M,N){if(N&1&&(M=B(M)),N&8||N&4&&typeof M=="object"&&M&&M.__esModule)return M;var R=Object.create(null);if(B.r(R),Object.defineProperty(R,"default",{enumerable:!0,value:M}),N&2&&typeof M!="string")for(var C in M)B.d(R,C,(function(n0){return M[n0]}).bind(null,C));return R},B.n=function(M){var N=M&&M.__esModule?function(){return M.default}:function(){return M};return B.d(N,"a",N),N},B.o=function(M,N){return Object.prototype.hasOwnProperty.call(M,N)},B.p="",B(B.s=1)}([function(v,S,B){},function(v,S,B){B.r(S),B(0);var M=function(){function o(e,t,r){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=t,this.end=r}return o.range=function(t,r){return r?!t||!t.loc||!r.loc||t.loc.lexer!==r.loc.lexer?null:new o(t.loc.lexer,t.loc.start,r.loc.end):t&&t.loc},o}(),N=function(){function o(t,r){this.text=void 0,this.loc=void 0,this.text=t,this.loc=r}var e=o.prototype;return e.range=function(r,a){return new o(a,M.range(this,r))},o}(),R=function o(e,t){this.position=void 0;var r="KaTeX parse error: "+e,a,i=t&&t.loc;if(i&&i.start<=i.end){var u=i.lexer.input;a=i.start;var m=i.end;a===u.length?r+=" at end of input: ":r+=" at position "+(a+1)+": ";var d=u.slice(a,m).replace(/[^]/g,"$&̲"),f;a>15?f="…"+u.slice(a-15,a):f=u.slice(0,a);var x;m+15":">","<":"<",'"':""","'":"'"},k0=/[&><"']/g;function T0(o){return String(o).replace(k0,function(e){return Z[e]})}var Q=function o(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?o(e.body[0]):e:e.type==="font"?o(e.body):e},v0=function(e){var t=Q(e);return t.type==="mathord"||t.type==="textord"||t.type==="atom"},e0=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},A0=function(e){var t=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(e);return t!=null?t[1]:"_relative"},F={contains:n0,deflt:c0,escape:T0,hyphenate:a0,getBaseElem:Q,isCharacterBox:v0,protocolFromUrl:A0},Y0=function(){function o(t){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,t=t||{},this.displayMode=F.deflt(t.displayMode,!1),this.output=F.deflt(t.output,"htmlAndMathml"),this.leqno=F.deflt(t.leqno,!1),this.fleqn=F.deflt(t.fleqn,!1),this.throwOnError=F.deflt(t.throwOnError,!0),this.errorColor=F.deflt(t.errorColor,"#cc0000"),this.macros=t.macros||{},this.minRuleThickness=Math.max(0,F.deflt(t.minRuleThickness,0)),this.colorIsTextColor=F.deflt(t.colorIsTextColor,!1),this.strict=F.deflt(t.strict,"warn"),this.trust=F.deflt(t.trust,!1),this.maxSize=Math.max(0,F.deflt(t.maxSize,1/0)),this.maxExpand=Math.max(0,F.deflt(t.maxExpand,1e3))}var e=o.prototype;return e.reportNonstrict=function(r,a,i){var u=this.strict;if(typeof u=="function"&&(u=u(r,a,i)),!(!u||u==="ignore")){if(u===!0||u==="error")throw new C("LaTeX-incompatible input and strict mode is set to 'error': "+(a+" ["+r+"]"),i);u==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(a+" ["+r+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+u+"': "+a+" ["+r+"]"))}},e.useStrictBehavior=function(r,a,i){var u=this.strict;if(typeof u=="function")try{u=u(r,a,i)}catch{u="error"}return!u||u==="ignore"?!1:u===!0||u==="error"?!0:u==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(a+" ["+r+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+u+"': "+a+" ["+r+"]")),!1)},e.isTrusted=function(r){r.url&&!r.protocol&&(r.protocol=F.protocolFromUrl(r.url));var a=typeof this.trust=="function"?this.trust(r):this.trust;return!!a},o}(),_0=function(){function o(t,r,a){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=r,this.cramped=a}var e=o.prototype;return e.sup=function(){return W0[_a[this.id]]},e.sub=function(){return W0[qa[this.id]]},e.fracNum=function(){return W0[Na[this.id]]},e.fracDen=function(){return W0[Fa[this.id]]},e.cramp=function(){return W0[Ia[this.id]]},e.text=function(){return W0[Oa[this.id]]},e.isTight=function(){return this.size>=2},o}(),at=0,_e=1,he=2,G0=3,Se=4,N0=5,me=6,C0=7,W0=[new _0(at,0,!1),new _0(_e,0,!0),new _0(he,1,!1),new _0(G0,1,!0),new _0(Se,2,!1),new _0(N0,2,!0),new _0(me,3,!1),new _0(C0,3,!0)],_a=[Se,N0,Se,N0,me,C0,me,C0],qa=[N0,N0,N0,N0,C0,C0,C0,C0],Na=[he,G0,Se,N0,me,C0,me,C0],Fa=[G0,G0,N0,N0,C0,C0,C0,C0],Ia=[_e,_e,G0,G0,N0,N0,C0,C0],Oa=[at,_e,he,G0,he,G0,he,G0],$={DISPLAY:W0[at],TEXT:W0[he],SCRIPT:W0[Se],SCRIPTSCRIPT:W0[me]},nt=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function Ra(o){for(var e=0;e=a[0]&&o<=a[1])return t.name}return null}var ke=[];nt.forEach(function(o){return o.blocks.forEach(function(e){return ke.push.apply(ke,e)})});function jt(o){for(var e=0;e=ke[e]&&o<=ke[e+1])return!0;return!1}var de=80,La=function(e,t){return"M95,"+(622+e+t)+` c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 @@ -228,7 +228,7 @@ M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Ae=function(){function o `+h0+" children.");for(var L0=0;L00&&(i.style.minWidth=u+"em"),i},Nn=function(e,t,r,a){var i,u=e.height+e.depth+2*r;if(/fbox|color/.test(t)){if(i=k.makeSpan(["stretchy",t],[],a),t==="fbox"){var m=a.color&&a.getColor();m&&(i.style.borderColor=m)}}else{var d=[];/^[bx]cancel$/.test(t)&&d.push(new st({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&d.push(new st({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new fe(d,{width:"100%",height:u+"em"});i=k.makeSvgSpan([],[f],a)}return i.height=u,i.style.height=u+"em",i},V0={encloseSpan:Nn,mathMLnode:En,svgSpan:qn},wt=function(e,t){var r,a,i=b0(e,"supsub"),u;i?(a=U(i.base,"accent"),r=a.base,i.base=r,u=ja(Y(i,t)),i.base=a):(a=U(e,"accent"),r=a.base);var m=Y(r,t.havingCrampedStyle()),d=a.isShifty&&F.isCharacterBox(r),f=0;if(d){var x=F.getBaseElem(r),w=Y(x,t.havingCrampedStyle());f=Qt(w).skew}var A=Math.min(m.height,t.fontMetrics().xHeight),E;if(a.isStretchy)E=V0.svgSpan(a,t),E=k.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:m},{type:"elem",elem:E,wrapperClasses:["svg-align"],wrapperStyle:f>0?{width:"calc(100% - "+2*f+"em)",marginLeft:2*f+"em"}:void 0}]},t);else{var D,q;a.label==="\\vec"?(D=k.staticSvg("vec",t),q=k.svgData.vec[1]):(D=k.makeOrd({mode:a.mode,text:a.label},t,"textord"),D=Qt(D),D.italic=0,q=D.width),E=k.makeSpan(["accent-body"],[D]);var O=a.label==="\\textcircled";O&&(E.classes.push("accent-full"),A=m.height);var H=f;O||(H-=q/2),E.style.left=H+"em",a.label==="\\textcircled"&&(E.style.top=".2em"),E=k.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:m},{type:"kern",size:-A},{type:"elem",elem:E}]},t)}var G=k.makeSpan(["mord","accent"],[E],t);return u?(u.children[0]=G,u.height=Math.max(G.height,u.height),u.classes[0]="mord",u):G},Ar=function(e,t){var r=e.isStretchy?V0.mathMLnode(e.label):new _.MathNode("mo",[O0(e.label,e.mode)]),a=new _.MathNode("mover",[i0(e.base,t),r]);return a.setAttribute("accent","true"),a},Fn=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(function(o){return"\\"+o}).join("|"));L({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(e,t){var r=t[0],a=!Fn.test(e.funcName),i=!a||e.funcName==="\\widehat"||e.funcName==="\\widetilde"||e.funcName==="\\widecheck";return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:a,isShifty:i,base:r}},htmlBuilder:wt,mathmlBuilder:Ar}),L({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var r=t[0];return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:wt,mathmlBuilder:Ar}),L({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(e,t){var r=e.parser,a=e.funcName,i=t[0];return{type:"accentUnder",mode:r.mode,label:a,base:i}},htmlBuilder:function(e,t){var r=Y(e.base,t),a=V0.svgSpan(e,t),i=e.label==="\\utilde"?.12:0,u=k.makeVList({positionType:"bottom",positionData:a.height+i,children:[{type:"elem",elem:a,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]},t);return k.makeSpan(["mord","accentunder"],[u],t)},mathmlBuilder:function(e,t){var r=V0.mathMLnode(e.label),a=new _.MathNode("munder",[i0(e.base,t),r]);return a.setAttribute("accentunder","true"),a}});var Xe=function(e){var t=new _.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};L({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium"],props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var a=e.parser,i=e.funcName;return{type:"xArrow",mode:a.mode,label:i,body:t[0],below:r[0]}},htmlBuilder:function(e,t){var r=t.style,a=t.havingStyle(r.sup()),i=k.wrapFragment(Y(e.body,a,t),t);i.classes.push("x-arrow-pad");var u;e.below&&(a=t.havingStyle(r.sub()),u=k.wrapFragment(Y(e.below,a,t),t),u.classes.push("x-arrow-pad"));var m=V0.svgSpan(e,t),d=-t.fontMetrics().axisHeight+.5*m.height,f=-t.fontMetrics().axisHeight-.5*m.height-.111;(i.depth>.25||e.label==="\\xleftequilibrium")&&(f-=i.depth);var x;if(u){var w=-t.fontMetrics().axisHeight+u.height+.5*m.height+.111;x=k.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:f},{type:"elem",elem:m,shift:d},{type:"elem",elem:u,shift:w}]},t)}else x=k.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:f},{type:"elem",elem:m,shift:d}]},t);return x.children[0].children[0].children[1].classes.push("svg-align"),k.makeSpan(["mrel","x-arrow"],[x],t)},mathmlBuilder:function(e,t){var r=V0.mathMLnode(e.label),a;if(e.body){var i=Xe(i0(e.body,t));if(e.below){var u=Xe(i0(e.below,t));a=new _.MathNode("munderover",[r,u,i])}else a=new _.MathNode("mover",[r,i])}else if(e.below){var m=Xe(i0(e.below,t));a=new _.MathNode("munder",[r,m])}else a=Xe(),a=new _.MathNode("mover",[r,a]);return a}}),L({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){for(var r=e.parser,a=U(t[0],"ordgroup"),i=a.body,u="",m=0;m","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],je=[0,1.2,1.8,2.4,3],Pn=function(e,t,r,a,i){if(e==="<"||e==="\\lt"||e==="⟨"?e="\\langle":(e===">"||e==="\\gt"||e==="⟩")&&(e="\\rangle"),F.contains(Er,e)||F.contains(Dr,e))return zr(e,t,!1,r,a,i);if(F.contains(Ln,e))return Tr(e,je[t],!1,r,a,i);throw new C("Illegal delimiter: '"+e+"'")},$n=[{type:"small",style:$.SCRIPTSCRIPT},{type:"small",style:$.SCRIPT},{type:"small",style:$.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],Wn=[{type:"small",style:$.SCRIPTSCRIPT},{type:"small",style:$.SCRIPT},{type:"small",style:$.TEXT},{type:"stack"}],_r=[{type:"small",style:$.SCRIPTSCRIPT},{type:"small",style:$.SCRIPT},{type:"small",style:$.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],Hn=function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},qr=function(e,t,r,a){for(var i=Math.min(2,3-a.style.size),u=i;ut)return r[u]}return r[r.length-1]},Nr=function(e,t,r,a,i,u){e==="<"||e==="\\lt"||e==="⟨"?e="\\langle":(e===">"||e==="\\gt"||e==="⟩")&&(e="\\rangle");var m;F.contains(Dr,e)?m=$n:F.contains(Er,e)?m=_r:m=Wn;var d=qr(e,t,m,a);return d.type==="small"?In(e,d.style,r,a,i,u):d.type==="large"?zr(e,d.size,r,a,i,u):Tr(e,t,r,a,i,u)},Gn=function(e,t,r,a,i,u){var m=a.fontMetrics().axisHeight*a.sizeMultiplier,d=901,f=5/a.fontMetrics().ptPerEm,x=Math.max(t-m,r+m),w=Math.max(x/500*d,2*x-f);return Nr(e,w,!0,a,i,u)},Q0={sqrtImage:Rn,sizedDelim:Pn,customSizedDelim:Nr,leftRightDelim:Gn},Fr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Un=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Ye(o,e){var t=He(o);if(t&&F.contains(Un,t.text))return t;throw new C("Invalid delimiter: '"+(t?t.text:JSON.stringify(o))+"' after '"+e.funcName+"'",o)}L({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1},handler:function(e,t){var r=Ye(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:Fr[e.funcName].size,mclass:Fr[e.funcName].mclass,delim:r.text}},htmlBuilder:function(e,t){return e.delim==="."?k.makeSpan([e.mclass]):Q0.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass])},mathmlBuilder:function(e){var t=[];e.delim!=="."&&t.push(O0(e.delim,e.mode));var r=new _.MathNode("mo",t);return e.mclass==="mopen"||e.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r}});function Ir(o){if(!o.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}L({type:"leftright-right",names:["\\right"],props:{numArgs:1},handler:function(e,t){var r=e.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new C("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Ye(t[0],e).text,color:r}}}),L({type:"leftright",names:["\\left"],props:{numArgs:1},handler:function(e,t){var r=Ye(t[0],e),a=e.parser;++a.leftrightDepth;var i=a.parseExpression(!1);--a.leftrightDepth,a.expect("\\right",!1);var u=U(a.parseFunction(),"leftright-right");return{type:"leftright",mode:a.mode,body:i,left:r.text,right:u.delim,rightColor:u.color}},htmlBuilder:function(e,t){Ir(e);for(var r=M0(e.body,t,!0,["mopen","mclose"]),a=0,i=0,u=!1,m=0;m-1?"mpadded":"menclose",[i0(e.body,t)]);switch(e.label){case"\\cancel":a.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":a.setAttribute("notation","downdiagonalstrike");break;case"\\sout":a.setAttribute("notation","horizontalstrike");break;case"\\fbox":a.setAttribute("notation","box");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,a.setAttribute("width","+"+2*r+"pt"),a.setAttribute("height","+"+2*r+"pt"),a.setAttribute("lspace",r+"pt"),a.setAttribute("voffset",r+"pt"),e.label==="\\fcolorbox"){var i=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);a.setAttribute("style","border: "+i+"em solid "+String(e.borderColor))}break;case"\\xcancel":a.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return e.backgroundColor&&a.setAttribute("mathbackground",e.backgroundColor),a};L({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,greediness:3,argTypes:["color","text"]},handler:function(e,t,r){var a=e.parser,i=e.funcName,u=U(t[0],"color-token").color,m=t[1];return{type:"enclose",mode:a.mode,label:i,backgroundColor:u,body:m}},htmlBuilder:Bt,mathmlBuilder:Mt}),L({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,greediness:3,argTypes:["color","color","text"]},handler:function(e,t,r){var a=e.parser,i=e.funcName,u=U(t[0],"color-token").color,m=U(t[1],"color-token").color,d=t[2];return{type:"enclose",mode:a.mode,label:i,backgroundColor:m,borderColor:u,body:d}},htmlBuilder:Bt,mathmlBuilder:Mt}),L({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(e,t){var r=e.parser;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}}),L({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout"],props:{numArgs:1},handler:function(e,t,r){var a=e.parser,i=e.funcName,u=t[0];return{type:"enclose",mode:a.mode,label:i,body:u}},htmlBuilder:Bt,mathmlBuilder:Mt});var Or={};function ee(o){for(var e=o.type,t=o.names,r=o.props,a=o.handler,i=o.htmlBuilder,u=o.mathmlBuilder,m={type:e,numArgs:r.numArgs||0,greediness:1,allowedInText:!1,numOptionalArgs:0,handler:a},d=0;d0&&(V+=.25),f.push({pos:V,isDashed:ka[Qe]})}for(r0(u[0]),r=0;r0&&(J+=G,o0=m)){var xe=void 0;(a>0||e.hskipBeforeAndAfter)&&(xe=F.deflt(X0.pregap,A),xe!==0&&(S0=k.makeSpan(["arraycolsep"],[]),S0.style.width=xe+"em",$0.push(S0)));var be=[];for(r=0;r0){for(var yi=k.makeLineSpan("hline",t,x),xi=k.makeLineSpan("hdashline",t,x),Wt=[{type:"elem",elem:d,shift:0}];f.length>0;){var wa=f.pop(),Sa=wa.pos-L0;wa.isDashed?Wt.push({type:"elem",elem:xi,shift:Sa}):Wt.push({type:"elem",elem:yi,shift:Sa})}d=k.makeVList({positionType:"individualShift",children:Wt},t)}return k.makeSpan(["mord"],[d],t)},Vn={c:"center ",l:"left ",r:"right "},re=function(e,t){var r=new _.MathNode("mtable",e.body.map(function(V){return new _.MathNode("mtr",V.map(function(r0){return new _.MathNode("mtd",[i0(r0,t)])}))})),a=e.arraystretch===.5?.1:.16+e.arraystretch-1+(e.addJot?.09:0);r.setAttribute("rowspacing",a+"em");var i="",u="";if(e.cols){var m=e.cols,d="",f=!1,x=0,w=m.length;m[0].type==="separator"&&(i+="top ",x=1),m[m.length-1].type==="separator"&&(i+="bottom ",w-=1);for(var A=x;A0?"left ":"",i+=H[H.length-1].length>0?"right ":"";for(var G=1;G0&&A&&(q=1),r[E]={type:"align",align:D,pregap:q,postgap:0}}return a.colSeparationType=A?"align":"alignat",a};ee({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(e,t){var r=He(t[0]),a=r?[t[0]]:U(t[0],"ordgroup").body,i=a.map(function(m){var d=vr(m),f=d.text;if("lcr".indexOf(f)!==-1)return{type:"align",align:f};if(f==="|")return{type:"separator",separator:"|"};if(f===":")return{type:"separator",separator:":"};throw new C("Unknown column alignment: "+f,m)}),u={cols:i,hskipBeforeAndAfter:!0};return ce(e.parser,u,zt(e.envName))},htmlBuilder:te,mathmlBuilder:re}),ee({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix"],props:{numArgs:0},handler:function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName],r={hskipBeforeAndAfter:!1},a=ce(e.parser,r,zt(e.envName));return t?{type:"leftright",mode:e.mode,body:[a],left:t[0],right:t[1],rightColor:void 0}:a},htmlBuilder:te,mathmlBuilder:re}),ee({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(e){var t={arraystretch:.5},r=ce(e.parser,t,"script");return r.colSeparationType="small",r},htmlBuilder:te,mathmlBuilder:re}),ee({type:"array",names:["subarray"],props:{numArgs:1},handler:function(e,t){var r=He(t[0]),a=r?[t[0]]:U(t[0],"ordgroup").body,i=a.map(function(m){var d=vr(m),f=d.text;if("lc".indexOf(f)!==-1)return{type:"align",align:f};throw new C("Unknown column alignment: "+f,m)});if(i.length>1)throw new C("{subarray} can contain only one column");var u={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5};if(u=ce(e.parser,u,"script"),u.body[0].length>1)throw new C("{subarray} can contain only one column");return u},htmlBuilder:te,mathmlBuilder:re}),ee({type:"array",names:["cases","dcases"],props:{numArgs:0},handler:function(e){var t={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=ce(e.parser,t,zt(e.envName));return{type:"leftright",mode:e.mode,body:[r],left:"\\{",right:".",rightColor:void 0}},htmlBuilder:te,mathmlBuilder:re}),ee({type:"array",names:["aligned"],props:{numArgs:0},handler:Lr,htmlBuilder:te,mathmlBuilder:re}),ee({type:"array",names:["gathered"],props:{numArgs:0},handler:function(e){var t={cols:[{type:"align",align:"c"}],addJot:!0};return ce(e.parser,t,"display")},htmlBuilder:te,mathmlBuilder:re}),ee({type:"array",names:["alignedat"],props:{numArgs:1},handler:Lr,htmlBuilder:te,mathmlBuilder:re}),L({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler:function(e,t){throw new C(e.funcName+" valid only within array environment")}});var Xn=Or,Pr=Xn;L({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler:function(e,t){var r=e.parser,a=e.funcName,i=t[0];if(i.type!=="ordgroup")throw new C("Invalid environment name",i);for(var u="",m=0;m=$.SCRIPT.id?r.text():$.DISPLAY:e==="text"&&r.size===$.DISPLAY.size?r=$.TEXT:e==="script"?r=$.SCRIPT:e==="scriptscript"&&(r=$.SCRIPTSCRIPT),r},Et=function(e,t){var r=Vr(e.size,t.style),a=r.fracNum(),i=r.fracDen(),u;u=t.havingStyle(a);var m=Y(e.numer,u,t);if(e.continued){var d=8.5/t.fontMetrics().ptPerEm,f=3.5/t.fontMetrics().ptPerEm;m.height=m.height0?q=3*E:q=7*E,O=t.fontMetrics().denom1):(A>0?(D=t.fontMetrics().num2,q=E):(D=t.fontMetrics().num3,q=3*E),O=t.fontMetrics().denom2);var H;if(w){var V=t.fontMetrics().axisHeight;D-m.depth-(V+.5*A)0&&(t=e,t=t==="."?null:t),t};L({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,greediness:6,argTypes:["math","math","size","text","math","math"]},handler:function(e,t){var r=e.parser,a=t[4],i=t[5],u=b0(t[0],"atom");u&&(u=fr(t[0],"open"));var m=u?jr(u.text):null,d=b0(t[1],"atom");d&&(d=fr(t[1],"close"));var f=d?jr(d.text):null,x=U(t[2],"size"),w,A=null;x.isBlank?w=!0:(A=x.value,w=A.number>0);var E="auto",D=b0(t[3],"ordgroup");if(D){if(D.body.length>0){var q=U(D.body[0],"textord");E=Xr[Number(q.text)]}}else D=U(t[3],"textord"),E=Xr[Number(D.text)];return{type:"genfrac",mode:r.mode,numer:a,denom:i,continued:!1,hasBarLine:w,barSize:A,leftDelim:m,rightDelim:f,size:E}},htmlBuilder:Et,mathmlBuilder:Dt}),L({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(e,t){var r=e.parser;e.funcName;var a=e.token;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:U(t[0],"size").value,token:a}}}),L({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(e,t){var r=e.parser;e.funcName;var a=t[0],i=e0(U(t[1],"infix").size),u=t[2],m=i.number>0;return{type:"genfrac",mode:r.mode,numer:a,denom:u,continued:!1,hasBarLine:m,barSize:i,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:Et,mathmlBuilder:Dt});var Yr=function(e,t){var r=t.style,a,i,u=b0(e,"supsub");u?(a=u.sup?Y(u.sup,t.havingStyle(r.sup()),t):Y(u.sub,t.havingStyle(r.sub()),t),i=U(u.base,"horizBrace")):i=U(e,"horizBrace");var m=Y(i.base,t.havingBaseStyle($.DISPLAY)),d=V0.svgSpan(i,t),f;if(i.isOver?(f=k.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:m},{type:"kern",size:.1},{type:"elem",elem:d}]},t),f.children[0].children[0].children[1].classes.push("svg-align")):(f=k.makeVList({positionType:"bottom",positionData:m.depth+.1+d.height,children:[{type:"elem",elem:d},{type:"kern",size:.1},{type:"elem",elem:m}]},t),f.children[0].children[0].children[0].classes.push("svg-align")),a){var x=k.makeSpan(["mord",i.isOver?"mover":"munder"],[f],t);i.isOver?f=k.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:x},{type:"kern",size:.2},{type:"elem",elem:a}]},t):f=k.makeVList({positionType:"bottom",positionData:x.depth+.2+a.height+a.depth,children:[{type:"elem",elem:a},{type:"kern",size:.2},{type:"elem",elem:x}]},t)}return k.makeSpan(["mord",i.isOver?"mover":"munder"],[f],t)},Yn=function(e,t){var r=V0.mathMLnode(e.label);return new _.MathNode(e.isOver?"mover":"munder",[i0(e.base,t),r])};L({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(e,t){var r=e.parser,a=e.funcName;return{type:"horizBrace",mode:r.mode,label:a,isOver:/^\\over/.test(a),base:t[0]}},htmlBuilder:Yr,mathmlBuilder:Yn}),L({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(e,t){var r=e.parser,a=t[1],i=U(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:y0(a)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(e,t){var r=M0(e.body,t,!1);return k.makeAnchor(e.href,[],r,t)},mathmlBuilder:function(e,t){var r=le(e.body,t);return r instanceof I0||(r=new I0("mrow",[r])),r.setAttribute("href",e.href),r}}),L({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(e,t){var r=e.parser,a=U(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:a}))return r.formatUnsupportedCmd("\\url");for(var i=[],u=0;u0&&(a=f0(e.totalheight,t)-r,a=Number(a.toFixed(2)));var i=0;e.width.number>0&&(i=f0(e.width,t));var u={height:r+a+"em"};i>0&&(u.width=i+"em"),a>0&&(u.verticalAlign=-a+"em");var m=new Va(e.src,e.alt,u);return m.height=r,m.depth=a,m},mathmlBuilder:function(e,t){var r=new _.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var a=f0(e.height,t),i=0;if(e.totalheight.number>0&&(i=f0(e.totalheight,t)-a,i=i.toFixed(2),r.setAttribute("valign","-"+i+"em")),r.setAttribute("height",a+i+"em"),e.width.number>0){var u=f0(e.width,t);r.setAttribute("width",u+"em")}return r.setAttribute("src",e.src),r}}),L({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],allowedInText:!0},handler:function(e,t){var r=e.parser,a=e.funcName,i=U(t[0],"size");if(r.settings.strict){var u=a[1]==="m",m=i.value.unit==="mu";u?(m||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" works only in math mode")):m&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder:function(e,t){return k.makeGlue(e.dimension,t)},mathmlBuilder:function(e,t){var r=f0(e.dimension,t);return new _.SpaceNode(r)}}),L({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,a=e.funcName,i=t[0];return{type:"lap",mode:r.mode,alignment:a.slice(5),body:i}},htmlBuilder:function(e,t){var r;e.alignment==="clap"?(r=k.makeSpan([],[Y(e.body,t)]),r=k.makeSpan(["inner"],[r],t)):r=k.makeSpan(["inner"],[Y(e.body,t)]);var a=k.makeSpan(["fix"],[]),i=k.makeSpan([e.alignment],[r,a],t),u=k.makeSpan(["strut"]);return u.style.height=i.height+i.depth+"em",u.style.verticalAlign=-i.depth+"em",i.children.unshift(u),i=k.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i}]},t),k.makeSpan(["mord"],[i],t)},mathmlBuilder:function(e,t){var r=new _.MathNode("mpadded",[i0(e.body,t)]);if(e.alignment!=="rlap"){var a=e.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",a+"width")}return r.setAttribute("width","0px"),r}}),L({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var r=e.funcName,a=e.parser,i=a.mode;a.switchMode("math");var u=r==="\\("?"\\)":"$",m=a.parseExpression(!1,u);return a.expect(u),a.switchMode(i),{type:"styling",mode:a.mode,style:"text",body:m}}}),L({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){throw new C("Mismatched "+e.funcName)}});var Zr=function(e,t){switch(t.style.size){case $.DISPLAY.size:return e.display;case $.TEXT.size:return e.text;case $.SCRIPT.size:return e.script;case $.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};L({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4},handler:function(e,t){var r=e.parser;return{type:"mathchoice",mode:r.mode,display:y0(t[0]),text:y0(t[1]),script:y0(t[2]),scriptscript:y0(t[3])}},htmlBuilder:function(e,t){var r=Zr(e,t),a=M0(r,t,!1);return k.makeFragment(a)},mathmlBuilder:function(e,t){var r=Zr(e,t);return le(r,t)}});var Kr=function(e,t,r,a,i,u,m){e=k.makeSpan([],[e]);var d,f;if(t){var x=Y(t,a.havingStyle(i.sup()),a);f={elem:x,kern:Math.max(a.fontMetrics().bigOpSpacing1,a.fontMetrics().bigOpSpacing3-x.depth)}}if(r){var w=Y(r,a.havingStyle(i.sub()),a);d={elem:w,kern:Math.max(a.fontMetrics().bigOpSpacing2,a.fontMetrics().bigOpSpacing4-w.height)}}var A;if(f&&d){var E=a.fontMetrics().bigOpSpacing5+d.elem.height+d.elem.depth+d.kern+e.depth+m;A=k.makeVList({positionType:"bottom",positionData:E,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:d.elem,marginLeft:-u+"em"},{type:"kern",size:d.kern},{type:"elem",elem:e},{type:"kern",size:f.kern},{type:"elem",elem:f.elem,marginLeft:u+"em"},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else if(d){var D=e.height-m;A=k.makeVList({positionType:"top",positionData:D,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:d.elem,marginLeft:-u+"em"},{type:"kern",size:d.kern},{type:"elem",elem:e}]},a)}else if(f){var q=e.depth+m;A=k.makeVList({positionType:"bottom",positionData:q,children:[{type:"elem",elem:e},{type:"kern",size:f.kern},{type:"elem",elem:f.elem,marginLeft:u+"em"},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else return e;return k.makeSpan(["mop","op-limits"],[A],a)},Jr=["\\smallint"],ge=function(e,t){var r,a,i=!1,u,m=b0(e,"supsub");m?(r=m.sup,a=m.sub,u=U(m.base,"op"),i=!0):u=U(e,"op");var d=t.style,f=!1;d.size===$.DISPLAY.size&&u.symbol&&!F.contains(Jr,u.name)&&(f=!0);var x;if(u.symbol){var w=f?"Size2-Regular":"Size1-Regular",A="";if((u.name==="\\oiint"||u.name==="\\oiiint")&&(A=u.name.substr(1),u.name=A==="oiint"?"\\iint":"\\iiint"),x=k.makeSymbol(u.name,w,"math",t,["mop","op-symbol",f?"large-op":"small-op"]),A.length>0){var E=x.italic,D=k.staticSvg(A+"Size"+(f?"2":"1"),t);x=k.makeVList({positionType:"individualShift",children:[{type:"elem",elem:x,shift:0},{type:"elem",elem:D,shift:f?.08:0}]},t),u.name="\\"+A,x.classes.unshift("mop"),x.italic=E}}else if(u.body){var q=M0(u.body,t,!0);q.length===1&&q[0]instanceof F0?(x=q[0],x.classes[0]="mop"):x=k.makeSpan(["mop"],k.tryCombineChars(q),t)}else{for(var O=[],H=1;H0){for(var f=u.body.map(function(E){var D=E.text;return typeof D=="string"?{type:"textord",mode:E.mode,text:D}:E}),x=M0(f,t.withFont("mathrm"),!0),w=0;w=0?d.setAttribute("height","+"+i+"em"):(d.setAttribute("height",i+"em"),d.setAttribute("depth","+"+-i+"em")),d.setAttribute("voffset",i+"em"),d}});function ea(o,e,t){for(var r=M0(o,e,!1),a=e.sizeMultiplier/t.sizeMultiplier,i=0;ir.height+r.depth+m&&(m=(m+E-r.height-r.depth)/2);var D=x.height-r.height-m-w;r.style.paddingLeft=A+"em";var q=k.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+D)},{type:"elem",elem:x},{type:"kern",size:w}]},t);if(e.index){var O=t.havingStyle($.SCRIPTSCRIPT),H=Y(e.index,O,t),G=.6*(q.height-q.depth),V=k.makeVList({positionType:"shift",positionData:-G,children:[{type:"elem",elem:H}]},t),r0=k.makeSpan(["root"],[V]);return k.makeSpan(["mord","sqrt"],[r0,q],t)}else return k.makeSpan(["mord","sqrt"],[q],t)},mathmlBuilder:function(e,t){var r=e.body,a=e.index;return a?new _.MathNode("mroot",[i0(r,t),i0(a,t)]):new _.MathNode("msqrt",[i0(r,t)])}});var ra={display:$.DISPLAY,text:$.TEXT,script:$.SCRIPT,scriptscript:$.SCRIPTSCRIPT};L({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.breakOnTokenText,a=e.funcName,i=e.parser,u=i.parseExpression(!0,r),m=a.slice(1,a.length-5);return{type:"styling",mode:i.mode,style:m,body:u}},htmlBuilder:function(e,t){var r=ra[e.style],a=t.havingStyle(r).withFont("");return ea(e.body,a,t)},mathmlBuilder:function(e,t){var r=ra[e.style],a=t.havingStyle(r),i=R0(e.body,a),u=new _.MathNode("mstyle",i),m={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},d=m[e.style];return u.setAttribute("scriptlevel",d[0]),u.setAttribute("displaystyle",d[1]),u}});var ei=function(e,t){var r=e.base;if(r)if(r.type==="op"){var a=r.limits&&(t.style.size===$.DISPLAY.size||r.alwaysHandleSupSub);return a?ge:null}else if(r.type==="operatorname"){var i=r.alwaysHandleSupSub&&(t.style.size===$.DISPLAY.size||r.limits);return i?Qr:null}else{if(r.type==="accent")return F.isCharacterBox(r.base)?wt:null;if(r.type==="horizBrace"){var u=!e.sub;return u===r.isOver?Yr:null}else return null}else return null};ue({type:"supsub",htmlBuilder:function(e,t){var r=ei(e,t);if(r)return r(e,t);var a=e.base,i=e.sup,u=e.sub,m=Y(a,t),d,f,x=t.fontMetrics(),w=0,A=0,E=a&&F.isCharacterBox(a);if(i){var D=t.havingStyle(t.style.sup());d=Y(i,D,t),E||(w=m.height-D.fontMetrics().supDrop*D.sizeMultiplier/t.sizeMultiplier)}if(u){var q=t.havingStyle(t.style.sub());f=Y(u,q,t),E||(A=m.depth+q.fontMetrics().subDrop*q.sizeMultiplier/t.sizeMultiplier)}var O;t.style===$.DISPLAY?O=x.sup1:t.style.cramped?O=x.sup3:O=x.sup2;var H=t.sizeMultiplier,G=.5/x.ptPerEm/H+"em",V=null;if(f){var r0=e.base&&e.base.type==="op"&&e.base.name&&(e.base.name==="\\oiint"||e.base.name==="\\oiiint");(m instanceof F0||r0)&&(V=-m.italic+"em")}var K;if(d&&f){w=Math.max(w,O,d.depth+.25*x.xHeight),A=Math.max(A,x.sub2);var s0=x.defaultRuleThickness,o0=4*s0;if(w-d.depth-(f.height-A)0&&(w+=h0,A-=h0)}var w0=[{type:"elem",elem:f,shift:A,marginRight:G,marginLeft:V},{type:"elem",elem:d,shift:-w,marginRight:G}];K=k.makeVList({positionType:"individualShift",children:w0},t)}else if(f){A=Math.max(A,x.sub1,f.height-.8*x.xHeight);var x0=[{type:"elem",elem:f,marginLeft:V,marginRight:G}];K=k.makeVList({positionType:"shift",positionData:A,children:x0},t)}else if(d)w=Math.max(w,O,d.depth+.25*x.xHeight),K=k.makeVList({positionType:"shift",positionData:-w,children:[{type:"elem",elem:d,marginRight:G}]},t);else throw new Error("supsub must have either sup or sub.");var J=gt(m,"right")||"mord";return k.makeSpan([J],[m,k.makeSpan(["msupsub"],[K])],t)},mathmlBuilder:function(e,t){var r=!1,a,i,u=b0(e.base,"horizBrace");u&&(i=!!e.sup,i===u.isOver&&(r=!0,a=u.isOver)),e.base&&(e.base.type==="op"||e.base.type==="operatorname")&&(e.base.parentIsSupSub=!0);var m=[i0(e.base,t)];e.sub&&m.push(i0(e.sub,t)),e.sup&&m.push(i0(e.sup,t));var d;if(r)d=a?"mover":"munder";else if(e.sub)if(e.sup){var w=e.base;w&&w.type==="op"&&w.limits&&t.style===$.DISPLAY||w&&w.type==="operatorname"&&w.alwaysHandleSupSub&&(t.style===$.DISPLAY||w.limits)?d="munderover":d="msubsup"}else{var x=e.base;x&&x.type==="op"&&x.limits&&(t.style===$.DISPLAY||x.alwaysHandleSupSub)||x&&x.type==="operatorname"&&x.alwaysHandleSupSub&&(x.limits||t.style===$.DISPLAY)?d="munder":d="msub"}else{var f=e.base;f&&f.type==="op"&&f.limits&&(t.style===$.DISPLAY||f.alwaysHandleSupSub)||f&&f.type==="operatorname"&&f.alwaysHandleSupSub&&(f.limits||t.style===$.DISPLAY)?d="mover":d="msup"}var A=new _.MathNode(d,m);return A}}),ue({type:"atom",htmlBuilder:function(e,t){return k.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder:function(e,t){var r=new _.MathNode("mo",[O0(e.text,e.mode)]);if(e.family==="bin"){var a=bt(e,t);a==="bold-italic"&&r.setAttribute("mathvariant",a)}else e.family==="punct"?r.setAttribute("separator","true"):(e.family==="open"||e.family==="close")&&r.setAttribute("stretchy","false");return r}});var aa={mi:"italic",mn:"normal",mtext:"normal"};ue({type:"mathord",htmlBuilder:function(e,t){return k.makeOrd(e,t,"mathord")},mathmlBuilder:function(e,t){var r=new _.MathNode("mi",[O0(e.text,e.mode,t)]),a=bt(e,t)||"italic";return a!==aa[r.type]&&r.setAttribute("mathvariant",a),r}}),ue({type:"textord",htmlBuilder:function(e,t){return k.makeOrd(e,t,"textord")},mathmlBuilder:function(e,t){var r=O0(e.text,e.mode,t),a=bt(e,t)||"normal",i;return e.mode==="text"?i=new _.MathNode("mtext",[r]):/[0-9]/.test(e.text)?i=new _.MathNode("mn",[r]):e.text==="\\prime"?i=new _.MathNode("mo",[r]):i=new _.MathNode("mi",[r]),a!==aa[i.type]&&i.setAttribute("mathvariant",a),i}});var qt={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Nt={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};ue({type:"spacing",htmlBuilder:function(e,t){if(Nt.hasOwnProperty(e.text)){var r=Nt[e.text].className||"";if(e.mode==="text"){var a=k.makeOrd(e,t,"textord");return a.classes.push(r),a}else return k.makeSpan(["mspace",r],[k.mathsym(e.text,e.mode,t)],t)}else{if(qt.hasOwnProperty(e.text))return k.makeSpan(["mspace",qt[e.text]],[],t);throw new C('Unknown type of space "'+e.text+'"')}},mathmlBuilder:function(e,t){var r;if(Nt.hasOwnProperty(e.text))r=new _.MathNode("mtext",[new _.TextNode(" ")]);else{if(qt.hasOwnProperty(e.text))return new _.MathNode("mspace");throw new C('Unknown type of space "'+e.text+'"')}return r}});var na=function(){var e=new _.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};ue({type:"tag",mathmlBuilder:function(e,t){var r=new _.MathNode("mtable",[new _.MathNode("mtr",[na(),new _.MathNode("mtd",[le(e.body,t)]),na(),new _.MathNode("mtd",[le(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var ia={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},sa={"\\textbf":"textbf","\\textmd":"textmd"},ti={"\\textit":"textit","\\textup":"textup"},oa=function(e,t){var r=e.font;return r?ia[r]?t.withTextFontFamily(ia[r]):sa[r]?t.withTextFontWeight(sa[r]):t.withTextFontShape(ti[r]):t};L({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],greediness:2,allowedInText:!0},handler:function(e,t){var r=e.parser,a=e.funcName,i=t[0];return{type:"text",mode:r.mode,body:y0(i),font:a}},htmlBuilder:function(e,t){var r=oa(e,t),a=M0(e.body,r,!0);return k.makeSpan(["mord","text"],k.tryCombineChars(a),r)},mathmlBuilder:function(e,t){var r=oa(e,t);return le(e.body,r)}}),L({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder:function(e,t){var r=Y(e.body,t),a=k.makeLineSpan("underline-line",t),i=t.fontMetrics().defaultRuleThickness,u=k.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:a},{type:"kern",size:3*i},{type:"elem",elem:r}]},t);return k.makeSpan(["mord","underline"],[u],t)},mathmlBuilder:function(e,t){var r=new _.MathNode("mo",[new _.TextNode("‾")]);r.setAttribute("stretchy","true");var a=new _.MathNode("munder",[i0(e.body,t),r]);return a.setAttribute("accentunder","true"),a}}),L({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(e,t,r){throw new C("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(e,t){for(var r=ua(e),a=[],i=t.havingStyle(t.style.text()),u=0;u0&&(this.undefStack[this.undefStack.length-1][r]=a)}else{var m=this.undefStack[this.undefStack.length-1];m&&!m.hasOwnProperty(r)&&(m[r]=this.current[r])}this.current[r]=a},o}(),ha={},li=ha;function p(o,e){ha[o]=e}p("\\@firstoftwo",function(o){var e=o.consumeArgs(2);return{tokens:e[0],numArgs:0}}),p("\\@secondoftwo",function(o){var e=o.consumeArgs(2);return{tokens:e[1],numArgs:0}}),p("\\@ifnextchar",function(o){var e=o.consumeArgs(3),t=o.future();return e[0].length===1&&e[0][0].text===t.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}}),p("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),p("\\TextOrMath",function(o){var e=o.consumeArgs(2);return o.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});var ma={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};p("\\char",function(o){var e=o.popToken(),t,r="";if(e.text==="'")t=8,e=o.popToken();else if(e.text==='"')t=16,e=o.popToken();else if(e.text==="`")if(e=o.popToken(),e.text[0]==="\\")r=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new C("\\char` missing argument");r=e.text.charCodeAt(0)}else t=10;if(t){if(r=ma[e.text],r==null||r>=t)throw new C("Invalid base-"+t+" digit "+e.text);for(var a;(a=ma[o.future().text])!=null&&a":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};p("\\dots",function(o){var e="\\dotso",t=o.expandAfterFuture().text;return t in da?e=da[t]:(t.substr(0,4)==="\\not"||t in m0.math&&F.contains(["bin","rel"],m0.math[t].group))&&(e="\\dotsb"),e});var Lt={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};p("\\dotso",function(o){var e=o.future().text;return e in Lt?"\\ldots\\,":"\\ldots"}),p("\\dotsc",function(o){var e=o.future().text;return e in Lt&&e!==","?"\\ldots\\,":"\\ldots"}),p("\\cdots",function(o){var e=o.future().text;return e in Lt?"\\@cdots\\,":"\\@cdots"}),p("\\dotsb","\\cdots"),p("\\dotsm","\\cdots"),p("\\dotsi","\\!\\cdots"),p("\\dotsx","\\ldots\\,"),p("\\DOTSI","\\relax"),p("\\DOTSB","\\relax"),p("\\DOTSX","\\relax"),p("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),p("\\,","\\tmspace+{3mu}{.1667em}"),p("\\thinspace","\\,"),p("\\>","\\mskip{4mu}"),p("\\:","\\tmspace+{4mu}{.2222em}"),p("\\medspace","\\:"),p("\\;","\\tmspace+{5mu}{.2777em}"),p("\\thickspace","\\;"),p("\\!","\\tmspace-{3mu}{.1667em}"),p("\\negthinspace","\\!"),p("\\negmedspace","\\tmspace-{4mu}{.2222em}"),p("\\negthickspace","\\tmspace-{5mu}{.277em}"),p("\\enspace","\\kern.5em "),p("\\enskip","\\hskip.5em\\relax"),p("\\quad","\\hskip1em\\relax"),p("\\qquad","\\hskip2em\\relax"),p("\\tag","\\@ifstar\\tag@literal\\tag@paren"),p("\\tag@paren","\\tag@literal{({#1})}"),p("\\tag@literal",function(o){if(o.macros.get("\\df@tag"))throw new C("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"}),p("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),p("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),p("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),p("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),p("\\pmb","\\html@mathml{\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}{\\mathbf{#1}}"),p("\\\\","\\newline"),p("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var pa=ie["Main-Regular"][84][1]-.7*ie["Main-Regular"][65][1]+"em";p("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+pa+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}"),p("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+pa+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}"),p("\\hspace","\\@ifstar\\@hspacer\\@hspace"),p("\\@hspace","\\hskip #1\\relax"),p("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),p("\\ordinarycolon",":"),p("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),p("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),p("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),p("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),p("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),p("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),p("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),p("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),p("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),p("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),p("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),p("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),p("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),p("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),p("∷","\\dblcolon"),p("∹","\\eqcolon"),p("≔","\\coloneqq"),p("≕","\\eqqcolon"),p("⩴","\\Coloneqq"),p("\\ratio","\\vcentcolon"),p("\\coloncolon","\\dblcolon"),p("\\colonequals","\\coloneqq"),p("\\coloncolonequals","\\Coloneqq"),p("\\equalscolon","\\eqqcolon"),p("\\equalscoloncolon","\\Eqqcolon"),p("\\colonminus","\\coloneq"),p("\\coloncolonminus","\\Coloneq"),p("\\minuscolon","\\eqcolon"),p("\\minuscoloncolon","\\Eqcolon"),p("\\coloncolonapprox","\\Colonapprox"),p("\\coloncolonsim","\\Colonsim"),p("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),p("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),p("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),p("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),p("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}"),p("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),p("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),p("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}"),p("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}"),p("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}"),p("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}"),p("\\nleqq","\\html@mathml{\\@nleqq}{≰}"),p("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}"),p("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}"),p("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}"),p("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}"),p("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}"),p("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}"),p("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}"),p("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}"),p("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}"),p("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}"),p("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}"),p("⟦","\\llbracket"),p("⟧","\\rrbracket"),p("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}"),p("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}"),p("⦃","\\lBrace"),p("⦄","\\rBrace"),p("\\darr","\\downarrow"),p("\\dArr","\\Downarrow"),p("\\Darr","\\Downarrow"),p("\\lang","\\langle"),p("\\rang","\\rangle"),p("\\uarr","\\uparrow"),p("\\uArr","\\Uparrow"),p("\\Uarr","\\Uparrow"),p("\\N","\\mathbb{N}"),p("\\R","\\mathbb{R}"),p("\\Z","\\mathbb{Z}"),p("\\alef","\\aleph"),p("\\alefsym","\\aleph"),p("\\Alpha","\\mathrm{A}"),p("\\Beta","\\mathrm{B}"),p("\\bull","\\bullet"),p("\\Chi","\\mathrm{X}"),p("\\clubs","\\clubsuit"),p("\\cnums","\\mathbb{C}"),p("\\Complex","\\mathbb{C}"),p("\\Dagger","\\ddagger"),p("\\diamonds","\\diamondsuit"),p("\\empty","\\emptyset"),p("\\Epsilon","\\mathrm{E}"),p("\\Eta","\\mathrm{H}"),p("\\exist","\\exists"),p("\\harr","\\leftrightarrow"),p("\\hArr","\\Leftrightarrow"),p("\\Harr","\\Leftrightarrow"),p("\\hearts","\\heartsuit"),p("\\image","\\Im"),p("\\infin","\\infty"),p("\\Iota","\\mathrm{I}"),p("\\isin","\\in"),p("\\Kappa","\\mathrm{K}"),p("\\larr","\\leftarrow"),p("\\lArr","\\Leftarrow"),p("\\Larr","\\Leftarrow"),p("\\lrarr","\\leftrightarrow"),p("\\lrArr","\\Leftrightarrow"),p("\\Lrarr","\\Leftrightarrow"),p("\\Mu","\\mathrm{M}"),p("\\natnums","\\mathbb{N}"),p("\\Nu","\\mathrm{N}"),p("\\Omicron","\\mathrm{O}"),p("\\plusmn","\\pm"),p("\\rarr","\\rightarrow"),p("\\rArr","\\Rightarrow"),p("\\Rarr","\\Rightarrow"),p("\\real","\\Re"),p("\\reals","\\mathbb{R}"),p("\\Reals","\\mathbb{R}"),p("\\Rho","\\mathrm{P}"),p("\\sdot","\\cdot"),p("\\sect","\\S"),p("\\spades","\\spadesuit"),p("\\sub","\\subset"),p("\\sube","\\subseteq"),p("\\supe","\\supseteq"),p("\\Tau","\\mathrm{T}"),p("\\thetasym","\\vartheta"),p("\\weierp","\\wp"),p("\\Zeta","\\mathrm{Z}"),p("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),p("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),p("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),p("\\blue","\\textcolor{##6495ed}{#1}"),p("\\orange","\\textcolor{##ffa500}{#1}"),p("\\pink","\\textcolor{##ff00af}{#1}"),p("\\red","\\textcolor{##df0030}{#1}"),p("\\green","\\textcolor{##28ae7b}{#1}"),p("\\gray","\\textcolor{gray}{#1}"),p("\\purple","\\textcolor{##9d38bd}{#1}"),p("\\blueA","\\textcolor{##ccfaff}{#1}"),p("\\blueB","\\textcolor{##80f6ff}{#1}"),p("\\blueC","\\textcolor{##63d9ea}{#1}"),p("\\blueD","\\textcolor{##11accd}{#1}"),p("\\blueE","\\textcolor{##0c7f99}{#1}"),p("\\tealA","\\textcolor{##94fff5}{#1}"),p("\\tealB","\\textcolor{##26edd5}{#1}"),p("\\tealC","\\textcolor{##01d1c1}{#1}"),p("\\tealD","\\textcolor{##01a995}{#1}"),p("\\tealE","\\textcolor{##208170}{#1}"),p("\\greenA","\\textcolor{##b6ffb0}{#1}"),p("\\greenB","\\textcolor{##8af281}{#1}"),p("\\greenC","\\textcolor{##74cf70}{#1}"),p("\\greenD","\\textcolor{##1fab54}{#1}"),p("\\greenE","\\textcolor{##0d923f}{#1}"),p("\\goldA","\\textcolor{##ffd0a9}{#1}"),p("\\goldB","\\textcolor{##ffbb71}{#1}"),p("\\goldC","\\textcolor{##ff9c39}{#1}"),p("\\goldD","\\textcolor{##e07d10}{#1}"),p("\\goldE","\\textcolor{##a75a05}{#1}"),p("\\redA","\\textcolor{##fca9a9}{#1}"),p("\\redB","\\textcolor{##ff8482}{#1}"),p("\\redC","\\textcolor{##f9685d}{#1}"),p("\\redD","\\textcolor{##e84d39}{#1}"),p("\\redE","\\textcolor{##bc2612}{#1}"),p("\\maroonA","\\textcolor{##ffbde0}{#1}"),p("\\maroonB","\\textcolor{##ff92c6}{#1}"),p("\\maroonC","\\textcolor{##ed5fa6}{#1}"),p("\\maroonD","\\textcolor{##ca337c}{#1}"),p("\\maroonE","\\textcolor{##9e034e}{#1}"),p("\\purpleA","\\textcolor{##ddd7ff}{#1}"),p("\\purpleB","\\textcolor{##c6b9fc}{#1}"),p("\\purpleC","\\textcolor{##aa87ff}{#1}"),p("\\purpleD","\\textcolor{##7854ab}{#1}"),p("\\purpleE","\\textcolor{##543b78}{#1}"),p("\\mintA","\\textcolor{##f5f9e8}{#1}"),p("\\mintB","\\textcolor{##edf2df}{#1}"),p("\\mintC","\\textcolor{##e0e5cc}{#1}"),p("\\grayA","\\textcolor{##f6f7f7}{#1}"),p("\\grayB","\\textcolor{##f0f1f2}{#1}"),p("\\grayC","\\textcolor{##e3e5e6}{#1}"),p("\\grayD","\\textcolor{##d6d8da}{#1}"),p("\\grayE","\\textcolor{##babec2}{#1}"),p("\\grayF","\\textcolor{##888d93}{#1}"),p("\\grayG","\\textcolor{##626569}{#1}"),p("\\grayH","\\textcolor{##3b3e40}{#1}"),p("\\grayI","\\textcolor{##21242c}{#1}"),p("\\kaBlue","\\textcolor{##314453}{#1}"),p("\\kaGreen","\\textcolor{##71B307}{#1}");var fa={"\\relax":!0,"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},ci=function(){function o(t,r,a){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(t),this.macros=new ui(li,r.macros),this.mode=a,this.stack=[]}var e=o.prototype;return e.feed=function(r){this.lexer=new ca(r,this.settings)},e.switchMode=function(r){this.mode=r},e.beginGroup=function(){this.macros.beginGroup()},e.endGroup=function(){this.macros.endGroup()},e.future=function(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},e.popToken=function(){return this.future(),this.stack.pop()},e.pushToken=function(r){this.stack.push(r)},e.pushTokens=function(r){var a;(a=this.stack).push.apply(a,r)},e.consumeSpaces=function(){for(;;){var r=this.future();if(r.text===" ")this.stack.pop();else break}},e.consumeArgs=function(r){for(var a=[],i=0;ithis.settings.maxExpand)throw new C("Too many expansions: infinite loop or need to increase maxExpand setting");var u=i.tokens;if(i.numArgs){var m=this.consumeArgs(i.numArgs);u=u.slice();for(var d=u.length-1;d>=0;--d){var f=u[d];if(f.text==="#"){if(d===0)throw new C("Incomplete placeholder at end of macro body",f);if(f=u[--d],f.text==="#")u.splice(d+1,1);else if(/^[1-9]$/.test(f.text)){var x;(x=u).splice.apply(x,[d,2].concat(m[+f.text-1]))}else throw new C("Not a valid argument number",f)}}}return this.pushTokens(u),u},e.expandAfterFuture=function(){return this.expandOnce(),this.future()},e.expandNextToken=function(){for(;;){var r=this.expandOnce();if(r instanceof N)if(r.text==="\\relax")this.stack.pop();else return this.stack.pop()}throw new Error},e.expandMacro=function(r){if(this.macros.get(r)){var a=[],i=this.stack.length;for(this.pushToken(new N(r));this.stack.length>i;){var u=this.expandOnce();u instanceof N&&a.push(this.stack.pop())}return a}},e.expandMacroAsText=function(r){var a=this.expandMacro(r);return a&&a.map(function(i){return i.text}).join("")},e._getExpansion=function(r){var a=this.macros.get(r);if(a==null)return a;var i=typeof a=="function"?a(this):a;if(typeof i=="string"){var u=0;if(i.indexOf("#")!==-1)for(var m=i.replace(/##/g,"");m.indexOf("#"+(u+1))!==-1;)++u;for(var d=new ca(i,this.settings),f=[],x=d.lex();x.text!=="EOF";)f.push(x),x=d.lex();f.reverse();var w={tokens:f,numArgs:u};return w}return i},e.isDefined=function(r){return this.macros.has(r)||De.hasOwnProperty(r)||m0.math.hasOwnProperty(r)||m0.text.hasOwnProperty(r)||fa.hasOwnProperty(r)},o}(),va={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"}},ga={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",č:"č",ĉ:"ĉ",ċ:"ċ",ď:"ď",ḋ:"ḋ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ĺ:"ĺ",ľ:"ľ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ď:"Ď",Ḋ:"Ḋ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ĺ:"Ĺ",Ľ:"Ľ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ť:"Ť",Ṫ:"Ṫ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"},Ze=function(){function o(t,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new ci(t,r,this.mode),this.settings=r,this.leftrightDepth=0}var e=o.prototype;return e.expect=function(r,a){if(a===void 0&&(a=!0),this.fetch().text!==r)throw new C("Expected '"+r+"', got '"+this.fetch().text+"'",this.fetch());a&&this.consume()},e.consume=function(){this.nextToken=null},e.fetch=function(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},e.switchMode=function(r){this.mode=r,this.gullet.switchMode(r)},e.parse=function(){this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");var r=this.parseExpression(!1);return this.expect("EOF"),this.gullet.endGroup(),r},e.parseExpression=function(r,a){for(var i=[];;){this.mode==="math"&&this.consumeSpaces();var u=this.fetch();if(o.endOfExpression.indexOf(u.text)!==-1||a&&u.text===a||r&&De[u.text]&&De[u.text].infix)break;var m=this.parseAtom(a);if(!m)break;i.push(m)}return this.mode==="text"&&this.formLigatures(i),this.handleInfixNodes(i)},e.handleInfixNodes=function(r){for(var a=-1,i,u=0;u0&&!w||f===0&&!w&&this.mode==="math",E=this.parseGroupOfType("argument to '"+r+"'",x,w,u,A);if(!E){if(w){d.push(null);continue}throw new C("Expected group after '"+r+"'",this.fetch())}(w?d:m).push(E)}return{args:m,optArgs:d}},e.parseGroupOfType=function(r,a,i,u,m){switch(a){case"color":return m&&this.consumeSpaces(),this.parseColorGroup(i);case"size":return m&&this.consumeSpaces(),this.parseSizeGroup(i);case"url":return this.parseUrlGroup(i,m);case"math":case"text":return this.parseGroup(r,i,u,void 0,a,m);case"hbox":{var d=this.parseGroup(r,i,u,void 0,"text",m);if(!d)return d;var f={type:"styling",mode:d.mode,body:[d],style:"text"};return f}case"raw":{if(m&&this.consumeSpaces(),i&&this.fetch().text==="{")return null;var x=this.parseStringGroup("raw",i,!0);if(x)return{type:"raw",mode:"text",string:x.text};throw new C("Expected raw group",this.fetch())}case"original":case null:case void 0:return this.parseGroup(r,i,u,void 0,void 0,m);default:throw new C("Unknown group type as "+r,this.fetch())}},e.consumeSpaces=function(){for(;this.fetch().text===" ";)this.consume()},e.parseStringGroup=function(r,a,i){var u=a?"[":"{",m=a?"]":"}",d=this.fetch();if(d.text!==u){if(a)return null;if(i&&d.text!=="EOF"&&/[^{}[\]]/.test(d.text))return this.consume(),d}var f=this.mode;this.mode="text",this.expect(u);for(var x="",w=this.fetch(),A=0,E=w,D;(D=this.fetch()).text!==m||i&&A>0;){switch(D.text){case"EOF":throw new C("Unexpected end of input in "+r,w.range(E,x));case u:A++;break;case m:A--;break}E=D,x+=E.text,this.consume()}return this.expect(m),this.mode=f,w.range(E,x)},e.parseRegexGroup=function(r,a){var i=this.mode;this.mode="text";for(var u=this.fetch(),m=u,d="",f;(f=this.fetch()).text!=="EOF"&&r.test(d+f.text);)m=f,d+=m.text,this.consume();if(d==="")throw new C("Invalid "+a+": '"+u.text+"'",u);return this.mode=i,u.range(m,d)},e.parseColorGroup=function(r){var a=this.parseStringGroup("color",r);if(!a)return null;var i=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(a.text);if(!i)throw new C("Invalid color: '"+a.text+"'",a);var u=i[0];return/^[0-9a-f]{6}$/i.test(u)&&(u="#"+u),{type:"color-token",mode:this.mode,color:u}},e.parseSizeGroup=function(r){var a,i=!1;if(!r&&this.fetch().text!=="{"?a=this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size"):a=this.parseStringGroup("size",r),!a)return null;!r&&a.text.length===0&&(a.text="0pt",i=!0);var u=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(a.text);if(!u)throw new C("Invalid size: '"+a.text+"'",a);var m={number:+(u[1]+u[2]),unit:u[3]};if(!cr(m))throw new C("Invalid unit: '"+m.unit+"'",a);return{type:"size",mode:this.mode,value:m,isBlank:i}},e.parseUrlGroup=function(r,a){this.gullet.lexer.setCatcode("%",13);var i=this.parseStringGroup("url",r,!0);if(this.gullet.lexer.setCatcode("%",14),!i)return null;var u=i.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:u}},e.parseGroup=function(r,a,i,u,m,d){var f=this.mode;m&&this.switchMode(m),d&&this.consumeSpaces();var x=this.fetch(),w=x.text,A;if(a?w==="[":w==="{"||w==="\\begingroup"){this.consume();var E=o.endOfGroup[w];this.gullet.beginGroup();var D=this.parseExpression(!1,E),q=this.fetch();this.expect(E),this.gullet.endGroup(),A={type:"ordgroup",mode:this.mode,loc:M.range(x,q),body:D,semisimple:w==="\\begingroup"||void 0}}else if(a)A=null;else if(A=this.parseFunction(u,r,i)||this.parseSymbol(),A==null&&w[0]==="\\"&&!fa.hasOwnProperty(w)){if(this.settings.throwOnError)throw new C("Undefined control sequence: "+w,x);A=this.formatUnsupportedCmd(w),this.consume()}return m&&this.switchMode(f),A},e.formLigatures=function(r){for(var a=r.length-1,i=0;i=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+a[0]+'" used in math mode',r);var f=m0[this.mode][a].group,x=M.range(r),w;if(Ka.hasOwnProperty(f)){var A=f;w={type:"atom",mode:this.mode,family:A,loc:x,text:a}}else w={type:f,mode:this.mode,loc:x,text:a};d=w}else if(a.charCodeAt(0)>=128)this.settings.strict&&(jt(a.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+a[0]+'" used in math mode',r):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+a[0]+'"'+(" ("+a.charCodeAt(0)+")"),r)),d={type:"textord",mode:"text",loc:M.range(r),text:a};else return null;if(this.consume(),m)for(var E=0;E=0;M--)l[M].loc.start>S&&(v+=" ",S=l[M].loc.start),v+=l[M].text,S+=l[M].text.length;return t0.go(z.go(v,h))};var z={go:function(l,h){if(!l)return[];h===void 0&&(h="ce");let v="0";const S={};S.parenthesisLevel=0,l=l.replace(/\n/g," "),l=l.replace(/[\u2212\u2013\u2014\u2010]/g,"-"),l=l.replace(/[\u2026]/g,"...");let B,M=10;const N=[];for(;;){B!==l?(M=10,B=l):M--;const C=z.stateMachines[h],n0=C.transitions[v]||C.transitions["*"];e:for(let c0=0;c00){if(a0.revisit||(l=z0.remainder),!a0.toContinue)break e}else return N}}if(M<=0)throw["MhchemBugU","mhchem bug U. Please report."]}},concatArray:function(l,h){if(h)if(Array.isArray(h))for(let v=0;v":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"- orbital overlap":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,"pm-operator":/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,operator:/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"\\bond{(...)}":function(l){return z.patterns.findObserveGroups(l,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,CMT:/^[CMT](?=\[)/,"[(...)]":function(l){return z.patterns.findObserveGroups(l,"[","","","]")},"1st-level escape":/^(&|\\\\|\\hline)\s*/,"\\,":/^(?:\\[,\ ;:])/,"\\x{}{}":function(l){return z.patterns.findObserveGroups(l,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"\\x{}":function(l){return z.patterns.findObserveGroups(l,"",/^\\[a-zA-Z]+\{/,"}","")},"\\ca":/^\\ca(?:\s+|(?![a-zA-Z]))/,"\\x":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\/~|]/,"\\frac{(...)}":function(l){return z.patterns.findObserveGroups(l,"\\frac{","","","}","{","","","}")},"\\overset{(...)}":function(l){return z.patterns.findObserveGroups(l,"\\overset{","","","}","{","","","}")},"\\underset{(...)}":function(l){return z.patterns.findObserveGroups(l,"\\underset{","","","}","{","","","}")},"\\underbrace{(...)}":function(l){return z.patterns.findObserveGroups(l,"\\underbrace{","","","}_","{","","","}")},"\\color{(...)}0":function(l){return z.patterns.findObserveGroups(l,"\\color{","","","}")},"\\color{(...)}{(...)}1":function(l){return z.patterns.findObserveGroups(l,"\\color{","","","}","{","","","}")},"\\color(...){(...)}2":function(l){return z.patterns.findObserveGroups(l,"\\color","\\","",/^(?=\{)/,"{","","","}")},"\\ce{(...)}":function(l){return z.patterns.findObserveGroups(l,"\\ce{","","","}")},oxidation$:/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"d-oxidation$":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"roman numeral":/^[IVX]+/,"1/2$":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,amount:function(l){let h;if(h=l.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/),h)return{match_:h[0],remainder:l.substr(h[0].length)};const v=z.patterns.findObserveGroups(l,"","$","$","");return v&&(h=v.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/),h)?{match_:h[0],remainder:l.substr(h[0].length)}:null},amount2:function(l){return this.amount(l)},"(KV letters),":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(l){if(l.match(/^\([a-z]+\)$/))return null;const h=l.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return h?{match_:h[0],remainder:l.substr(h[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*[*.]\s*/},findObserveGroups:function(l,h,v,S,B,M,N,R,C,n0){const c0=function(v0,e0){if(typeof e0=="string")return v0.indexOf(e0)!==0?null:e0;const A0=v0.match(e0);return A0?A0[0]:null},z0=function(v0,e0,A0){let F=0;for(;e00,null};let a0=c0(l,h);if(a0===null||(l=l.substr(a0.length),a0=c0(l,v),a0===null))return null;const Z=z0(l,a0.length,S||B);if(Z===null)return null;const k0=l.substring(0,S?Z.endMatchEnd:Z.endMatchBegin);if(!(M||N))return{match_:k0,remainder:l.substr(Z.endMatchEnd)};const T0=this.findObserveGroups(l.substr(Z.endMatchEnd),M,N,R,C);if(T0===null)return null;const Q=[k0,T0.match_];return{match_:n0?Q.join(""):Q,remainder:T0.remainder}},match_:function(l,h){const v=z.patterns.patterns[l];if(v===void 0)throw["MhchemBugP","mhchem bug P. Please report. ("+l+")"];if(typeof v=="function")return z.patterns.patterns[l](h);{const S=h.match(v);if(S){let B;return S[2]?B=[S[1],S[2]]:S[1]?B=S[1]:B=S[0],{match_:B,remainder:h.substr(S[0].length)}}return null}}},actions:{"a=":function(l,h){l.a=(l.a||"")+h},"b=":function(l,h){l.b=(l.b||"")+h},"p=":function(l,h){l.p=(l.p||"")+h},"o=":function(l,h){l.o=(l.o||"")+h},"q=":function(l,h){l.q=(l.q||"")+h},"d=":function(l,h){l.d=(l.d||"")+h},"rm=":function(l,h){l.rm=(l.rm||"")+h},"text=":function(l,h){l.text_=(l.text_||"")+h},insert:function(l,h,v){return{type_:v}},"insert+p1":function(l,h,v){return{type_:v,p1:h}},"insert+p1+p2":function(l,h,v){return{type_:v,p1:h[0],p2:h[1]}},copy:function(l,h){return h},rm:function(l,h){return{type_:"rm",p1:h||""}},text:function(l,h){return z.go(h,"text")},"{text}":function(l,h){const v=["{"];return z.concatArray(v,z.go(h,"text")),v.push("}"),v},"tex-math":function(l,h){return z.go(h,"tex-math")},"tex-math tight":function(l,h){return z.go(h,"tex-math tight")},bond:function(l,h,v){return{type_:"bond",kind_:v||h}},"color0-output":function(l,h){return{type_:"color0",color:h[0]}},ce:function(l,h){return z.go(h)},"1/2":function(l,h){const v=[];h.match(/^[+\-]/)&&(v.push(h.substr(0,1)),h=h.substr(1));const S=h.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);return S[1]=S[1].replace(/\$/g,""),v.push({type_:"frac",p1:S[1],p2:S[2]}),S[3]&&(S[3]=S[3].replace(/\$/g,""),v.push({type_:"tex-math",p1:S[3]})),v},"9,9":function(l,h){return z.go(h,"9,9")}},createTransitions:function(l){let h,v,S,B;const M={};for(h in l)for(v in l[h])for(S=v.split("|"),l[h][v].stateArray=S,B=0;B":{"0|1|2|3":{action_:"r=",nextState:"r"},"a|as":{action_:["output","r="],nextState:"r"},"*":{action_:["output","r="],nextState:"r"}},"+":{o:{action_:"d= kv",nextState:"d"},"d|D":{action_:"d=",nextState:"d"},q:{action_:"d=",nextState:"qd"},"qd|qD":{action_:"d=",nextState:"qd"},dq:{action_:["output","d="],nextState:"d"},3:{action_:["sb=false","output","operator"],nextState:"0"}},amount:{"0|2":{action_:"a=",nextState:"a"}},"pm-operator":{"0|1|2|a|as":{action_:["sb=false","output",{type_:"operator",option:"\\pm"}],nextState:"0"}},operator:{"0|1|2|a|as":{action_:["sb=false","output","operator"],nextState:"0"}},"-$":{"o|q":{action_:["charge or bond","output"],nextState:"qd"},d:{action_:"d=",nextState:"d"},D:{action_:["output",{type_:"bond",option:"-"}],nextState:"3"},q:{action_:"d=",nextState:"qd"},qd:{action_:"d=",nextState:"qd"},"qD|dq":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},"-9":{"3|o":{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"3"}},"- orbital overlap":{o:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},d:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"}},"-":{"0|1|2":{action_:[{type_:"output",option:1},"beginsWithBond=true",{type_:"bond",option:"-"}],nextState:"3"},3:{action_:{type_:"bond",option:"-"}},a:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},as:{action_:[{type_:"output",option:2},{type_:"bond",option:"-"}],nextState:"3"},b:{action_:"b="},o:{action_:{type_:"- after o/d",option:!1},nextState:"2"},q:{action_:{type_:"- after o/d",option:!1},nextState:"2"},"d|qd|dq":{action_:{type_:"- after o/d",option:!0},nextState:"2"},"D|qD|p":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},amount2:{"1|3":{action_:"a=",nextState:"a"}},letters:{"0|1|2|3|a|as|b|p|bp|o":{action_:"o=",nextState:"o"},"q|dq":{action_:["output","o="],nextState:"o"},"d|D|qd|qD":{action_:"o after d",nextState:"o"}},digits:{o:{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},q:{action_:["output","o="],nextState:"o"},a:{action_:"o=",nextState:"o"}},"space A":{"b|p|bp":{}},space:{a:{nextState:"as"},0:{action_:"sb=false"},"1|2":{action_:"sb=true"},"r|rt|rd|rdt|rdq":{action_:"output",nextState:"0"},"*":{action_:["output","sb=true"],nextState:"1"}},"1st-level escape":{"1|2":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}]},"*":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}],nextState:"0"}},"[(...)]":{"r|rt":{action_:"rd=",nextState:"rd"},"rd|rdt":{action_:"rq=",nextState:"rdq"}},"...":{"o|d|D|dq|qd|qD":{action_:["output",{type_:"bond",option:"..."}],nextState:"3"},"*":{action_:[{type_:"output",option:1},{type_:"insert",option:"ellipsis"}],nextState:"1"}},". |* ":{"*":{action_:["output",{type_:"insert",option:"addition compound"}],nextState:"1"}},"state of aggregation $":{"*":{action_:["output","state of aggregation"],nextState:"1"}},"{[(":{"a|as|o":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"0|1|2|3":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"*":{action_:["output","o=","output","parenthesisLevel++"],nextState:"2"}},")]}":{"0|1|2|3|b|p|bp|o":{action_:["o=","parenthesisLevel--"],nextState:"o"},"a|as|d|D|q|qd|qD|dq":{action_:["output","o=","parenthesisLevel--"],nextState:"o"}},", ":{"*":{action_:["output","comma"],nextState:"0"}},"^_":{"*":{}},"^{(...)}|^($...$)":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"D"},q:{action_:"d=",nextState:"qD"},"d|D|qd|qD|dq":{action_:["output","d="],nextState:"D"}},"^a|^\\x{}{}|^\\x{}|^\\x|'":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"d"},q:{action_:"d=",nextState:"qd"},"d|qd|D|qD":{action_:"d="},dq:{action_:["output","d="],nextState:"d"}},"_{(state of aggregation)}$":{"d|D|q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x":{"0|1|2|as":{action_:"p=",nextState:"p"},b:{action_:"p=",nextState:"bp"},"3|o":{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},"q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"=<>":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"#":{"0|1|2|3|a|as|o":{action_:[{type_:"output",option:2},{type_:"bond",option:"#"}],nextState:"3"}},"{}":{"*":{action_:{type_:"output",option:1},nextState:"1"}},"{...}":{"0|1|2|3|a|as|b|p|bp":{action_:"o=",nextState:"o"},"o|d|D|q|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"$...$":{a:{action_:"a="},"0|1|2|3|as|b|p|bp|o":{action_:"o=",nextState:"o"},"as|o":{action_:"o="},"q|d|D|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"\\bond{(...)}":{"*":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"\\frac{(...)}":{"*":{action_:[{type_:"output",option:1},"frac-output"],nextState:"3"}},"\\overset{(...)}":{"*":{action_:[{type_:"output",option:2},"overset-output"],nextState:"3"}},"\\underset{(...)}":{"*":{action_:[{type_:"output",option:2},"underset-output"],nextState:"3"}},"\\underbrace{(...)}":{"*":{action_:[{type_:"output",option:2},"underbrace-output"],nextState:"3"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:[{type_:"output",option:2},"color-output"],nextState:"3"}},"\\color{(...)}0":{"*":{action_:[{type_:"output",option:2},"color0-output"]}},"\\ce{(...)}":{"*":{action_:[{type_:"output",option:2},"ce"],nextState:"3"}},"\\,":{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"1"}},"\\x{}{}|\\x{}|\\x":{"0|1|2|3|a|as|b|p|bp|o|c0":{action_:["o=","output"],nextState:"3"},"*":{action_:["output","o=","output"],nextState:"3"}},others:{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"3"}},else2:{a:{action_:"a to o",nextState:"o",revisit:!0},as:{action_:["output","sb=true"],nextState:"1",revisit:!0},"r|rt|rd|rdt|rdq":{action_:["output"],nextState:"0",revisit:!0},"*":{action_:["output","copy"],nextState:"3"}}}),actions:{"o after d":function(l,h){let v;if((l.d||"").match(/^[0-9]+$/)){const S=l.d;l.d=void 0,v=this.output(l),l.b=S}else v=this.output(l);return z.actions["o="](l,h),v},"d= kv":function(l,h){l.d=h,l.dType="kv"},"charge or bond":function(l,h){if(l.beginsWithBond){const v=[];return z.concatArray(v,this.output(l)),z.concatArray(v,z.actions.bond(l,h,"-")),v}l.d=h},"- after o/d":function(l,h,v){let S=z.patterns.match_("orbital",l.o||"");const B=z.patterns.match_("one lowercase greek letter $",l.o||""),M=z.patterns.match_("one lowercase latin letter $",l.o||""),N=z.patterns.match_("$one lowercase latin letter$ $",l.o||""),R=h==="-"&&(S&&S.remainder===""||B||M||N);R&&!l.a&&!l.b&&!l.p&&!l.d&&!l.q&&!S&&M&&(l.o="$"+l.o+"$");const C=[];return R?(z.concatArray(C,this.output(l)),C.push({type_:"hyphen"})):(S=z.patterns.match_("digits",l.d||""),v&&S&&S.remainder===""?(z.concatArray(C,z.actions["d="](l,h)),z.concatArray(C,this.output(l))):(z.concatArray(C,this.output(l)),z.concatArray(C,z.actions.bond(l,h,"-")))),C},"a to o":function(l){l.o=l.a,l.a=void 0},"sb=true":function(l){l.sb=!0},"sb=false":function(l){l.sb=!1},"beginsWithBond=true":function(l){l.beginsWithBond=!0},"beginsWithBond=false":function(l){l.beginsWithBond=!1},"parenthesisLevel++":function(l){l.parenthesisLevel++},"parenthesisLevel--":function(l){l.parenthesisLevel--},"state of aggregation":function(l,h){return{type_:"state of aggregation",p1:z.go(h,"o")}},comma:function(l,h){const v=h.replace(/\s*$/,"");return v!==h&&l.parenthesisLevel===0?{type_:"comma enumeration L",p1:v}:{type_:"comma enumeration M",p1:v}},output:function(l,h,v){let S;if(!l.r)S=[],!l.a&&!l.b&&!l.p&&!l.o&&!l.q&&!l.d&&!v||(l.sb&&S.push({type_:"entitySkip"}),!l.o&&!l.q&&!l.d&&!l.b&&!l.p&&v!==2?(l.o=l.a,l.a=void 0):!l.o&&!l.q&&!l.d&&(l.b||l.p)?(l.o=l.a,l.d=l.b,l.q=l.p,l.a=l.b=l.p=void 0):l.o&&l.dType==="kv"&&z.patterns.match_("d-oxidation$",l.d||"")?l.dType="oxidation":l.o&&l.dType==="kv"&&!l.q&&(l.dType=void 0),S.push({type_:"chemfive",a:z.go(l.a,"a"),b:z.go(l.b,"bd"),p:z.go(l.p,"pq"),o:z.go(l.o,"o"),q:z.go(l.q,"pq"),d:z.go(l.d,l.dType==="oxidation"?"oxidation":"bd"),dType:l.dType}));else{let B;l.rdt==="M"?B=z.go(l.rd,"tex-math"):l.rdt==="T"?B=[{type_:"text",p1:l.rd||""}]:B=z.go(l.rd);let M;l.rqt==="M"?M=z.go(l.rq,"tex-math"):l.rqt==="T"?M=[{type_:"text",p1:l.rq||""}]:M=z.go(l.rq),S={type_:"arrow",r:l.r,rd:B,rq:M}}for(const B in l)B!=="parenthesisLevel"&&B!=="beginsWithBond"&&delete l[B];return S},"oxidation-output":function(l,h){const v=["{"];return z.concatArray(v,z.go(h,"oxidation")),v.push("}"),v},"frac-output":function(l,h){return{type_:"frac-ce",p1:z.go(h[0]),p2:z.go(h[1])}},"overset-output":function(l,h){return{type_:"overset",p1:z.go(h[0]),p2:z.go(h[1])}},"underset-output":function(l,h){return{type_:"underset",p1:z.go(h[0]),p2:z.go(h[1])}},"underbrace-output":function(l,h){return{type_:"underbrace",p1:z.go(h[0]),p2:z.go(h[1])}},"color-output":function(l,h){return{type_:"color",color1:h[0],color2:z.go(h[1])}},"r=":function(l,h){l.r=h},"rdt=":function(l,h){l.rdt=h},"rd=":function(l,h){l.rd=h},"rqt=":function(l,h){l.rqt=h},"rq=":function(l,h){l.rq=h},operator:function(l,h,v){return{type_:"operator",kind_:v||h}}}},a:{transitions:z.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},"$(...)$":{"*":{action_:"tex-math tight",nextState:"1"}},",":{"*":{action_:{type_:"insert",option:"commaDecimal"}}},else2:{"*":{action_:"copy"}}}),actions:{}},o:{transitions:z.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},letters:{"*":{action_:"rm"}},"\\ca":{"*":{action_:{type_:"insert",option:"circa"}}},"\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"{text}"}},else2:{"*":{action_:"copy"}}}),actions:{}},text:{transitions:z.createTransitions({empty:{"*":{action_:"output"}},"{...}":{"*":{action_:"text="}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"\\greek":{"*":{action_:["output","rm"]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:["output","copy"]}},else:{"*":{action_:"text="}}}),actions:{output:function(l){if(l.text_){const h={type_:"text",p1:l.text_};for(const v in l)delete l[v];return h}}}},pq:{transitions:z.createTransitions({empty:{"*":{}},"state of aggregation $":{"*":{action_:"state of aggregation"}},i$:{0:{nextState:"!f",revisit:!0}},"(KV letters),":{0:{action_:"rm",nextState:"0"}},formula$:{0:{nextState:"f",revisit:!0}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"!f",revisit:!0}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"a-z":{f:{action_:"tex-math"}},letters:{"*":{action_:"rm"}},"-9.,9":{"*":{action_:"9,9"}},",":{"*":{action_:{type_:"insert+p1",option:"comma enumeration S"}}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"state of aggregation":function(l,h){return{type_:"state of aggregation subscript",p1:z.go(h,"o")}},"color-output":function(l,h){return{type_:"color",color1:h[0],color2:z.go(h[1],"pq")}}}},bd:{transitions:z.createTransitions({empty:{"*":{}},x$:{0:{nextState:"!f",revisit:!0}},formula$:{0:{nextState:"f",revisit:!0}},else:{0:{nextState:"!f",revisit:!0}},"-9.,9 no missing 0":{"*":{action_:"9,9"}},".":{"*":{action_:{type_:"insert",option:"electron dot"}}},"a-z":{f:{action_:"tex-math"}},x:{"*":{action_:{type_:"insert",option:"KV x"}}},letters:{"*":{action_:"rm"}},"'":{"*":{action_:{type_:"insert",option:"prime"}}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"color-output":function(l,h){return{type_:"color",color1:h[0],color2:z.go(h[1],"bd")}}}},oxidation:{transitions:z.createTransitions({empty:{"*":{}},"roman numeral":{"*":{action_:"roman-numeral"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},else:{"*":{action_:"copy"}}}),actions:{"roman-numeral":function(l,h){return{type_:"roman numeral",p1:h||""}}}},"tex-math":{transitions:z.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},else:{"*":{action_:"o="}}}),actions:{output:function(l){if(l.o){const h={type_:"tex-math",p1:l.o};for(const v in l)delete l[v];return h}}}},"tex-math tight":{transitions:z.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},"-|+":{"*":{action_:"tight operator"}},else:{"*":{action_:"o="}}}),actions:{"tight operator":function(l,h){l.o=(l.o||"")+"{"+h+"}"},output:function(l){if(l.o){const h={type_:"tex-math",p1:l.o};for(const v in l)delete l[v];return h}}}},"9,9":{transitions:z.createTransitions({empty:{"*":{}},",":{"*":{action_:"comma"}},else:{"*":{action_:"copy"}}}),actions:{comma:function(){return{type_:"commaDecimal"}}}},pu:{transitions:z.createTransitions({empty:{"*":{action_:"output"}},space$:{"*":{action_:["output","space"]}},"{[(|)]}":{"0|a":{action_:"copy"}},"(-)(9)^(-9)":{0:{action_:"number^",nextState:"a"}},"(-)(9.,9)(e)(99)":{0:{action_:"enumber",nextState:"a"}},space:{"0|a":{}},"pm-operator":{"0|a":{action_:{type_:"operator",option:"\\pm"},nextState:"0"}},operator:{"0|a":{action_:"copy",nextState:"0"}},"//":{d:{action_:"o=",nextState:"/"}},"/":{d:{action_:"o=",nextState:"/"}},"{...}|else":{"0|d":{action_:"d=",nextState:"d"},a:{action_:["space","d="],nextState:"d"},"/|q":{action_:"q=",nextState:"q"}}}),actions:{enumber:function(l,h){const v=[];return h[0]==="+-"||h[0]==="+/-"?v.push("\\pm "):h[0]&&v.push(h[0]),h[1]&&(z.concatArray(v,z.go(h[1],"pu-9,9")),h[2]&&(h[2].match(/[,.]/)?z.concatArray(v,z.go(h[2],"pu-9,9")):v.push(h[2])),h[3]=h[4]||h[3],h[3]&&(h[3]=h[3].trim(),h[3]==="e"||h[3].substr(0,1)==="*"?v.push({type_:"cdot"}):v.push({type_:"times"}))),h[3]&&v.push("10^{"+h[5]+"}"),v},"number^":function(l,h){const v=[];return h[0]==="+-"||h[0]==="+/-"?v.push("\\pm "):h[0]&&v.push(h[0]),z.concatArray(v,z.go(h[1],"pu-9,9")),v.push("^{"+h[2]+"}"),v},operator:function(l,h,v){return{type_:"operator",kind_:v||h}},space:function(){return{type_:"pu-space-1"}},output:function(l){let h;const v=z.patterns.match_("{(...)}",l.d||"");v&&v.remainder===""&&(l.d=v.match_);const S=z.patterns.match_("{(...)}",l.q||"");if(S&&S.remainder===""&&(l.q=S.match_),l.d&&(l.d=l.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),l.d=l.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),l.q){l.q=l.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),l.q=l.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F");const B={d:z.go(l.d,"pu"),q:z.go(l.q,"pu")};l.o==="//"?h={type_:"pu-frac",p1:B.d,p2:B.q}:(h=B.d,B.d.length>1||B.q.length>1?h.push({type_:" / "}):h.push({type_:"/"}),z.concatArray(h,B.q))}else h=z.go(l.d,"pu-2");for(const B in l)delete l[B];return h}}},"pu-2":{transitions:z.createTransitions({empty:{"*":{action_:"output"}},"*":{"*":{action_:["output","cdot"],nextState:"0"}},"\\x":{"*":{action_:"rm="}},space:{"*":{action_:["output","space"],nextState:"0"}},"^{(...)}|^(-1)":{1:{action_:"^(-1)"}},"-9.,9":{0:{action_:"rm=",nextState:"0"},1:{action_:"^(-1)",nextState:"0"}},"{...}|else":{"*":{action_:"rm=",nextState:"1"}}}),actions:{cdot:function(){return{type_:"tight cdot"}},"^(-1)":function(l,h){l.rm+="^{"+h+"}"},space:function(){return{type_:"pu-space-2"}},output:function(l){let h=[];if(l.rm){const v=z.patterns.match_("{(...)}",l.rm||"");v&&v.remainder===""?h=z.go(v.match_,"pu"):h={type_:"rm",p1:l.rm}}for(const v in l)delete l[v];return h}}},"pu-9,9":{transitions:z.createTransitions({empty:{0:{action_:"output-0"},o:{action_:"output-o"}},",":{0:{action_:["output-0","comma"],nextState:"o"}},".":{0:{action_:["output-0","copy"],nextState:"o"}},else:{"*":{action_:"text="}}}),actions:{comma:function(){return{type_:"commaDecimal"}},"output-0":function(l){const h=[];if(l.text_=l.text_||"",l.text_.length>4){let v=l.text_.length%3;v===0&&(v=3);for(let S=l.text_.length-3;S>0;S-=3)h.push(l.text_.substr(S,3)),h.push({type_:"1000 separator"});h.push(l.text_.substr(0,v)),h.reverse()}else h.push(l.text_);for(const v in l)delete l[v];return h},"output-o":function(l){const h=[];if(l.text_=l.text_||"",l.text_.length>4){const S=l.text_.length-3;for(var v=0;v":return"rightarrow";case"→":return"rightarrow";case"⟶":return"rightarrow";case"<-":return"leftarrow";case"<->":return"leftrightarrow";case"<-->":return"rightleftarrows";case"<=>":return"rightleftharpoons";case"⇌":return"rightleftharpoons";case"<=>>":return"rightequilibrium";case"<<=>":return"leftequilibrium";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getBond:function(l){switch(l){case"-":return"{-}";case"1":return"{-}";case"=":return"{=}";case"2":return"{=}";case"#":return"{\\equiv}";case"3":return"{\\equiv}";case"~":return"{\\tripledash}";case"~-":return"{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";case"~=":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"~--":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"-~-":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";case"...":return"{{\\cdot}{\\cdot}{\\cdot}}";case"....":return"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";case"->":return"{\\rightarrow}";case"<-":return"{\\leftarrow}";case"<":return"{<}";case">":return"{>}";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getOperator:function(l){switch(l){case"+":return" {}+{} ";case"-":return" {}-{} ";case"=":return" {}={} ";case"<":return" {}<{} ";case">":return" {}>{} ";case"<<":return" {}\\ll{} ";case">>":return" {}\\gg{} ";case"\\pm":return" {}\\pm{} ";case"\\approx":return" {}\\approx{} ";case"$\\approx$":return" {}\\approx{} ";case"v":return" \\downarrow{} ";case"(v)":return" \\downarrow{} ";case"^":return" \\uparrow{} ";case"(^)":return" \\uparrow{} ";default:throw["MhchemBugT","mhchem bug T. Please report."]}}};rt.__defineMacro("\\ce",function(l){return za(l.consumeArgs(1)[0],"ce")});rt.__defineMacro("\\pu",function(l){return za(l.consumeArgs(1)[0],"pu")});rt.__defineMacro("\\tripledash","{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");const Ui=wi({propTypes:{onDrop:et.func.isRequired,component:et.any,shouldDragHighlight:et.func,style:et.any},getDefaultProps:function(){return{component:"div",shouldDragHighlight:()=>!0}},getInitialState:function(){return{dragHover:!1}},handleDrop:function(l){l.stopPropagation(),l.preventDefault(),this.setState({dragHover:!1}),this.props.onDrop(l)},handleDragEnd:function(){this.setState({dragHover:!1})},handleDragOver:function(l){l.preventDefault()},handleDragLeave:function(){this.setState({dragHover:!1})},handleDragEnter:function(l){this.setState({dragHover:this.props.shouldDragHighlight(l)})},render:function(){const l=this.state.dragHover?{opacity:.3}:{},h=this.props.component,v=Object.assign({},this.props);return delete v.component,delete v.shouldDragHighlight,X(h,{...v,style:Object.assign({},this.props.style,l),onDrop:this.handleDrop,onDragEnd:this.handleDragEnd,onDragOver:this.handleDragOver,onDragEnter:this.handleDragEnter,onDragLeave:this.handleDragLeave})}}),{InlineIcon:Ca}=Oi,{iconChevronDown:Vi,iconChevronRight:Xi,iconTrash:ji}=Ri,Ba=l=>{const h=j.omit(l,ki);return Ti(h)};class Ta extends we.Component{constructor(h){super(h),this._toggleWidget=v=>{v.preventDefault(),this.setState({showWidget:!this.state.showWidget})},this._handleWidgetChange=(v,S,B)=>{var N;const M={...this.state.widgetInfo,options:{...this.state.widgetInfo.options,...((N=this.widget.current)==null?void 0:N.serialize())??{},...v}};this.props.onChange(M,S,B)},this._setStatic=v=>{const S={...this.state.widgetInfo,static:v};this.props.onChange(S)},this._handleAlignmentChange=v=>{const S=v.currentTarget.value,B=Object.assign({},this.state.widgetInfo);B.alignment=S,this.props.onChange(B)},this.getSaveWarnings=()=>{var S;const v=(S=this.widget.current)==null?void 0:S.getSaveWarnings;return v?v():[]},this.serialize=()=>{const v=this.state.widgetInfo;return{type:v.type,alignment:v.alignment,static:v.static,graded:v.graded,options:this.widget.current.serialize(),version:v.version}},this.state={showWidget:h.widgetIsOpen??!0,widgetInfo:Ba(h)},this.widget=we.createRef()}UNSAFE_componentWillReceiveProps(h){this.setState({widgetInfo:Ba(h)}),h.widgetIsOpen!=null&&h.widgetIsOpen!==this.props.widgetIsOpen&&this.setState({showWidget:h.widgetIsOpen})}render(){const h=this.state.widgetInfo,v=Ut(h.type);let S;this.props.apiOptions.showAlignmentOptions?S=Mi(h.type):S=["default"];const B=zi(h.type);return j0("div",{className:"perseus-widget-editor",children:[j0("div",{className:"perseus-widget-editor-title "+(this.state.showWidget?"open":"closed"),children:[j0("a",{className:"perseus-widget-editor-title-id",href:"#",onClick:this._toggleWidget,children:[this.props.id,this.state.showWidget?X(Ca,{...Vi}):X(Ca,{...Xi})]}),B&&X(Yi,{label:"Static",checked:!!h.static,onChange:this._setStatic}),S.length>1&&X("select",{className:"alignment",value:h.alignment,onChange:this._handleAlignmentChange,children:S.map(M=>X("option",{children:M},M))}),X(Wi,{icon:ji,onClick:()=>{this.props.onRemove()},title:"Remove image widget"})]}),X("div",{className:"perseus-widget-editor-content "+(this.state.showWidget?"enter":"leave"),children:v&&X(v,{ref:this.widget,onChange:this._handleWidgetChange,static:h.static,apiOptions:this.props.apiOptions,...h.options})})]})}}function Yi(l){const{label:h,...v}=l,B=Li().get("switch");return j0(bi,{children:[X("label",{htmlFor:B,children:h}),X(Pi,{size:$i.xxSmall_6}),X(Si,{id:B,...v})]})}Ta.__docgenInfo={description:"",methods:[{name:"_toggleWidget",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"ReactSyntheticEvent",raw:"React.SyntheticEvent",alias:"React.SyntheticEvent"}}],returns:null},{name:"_handleWidgetChange",docblock:null,modifiers:[],params:[{name:"newProps",optional:!1,type:{name:"intersection",raw:`{ + please report what input caused this bug`);return i=i.slice(1,-1),{type:"verb",mode:"text",body:i,star:u}}ga.hasOwnProperty(a[0])&&!m0[this.mode][a[0]]&&(this.settings.strict&&this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+a[0]+'" used in math mode',r),a=ga[a[0]]+a.substr(1));var m=si.exec(a);m&&(a=a.substring(0,m.index),a==="i"?a="ı":a==="j"&&(a="ȷ"));var d;if(m0[this.mode][a]){this.settings.strict&&this.mode==="math"&&mt.indexOf(a)>=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+a[0]+'" used in math mode',r);var f=m0[this.mode][a].group,x=M.range(r),w;if(Ka.hasOwnProperty(f)){var A=f;w={type:"atom",mode:this.mode,family:A,loc:x,text:a}}else w={type:f,mode:this.mode,loc:x,text:a};d=w}else if(a.charCodeAt(0)>=128)this.settings.strict&&(jt(a.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+a[0]+'" used in math mode',r):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+a[0]+'"'+(" ("+a.charCodeAt(0)+")"),r)),d={type:"textord",mode:"text",loc:M.range(r),text:a};else return null;if(this.consume(),m)for(var E=0;E=0;M--)l[M].loc.start>S&&(v+=" ",S=l[M].loc.start),v+=l[M].text,S+=l[M].text.length;return t0.go(z.go(v,h))};var z={go:function(l,h){if(!l)return[];h===void 0&&(h="ce");let v="0";const S={};S.parenthesisLevel=0,l=l.replace(/\n/g," "),l=l.replace(/[\u2212\u2013\u2014\u2010]/g,"-"),l=l.replace(/[\u2026]/g,"...");let B,M=10;const N=[];for(;;){B!==l?(M=10,B=l):M--;const C=z.stateMachines[h],n0=C.transitions[v]||C.transitions["*"];e:for(let c0=0;c00){if(a0.revisit||(l=z0.remainder),!a0.toContinue)break e}else return N}}if(M<=0)throw["MhchemBugU","mhchem bug U. Please report."]}},concatArray:function(l,h){if(h)if(Array.isArray(h))for(let v=0;v":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"- orbital overlap":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,"pm-operator":/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,operator:/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"\\bond{(...)}":function(l){return z.patterns.findObserveGroups(l,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,CMT:/^[CMT](?=\[)/,"[(...)]":function(l){return z.patterns.findObserveGroups(l,"[","","","]")},"1st-level escape":/^(&|\\\\|\\hline)\s*/,"\\,":/^(?:\\[,\ ;:])/,"\\x{}{}":function(l){return z.patterns.findObserveGroups(l,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"\\x{}":function(l){return z.patterns.findObserveGroups(l,"",/^\\[a-zA-Z]+\{/,"}","")},"\\ca":/^\\ca(?:\s+|(?![a-zA-Z]))/,"\\x":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\/~|]/,"\\frac{(...)}":function(l){return z.patterns.findObserveGroups(l,"\\frac{","","","}","{","","","}")},"\\overset{(...)}":function(l){return z.patterns.findObserveGroups(l,"\\overset{","","","}","{","","","}")},"\\underset{(...)}":function(l){return z.patterns.findObserveGroups(l,"\\underset{","","","}","{","","","}")},"\\underbrace{(...)}":function(l){return z.patterns.findObserveGroups(l,"\\underbrace{","","","}_","{","","","}")},"\\color{(...)}0":function(l){return z.patterns.findObserveGroups(l,"\\color{","","","}")},"\\color{(...)}{(...)}1":function(l){return z.patterns.findObserveGroups(l,"\\color{","","","}","{","","","}")},"\\color(...){(...)}2":function(l){return z.patterns.findObserveGroups(l,"\\color","\\","",/^(?=\{)/,"{","","","}")},"\\ce{(...)}":function(l){return z.patterns.findObserveGroups(l,"\\ce{","","","}")},oxidation$:/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"d-oxidation$":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"roman numeral":/^[IVX]+/,"1/2$":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,amount:function(l){let h;if(h=l.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/),h)return{match_:h[0],remainder:l.substr(h[0].length)};const v=z.patterns.findObserveGroups(l,"","$","$","");return v&&(h=v.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/),h)?{match_:h[0],remainder:l.substr(h[0].length)}:null},amount2:function(l){return this.amount(l)},"(KV letters),":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(l){if(l.match(/^\([a-z]+\)$/))return null;const h=l.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return h?{match_:h[0],remainder:l.substr(h[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*[*.]\s*/},findObserveGroups:function(l,h,v,S,B,M,N,R,C,n0){const c0=function(v0,e0){if(typeof e0=="string")return v0.indexOf(e0)!==0?null:e0;const A0=v0.match(e0);return A0?A0[0]:null},z0=function(v0,e0,A0){let F=0;for(;e00,null};let a0=c0(l,h);if(a0===null||(l=l.substr(a0.length),a0=c0(l,v),a0===null))return null;const Z=z0(l,a0.length,S||B);if(Z===null)return null;const k0=l.substring(0,S?Z.endMatchEnd:Z.endMatchBegin);if(!(M||N))return{match_:k0,remainder:l.substr(Z.endMatchEnd)};const T0=this.findObserveGroups(l.substr(Z.endMatchEnd),M,N,R,C);if(T0===null)return null;const Q=[k0,T0.match_];return{match_:n0?Q.join(""):Q,remainder:T0.remainder}},match_:function(l,h){const v=z.patterns.patterns[l];if(v===void 0)throw["MhchemBugP","mhchem bug P. Please report. ("+l+")"];if(typeof v=="function")return z.patterns.patterns[l](h);{const S=h.match(v);if(S){let B;return S[2]?B=[S[1],S[2]]:S[1]?B=S[1]:B=S[0],{match_:B,remainder:h.substr(S[0].length)}}return null}}},actions:{"a=":function(l,h){l.a=(l.a||"")+h},"b=":function(l,h){l.b=(l.b||"")+h},"p=":function(l,h){l.p=(l.p||"")+h},"o=":function(l,h){l.o=(l.o||"")+h},"q=":function(l,h){l.q=(l.q||"")+h},"d=":function(l,h){l.d=(l.d||"")+h},"rm=":function(l,h){l.rm=(l.rm||"")+h},"text=":function(l,h){l.text_=(l.text_||"")+h},insert:function(l,h,v){return{type_:v}},"insert+p1":function(l,h,v){return{type_:v,p1:h}},"insert+p1+p2":function(l,h,v){return{type_:v,p1:h[0],p2:h[1]}},copy:function(l,h){return h},rm:function(l,h){return{type_:"rm",p1:h||""}},text:function(l,h){return z.go(h,"text")},"{text}":function(l,h){const v=["{"];return z.concatArray(v,z.go(h,"text")),v.push("}"),v},"tex-math":function(l,h){return z.go(h,"tex-math")},"tex-math tight":function(l,h){return z.go(h,"tex-math tight")},bond:function(l,h,v){return{type_:"bond",kind_:v||h}},"color0-output":function(l,h){return{type_:"color0",color:h[0]}},ce:function(l,h){return z.go(h)},"1/2":function(l,h){const v=[];h.match(/^[+\-]/)&&(v.push(h.substr(0,1)),h=h.substr(1));const S=h.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);return S[1]=S[1].replace(/\$/g,""),v.push({type_:"frac",p1:S[1],p2:S[2]}),S[3]&&(S[3]=S[3].replace(/\$/g,""),v.push({type_:"tex-math",p1:S[3]})),v},"9,9":function(l,h){return z.go(h,"9,9")}},createTransitions:function(l){let h,v,S,B;const M={};for(h in l)for(v in l[h])for(S=v.split("|"),l[h][v].stateArray=S,B=0;B":{"0|1|2|3":{action_:"r=",nextState:"r"},"a|as":{action_:["output","r="],nextState:"r"},"*":{action_:["output","r="],nextState:"r"}},"+":{o:{action_:"d= kv",nextState:"d"},"d|D":{action_:"d=",nextState:"d"},q:{action_:"d=",nextState:"qd"},"qd|qD":{action_:"d=",nextState:"qd"},dq:{action_:["output","d="],nextState:"d"},3:{action_:["sb=false","output","operator"],nextState:"0"}},amount:{"0|2":{action_:"a=",nextState:"a"}},"pm-operator":{"0|1|2|a|as":{action_:["sb=false","output",{type_:"operator",option:"\\pm"}],nextState:"0"}},operator:{"0|1|2|a|as":{action_:["sb=false","output","operator"],nextState:"0"}},"-$":{"o|q":{action_:["charge or bond","output"],nextState:"qd"},d:{action_:"d=",nextState:"d"},D:{action_:["output",{type_:"bond",option:"-"}],nextState:"3"},q:{action_:"d=",nextState:"qd"},qd:{action_:"d=",nextState:"qd"},"qD|dq":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},"-9":{"3|o":{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"3"}},"- orbital overlap":{o:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},d:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"}},"-":{"0|1|2":{action_:[{type_:"output",option:1},"beginsWithBond=true",{type_:"bond",option:"-"}],nextState:"3"},3:{action_:{type_:"bond",option:"-"}},a:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},as:{action_:[{type_:"output",option:2},{type_:"bond",option:"-"}],nextState:"3"},b:{action_:"b="},o:{action_:{type_:"- after o/d",option:!1},nextState:"2"},q:{action_:{type_:"- after o/d",option:!1},nextState:"2"},"d|qd|dq":{action_:{type_:"- after o/d",option:!0},nextState:"2"},"D|qD|p":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},amount2:{"1|3":{action_:"a=",nextState:"a"}},letters:{"0|1|2|3|a|as|b|p|bp|o":{action_:"o=",nextState:"o"},"q|dq":{action_:["output","o="],nextState:"o"},"d|D|qd|qD":{action_:"o after d",nextState:"o"}},digits:{o:{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},q:{action_:["output","o="],nextState:"o"},a:{action_:"o=",nextState:"o"}},"space A":{"b|p|bp":{}},space:{a:{nextState:"as"},0:{action_:"sb=false"},"1|2":{action_:"sb=true"},"r|rt|rd|rdt|rdq":{action_:"output",nextState:"0"},"*":{action_:["output","sb=true"],nextState:"1"}},"1st-level escape":{"1|2":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}]},"*":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}],nextState:"0"}},"[(...)]":{"r|rt":{action_:"rd=",nextState:"rd"},"rd|rdt":{action_:"rq=",nextState:"rdq"}},"...":{"o|d|D|dq|qd|qD":{action_:["output",{type_:"bond",option:"..."}],nextState:"3"},"*":{action_:[{type_:"output",option:1},{type_:"insert",option:"ellipsis"}],nextState:"1"}},". |* ":{"*":{action_:["output",{type_:"insert",option:"addition compound"}],nextState:"1"}},"state of aggregation $":{"*":{action_:["output","state of aggregation"],nextState:"1"}},"{[(":{"a|as|o":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"0|1|2|3":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"*":{action_:["output","o=","output","parenthesisLevel++"],nextState:"2"}},")]}":{"0|1|2|3|b|p|bp|o":{action_:["o=","parenthesisLevel--"],nextState:"o"},"a|as|d|D|q|qd|qD|dq":{action_:["output","o=","parenthesisLevel--"],nextState:"o"}},", ":{"*":{action_:["output","comma"],nextState:"0"}},"^_":{"*":{}},"^{(...)}|^($...$)":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"D"},q:{action_:"d=",nextState:"qD"},"d|D|qd|qD|dq":{action_:["output","d="],nextState:"D"}},"^a|^\\x{}{}|^\\x{}|^\\x|'":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"d"},q:{action_:"d=",nextState:"qd"},"d|qd|D|qD":{action_:"d="},dq:{action_:["output","d="],nextState:"d"}},"_{(state of aggregation)}$":{"d|D|q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x":{"0|1|2|as":{action_:"p=",nextState:"p"},b:{action_:"p=",nextState:"bp"},"3|o":{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},"q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"=<>":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"#":{"0|1|2|3|a|as|o":{action_:[{type_:"output",option:2},{type_:"bond",option:"#"}],nextState:"3"}},"{}":{"*":{action_:{type_:"output",option:1},nextState:"1"}},"{...}":{"0|1|2|3|a|as|b|p|bp":{action_:"o=",nextState:"o"},"o|d|D|q|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"$...$":{a:{action_:"a="},"0|1|2|3|as|b|p|bp|o":{action_:"o=",nextState:"o"},"as|o":{action_:"o="},"q|d|D|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"\\bond{(...)}":{"*":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"\\frac{(...)}":{"*":{action_:[{type_:"output",option:1},"frac-output"],nextState:"3"}},"\\overset{(...)}":{"*":{action_:[{type_:"output",option:2},"overset-output"],nextState:"3"}},"\\underset{(...)}":{"*":{action_:[{type_:"output",option:2},"underset-output"],nextState:"3"}},"\\underbrace{(...)}":{"*":{action_:[{type_:"output",option:2},"underbrace-output"],nextState:"3"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:[{type_:"output",option:2},"color-output"],nextState:"3"}},"\\color{(...)}0":{"*":{action_:[{type_:"output",option:2},"color0-output"]}},"\\ce{(...)}":{"*":{action_:[{type_:"output",option:2},"ce"],nextState:"3"}},"\\,":{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"1"}},"\\x{}{}|\\x{}|\\x":{"0|1|2|3|a|as|b|p|bp|o|c0":{action_:["o=","output"],nextState:"3"},"*":{action_:["output","o=","output"],nextState:"3"}},others:{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"3"}},else2:{a:{action_:"a to o",nextState:"o",revisit:!0},as:{action_:["output","sb=true"],nextState:"1",revisit:!0},"r|rt|rd|rdt|rdq":{action_:["output"],nextState:"0",revisit:!0},"*":{action_:["output","copy"],nextState:"3"}}}),actions:{"o after d":function(l,h){let v;if((l.d||"").match(/^[0-9]+$/)){const S=l.d;l.d=void 0,v=this.output(l),l.b=S}else v=this.output(l);return z.actions["o="](l,h),v},"d= kv":function(l,h){l.d=h,l.dType="kv"},"charge or bond":function(l,h){if(l.beginsWithBond){const v=[];return z.concatArray(v,this.output(l)),z.concatArray(v,z.actions.bond(l,h,"-")),v}l.d=h},"- after o/d":function(l,h,v){let S=z.patterns.match_("orbital",l.o||"");const B=z.patterns.match_("one lowercase greek letter $",l.o||""),M=z.patterns.match_("one lowercase latin letter $",l.o||""),N=z.patterns.match_("$one lowercase latin letter$ $",l.o||""),R=h==="-"&&(S&&S.remainder===""||B||M||N);R&&!l.a&&!l.b&&!l.p&&!l.d&&!l.q&&!S&&M&&(l.o="$"+l.o+"$");const C=[];return R?(z.concatArray(C,this.output(l)),C.push({type_:"hyphen"})):(S=z.patterns.match_("digits",l.d||""),v&&S&&S.remainder===""?(z.concatArray(C,z.actions["d="](l,h)),z.concatArray(C,this.output(l))):(z.concatArray(C,this.output(l)),z.concatArray(C,z.actions.bond(l,h,"-")))),C},"a to o":function(l){l.o=l.a,l.a=void 0},"sb=true":function(l){l.sb=!0},"sb=false":function(l){l.sb=!1},"beginsWithBond=true":function(l){l.beginsWithBond=!0},"beginsWithBond=false":function(l){l.beginsWithBond=!1},"parenthesisLevel++":function(l){l.parenthesisLevel++},"parenthesisLevel--":function(l){l.parenthesisLevel--},"state of aggregation":function(l,h){return{type_:"state of aggregation",p1:z.go(h,"o")}},comma:function(l,h){const v=h.replace(/\s*$/,"");return v!==h&&l.parenthesisLevel===0?{type_:"comma enumeration L",p1:v}:{type_:"comma enumeration M",p1:v}},output:function(l,h,v){let S;if(!l.r)S=[],!l.a&&!l.b&&!l.p&&!l.o&&!l.q&&!l.d&&!v||(l.sb&&S.push({type_:"entitySkip"}),!l.o&&!l.q&&!l.d&&!l.b&&!l.p&&v!==2?(l.o=l.a,l.a=void 0):!l.o&&!l.q&&!l.d&&(l.b||l.p)?(l.o=l.a,l.d=l.b,l.q=l.p,l.a=l.b=l.p=void 0):l.o&&l.dType==="kv"&&z.patterns.match_("d-oxidation$",l.d||"")?l.dType="oxidation":l.o&&l.dType==="kv"&&!l.q&&(l.dType=void 0),S.push({type_:"chemfive",a:z.go(l.a,"a"),b:z.go(l.b,"bd"),p:z.go(l.p,"pq"),o:z.go(l.o,"o"),q:z.go(l.q,"pq"),d:z.go(l.d,l.dType==="oxidation"?"oxidation":"bd"),dType:l.dType}));else{let B;l.rdt==="M"?B=z.go(l.rd,"tex-math"):l.rdt==="T"?B=[{type_:"text",p1:l.rd||""}]:B=z.go(l.rd);let M;l.rqt==="M"?M=z.go(l.rq,"tex-math"):l.rqt==="T"?M=[{type_:"text",p1:l.rq||""}]:M=z.go(l.rq),S={type_:"arrow",r:l.r,rd:B,rq:M}}for(const B in l)B!=="parenthesisLevel"&&B!=="beginsWithBond"&&delete l[B];return S},"oxidation-output":function(l,h){const v=["{"];return z.concatArray(v,z.go(h,"oxidation")),v.push("}"),v},"frac-output":function(l,h){return{type_:"frac-ce",p1:z.go(h[0]),p2:z.go(h[1])}},"overset-output":function(l,h){return{type_:"overset",p1:z.go(h[0]),p2:z.go(h[1])}},"underset-output":function(l,h){return{type_:"underset",p1:z.go(h[0]),p2:z.go(h[1])}},"underbrace-output":function(l,h){return{type_:"underbrace",p1:z.go(h[0]),p2:z.go(h[1])}},"color-output":function(l,h){return{type_:"color",color1:h[0],color2:z.go(h[1])}},"r=":function(l,h){l.r=h},"rdt=":function(l,h){l.rdt=h},"rd=":function(l,h){l.rd=h},"rqt=":function(l,h){l.rqt=h},"rq=":function(l,h){l.rq=h},operator:function(l,h,v){return{type_:"operator",kind_:v||h}}}},a:{transitions:z.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},"$(...)$":{"*":{action_:"tex-math tight",nextState:"1"}},",":{"*":{action_:{type_:"insert",option:"commaDecimal"}}},else2:{"*":{action_:"copy"}}}),actions:{}},o:{transitions:z.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},letters:{"*":{action_:"rm"}},"\\ca":{"*":{action_:{type_:"insert",option:"circa"}}},"\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"{text}"}},else2:{"*":{action_:"copy"}}}),actions:{}},text:{transitions:z.createTransitions({empty:{"*":{action_:"output"}},"{...}":{"*":{action_:"text="}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"\\greek":{"*":{action_:["output","rm"]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:["output","copy"]}},else:{"*":{action_:"text="}}}),actions:{output:function(l){if(l.text_){const h={type_:"text",p1:l.text_};for(const v in l)delete l[v];return h}}}},pq:{transitions:z.createTransitions({empty:{"*":{}},"state of aggregation $":{"*":{action_:"state of aggregation"}},i$:{0:{nextState:"!f",revisit:!0}},"(KV letters),":{0:{action_:"rm",nextState:"0"}},formula$:{0:{nextState:"f",revisit:!0}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"!f",revisit:!0}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"a-z":{f:{action_:"tex-math"}},letters:{"*":{action_:"rm"}},"-9.,9":{"*":{action_:"9,9"}},",":{"*":{action_:{type_:"insert+p1",option:"comma enumeration S"}}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"state of aggregation":function(l,h){return{type_:"state of aggregation subscript",p1:z.go(h,"o")}},"color-output":function(l,h){return{type_:"color",color1:h[0],color2:z.go(h[1],"pq")}}}},bd:{transitions:z.createTransitions({empty:{"*":{}},x$:{0:{nextState:"!f",revisit:!0}},formula$:{0:{nextState:"f",revisit:!0}},else:{0:{nextState:"!f",revisit:!0}},"-9.,9 no missing 0":{"*":{action_:"9,9"}},".":{"*":{action_:{type_:"insert",option:"electron dot"}}},"a-z":{f:{action_:"tex-math"}},x:{"*":{action_:{type_:"insert",option:"KV x"}}},letters:{"*":{action_:"rm"}},"'":{"*":{action_:{type_:"insert",option:"prime"}}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"color-output":function(l,h){return{type_:"color",color1:h[0],color2:z.go(h[1],"bd")}}}},oxidation:{transitions:z.createTransitions({empty:{"*":{}},"roman numeral":{"*":{action_:"roman-numeral"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},else:{"*":{action_:"copy"}}}),actions:{"roman-numeral":function(l,h){return{type_:"roman numeral",p1:h||""}}}},"tex-math":{transitions:z.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},else:{"*":{action_:"o="}}}),actions:{output:function(l){if(l.o){const h={type_:"tex-math",p1:l.o};for(const v in l)delete l[v];return h}}}},"tex-math tight":{transitions:z.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},"-|+":{"*":{action_:"tight operator"}},else:{"*":{action_:"o="}}}),actions:{"tight operator":function(l,h){l.o=(l.o||"")+"{"+h+"}"},output:function(l){if(l.o){const h={type_:"tex-math",p1:l.o};for(const v in l)delete l[v];return h}}}},"9,9":{transitions:z.createTransitions({empty:{"*":{}},",":{"*":{action_:"comma"}},else:{"*":{action_:"copy"}}}),actions:{comma:function(){return{type_:"commaDecimal"}}}},pu:{transitions:z.createTransitions({empty:{"*":{action_:"output"}},space$:{"*":{action_:["output","space"]}},"{[(|)]}":{"0|a":{action_:"copy"}},"(-)(9)^(-9)":{0:{action_:"number^",nextState:"a"}},"(-)(9.,9)(e)(99)":{0:{action_:"enumber",nextState:"a"}},space:{"0|a":{}},"pm-operator":{"0|a":{action_:{type_:"operator",option:"\\pm"},nextState:"0"}},operator:{"0|a":{action_:"copy",nextState:"0"}},"//":{d:{action_:"o=",nextState:"/"}},"/":{d:{action_:"o=",nextState:"/"}},"{...}|else":{"0|d":{action_:"d=",nextState:"d"},a:{action_:["space","d="],nextState:"d"},"/|q":{action_:"q=",nextState:"q"}}}),actions:{enumber:function(l,h){const v=[];return h[0]==="+-"||h[0]==="+/-"?v.push("\\pm "):h[0]&&v.push(h[0]),h[1]&&(z.concatArray(v,z.go(h[1],"pu-9,9")),h[2]&&(h[2].match(/[,.]/)?z.concatArray(v,z.go(h[2],"pu-9,9")):v.push(h[2])),h[3]=h[4]||h[3],h[3]&&(h[3]=h[3].trim(),h[3]==="e"||h[3].substr(0,1)==="*"?v.push({type_:"cdot"}):v.push({type_:"times"}))),h[3]&&v.push("10^{"+h[5]+"}"),v},"number^":function(l,h){const v=[];return h[0]==="+-"||h[0]==="+/-"?v.push("\\pm "):h[0]&&v.push(h[0]),z.concatArray(v,z.go(h[1],"pu-9,9")),v.push("^{"+h[2]+"}"),v},operator:function(l,h,v){return{type_:"operator",kind_:v||h}},space:function(){return{type_:"pu-space-1"}},output:function(l){let h;const v=z.patterns.match_("{(...)}",l.d||"");v&&v.remainder===""&&(l.d=v.match_);const S=z.patterns.match_("{(...)}",l.q||"");if(S&&S.remainder===""&&(l.q=S.match_),l.d&&(l.d=l.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),l.d=l.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),l.q){l.q=l.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),l.q=l.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F");const B={d:z.go(l.d,"pu"),q:z.go(l.q,"pu")};l.o==="//"?h={type_:"pu-frac",p1:B.d,p2:B.q}:(h=B.d,B.d.length>1||B.q.length>1?h.push({type_:" / "}):h.push({type_:"/"}),z.concatArray(h,B.q))}else h=z.go(l.d,"pu-2");for(const B in l)delete l[B];return h}}},"pu-2":{transitions:z.createTransitions({empty:{"*":{action_:"output"}},"*":{"*":{action_:["output","cdot"],nextState:"0"}},"\\x":{"*":{action_:"rm="}},space:{"*":{action_:["output","space"],nextState:"0"}},"^{(...)}|^(-1)":{1:{action_:"^(-1)"}},"-9.,9":{0:{action_:"rm=",nextState:"0"},1:{action_:"^(-1)",nextState:"0"}},"{...}|else":{"*":{action_:"rm=",nextState:"1"}}}),actions:{cdot:function(){return{type_:"tight cdot"}},"^(-1)":function(l,h){l.rm+="^{"+h+"}"},space:function(){return{type_:"pu-space-2"}},output:function(l){let h=[];if(l.rm){const v=z.patterns.match_("{(...)}",l.rm||"");v&&v.remainder===""?h=z.go(v.match_,"pu"):h={type_:"rm",p1:l.rm}}for(const v in l)delete l[v];return h}}},"pu-9,9":{transitions:z.createTransitions({empty:{0:{action_:"output-0"},o:{action_:"output-o"}},",":{0:{action_:["output-0","comma"],nextState:"o"}},".":{0:{action_:["output-0","copy"],nextState:"o"}},else:{"*":{action_:"text="}}}),actions:{comma:function(){return{type_:"commaDecimal"}},"output-0":function(l){const h=[];if(l.text_=l.text_||"",l.text_.length>4){let v=l.text_.length%3;v===0&&(v=3);for(let S=l.text_.length-3;S>0;S-=3)h.push(l.text_.substr(S,3)),h.push({type_:"1000 separator"});h.push(l.text_.substr(0,v)),h.reverse()}else h.push(l.text_);for(const v in l)delete l[v];return h},"output-o":function(l){const h=[];if(l.text_=l.text_||"",l.text_.length>4){const S=l.text_.length-3;for(var v=0;v":return"rightarrow";case"→":return"rightarrow";case"⟶":return"rightarrow";case"<-":return"leftarrow";case"<->":return"leftrightarrow";case"<-->":return"rightleftarrows";case"<=>":return"rightleftharpoons";case"⇌":return"rightleftharpoons";case"<=>>":return"rightequilibrium";case"<<=>":return"leftequilibrium";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getBond:function(l){switch(l){case"-":return"{-}";case"1":return"{-}";case"=":return"{=}";case"2":return"{=}";case"#":return"{\\equiv}";case"3":return"{\\equiv}";case"~":return"{\\tripledash}";case"~-":return"{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";case"~=":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"~--":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"-~-":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";case"...":return"{{\\cdot}{\\cdot}{\\cdot}}";case"....":return"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";case"->":return"{\\rightarrow}";case"<-":return"{\\leftarrow}";case"<":return"{<}";case">":return"{>}";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getOperator:function(l){switch(l){case"+":return" {}+{} ";case"-":return" {}-{} ";case"=":return" {}={} ";case"<":return" {}<{} ";case">":return" {}>{} ";case"<<":return" {}\\ll{} ";case">>":return" {}\\gg{} ";case"\\pm":return" {}\\pm{} ";case"\\approx":return" {}\\approx{} ";case"$\\approx$":return" {}\\approx{} ";case"v":return" \\downarrow{} ";case"(v)":return" \\downarrow{} ";case"^":return" \\uparrow{} ";case"(^)":return" \\uparrow{} ";default:throw["MhchemBugT","mhchem bug T. Please report."]}}};rt.__defineMacro("\\ce",function(l){return za(l.consumeArgs(1)[0],"ce")});rt.__defineMacro("\\pu",function(l){return za(l.consumeArgs(1)[0],"pu")});rt.__defineMacro("\\tripledash","{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");const Ui=Ii({propTypes:{onDrop:et.func.isRequired,component:et.any,shouldDragHighlight:et.func,style:et.any},getDefaultProps:function(){return{component:"div",shouldDragHighlight:()=>!0}},getInitialState:function(){return{dragHover:!1}},handleDrop:function(l){l.stopPropagation(),l.preventDefault(),this.setState({dragHover:!1}),this.props.onDrop(l)},handleDragEnd:function(){this.setState({dragHover:!1})},handleDragOver:function(l){l.preventDefault()},handleDragLeave:function(){this.setState({dragHover:!1})},handleDragEnter:function(l){this.setState({dragHover:this.props.shouldDragHighlight(l)})},render:function(){const l=this.state.dragHover?{opacity:.3}:{},h=this.props.component,v=Object.assign({},this.props);return delete v.component,delete v.shouldDragHighlight,X(h,{...v,style:Object.assign({},this.props.style,l),onDrop:this.handleDrop,onDragEnd:this.handleDragEnd,onDragOver:this.handleDragOver,onDragEnter:this.handleDragEnter,onDragLeave:this.handleDragLeave})}}),{InlineIcon:Ca}=Oi,{iconChevronDown:Vi,iconChevronRight:Xi,iconTrash:ji}=Ri,Ba=l=>{const h=j.omit(l,Si);return zi(h)};class Ta extends we.Component{constructor(h){super(h),this._toggleWidget=v=>{v.preventDefault(),this.setState({showWidget:!this.state.showWidget})},this._handleWidgetChange=(v,S,B)=>{var N;const M={...this.state.widgetInfo,options:{...this.state.widgetInfo.options,...((N=this.widget.current)==null?void 0:N.serialize())??{},...v}};this.props.onChange(M,S,B)},this._setStatic=v=>{const S={...this.state.widgetInfo,static:v};this.props.onChange(S)},this._handleAlignmentChange=v=>{const S=v.currentTarget.value,B=Object.assign({},this.state.widgetInfo);B.alignment=S,this.props.onChange(B)},this.getSaveWarnings=()=>{var S;const v=(S=this.widget.current)==null?void 0:S.getSaveWarnings;return v?v():[]},this.serialize=()=>{const v=this.state.widgetInfo;return{type:v.type,alignment:v.alignment,static:v.static,graded:v.graded,options:this.widget.current.serialize(),version:v.version}},this.state={showWidget:h.widgetIsOpen??!0,widgetInfo:Ba(h)},this.widget=we.createRef()}UNSAFE_componentWillReceiveProps(h){this.setState({widgetInfo:Ba(h)}),h.widgetIsOpen!=null&&h.widgetIsOpen!==this.props.widgetIsOpen&&this.setState({showWidget:h.widgetIsOpen})}render(){const h=this.state.widgetInfo,v=Ut(h.type);let S;this.props.apiOptions.showAlignmentOptions?S=Bi(h.type):S=["default"];const B=Mi(h.type);return j0("div",{className:"perseus-widget-editor",children:[j0("div",{className:"perseus-widget-editor-title "+(this.state.showWidget?"open":"closed"),children:[j0("a",{className:"perseus-widget-editor-title-id",href:"#",onClick:this._toggleWidget,children:[this.props.id,this.state.showWidget?X(Ca,{...Vi}):X(Ca,{...Xi})]}),B&&X(Yi,{label:"Static",checked:!!h.static,onChange:this._setStatic}),S.length>1&&X("select",{className:"alignment",value:h.alignment,onChange:this._handleAlignmentChange,children:S.map(M=>X("option",{children:M},M))}),X(Wi,{icon:ji,onClick:()=>{this.props.onRemove()},title:"Remove image widget"})]}),X("div",{className:"perseus-widget-editor-content "+(this.state.showWidget?"enter":"leave"),children:v&&X(v,{ref:this.widget,onChange:this._handleWidgetChange,static:h.static,apiOptions:this.props.apiOptions,...h.options})})]})}}function Yi(l){const{label:h,...v}=l,B=Li().get("switch");return j0(bi,{children:[X("label",{htmlFor:B,children:h}),X(Pi,{size:$i.xxSmall_6}),X(wi,{id:B,...v})]})}Ta.__docgenInfo={description:"",methods:[{name:"_toggleWidget",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"ReactSyntheticEvent",raw:"React.SyntheticEvent",alias:"React.SyntheticEvent"}}],returns:null},{name:"_handleWidgetChange",docblock:null,modifiers:[],params:[{name:"newProps",optional:!1,type:{name:"intersection",raw:`{ // Unserialized props id: string; onChange: ( @@ -258,7 +258,7 @@ M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Ae=function(){function o widgetInfo: PerseusWidget, cb?: () => unknown, silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"PerseusWidget"},name:"widgetInfo"},{type:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},name:"cb"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},onRemove:{required:!0,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},apiOptions:{required:!0,tsType:{name:"APIOptions"},description:""},widgetIsOpen:{required:!1,tsType:{name:"boolean"},description:""}}};class Ea extends we.Component{constructor(){super(...arguments),this.handleChange=h=>{const v=h.currentTarget.value;v!==""&&this.props.onChange&&this.props.onChange(v)}}shouldComponentUpdate(){return!1}render(){const h=Ei(),v=j.sortBy(j.keys(h),B=>h[B].displayName);return j0("select",{value:"",onChange:this.handleChange,children:[X("option",{value:"",children:"Add a widget…"}),X("option",{disabled:!0,children:"--"}),j.map(v,B=>X("option",{value:B,children:h[B].displayName},B))]})}}Ea.__docgenInfo={description:"",methods:[{name:"handleChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"ReactSyntheticEvent",raw:"React.SyntheticEvent",elements:[{name:"HTMLSelectElement"}],alias:"React.SyntheticEvent"}}],returns:null}],displayName:"WidgetSelect",props:{onChange:{required:!1,tsType:{name:"signature",type:"function",raw:"(widgetType: string) => unknown",signature:{arguments:[{type:{name:"string"},name:"widgetType"}],return:{name:"unknown"}}},description:""}}};const Zi="[[☃ {id}]]",Da="(\\[\\[☃ {id}\\]\\])",tt=new RegExp(Da.replace("{id}","[a-z-]+ [0-9]+"),"g"),Ki=/^\[\[([a-z-]+)$/,Ji=/(?:\n{2,}|^\n*)$/,Qi=/(\n*)$/,e1=/^(\n*)/,Gt=l=>{let h=l.toString();return h.length>=5&&(h=h.replace(/(\d)(?=(\d{3})+$)/g,"$1{,}")),h},t1=l=>{if(!Ji.test(l)){const h=Qi.exec(l);if(h){const v=h[1];return l+` +) => unknown`,signature:{arguments:[{type:{name:"PerseusWidget"},name:"widgetInfo"},{type:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},name:"cb"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},onRemove:{required:!0,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},apiOptions:{required:!0,tsType:{name:"APIOptions"},description:""},widgetIsOpen:{required:!1,tsType:{name:"boolean"},description:""}}};class Ea extends we.Component{constructor(){super(...arguments),this.handleChange=h=>{const v=h.currentTarget.value;v!==""&&this.props.onChange&&this.props.onChange(v)}}shouldComponentUpdate(){return!1}render(){const h=Ti(),v=j.sortBy(j.keys(h),B=>h[B].displayName);return j0("select",{value:"",onChange:this.handleChange,children:[X("option",{value:"",children:"Add a widget…"}),X("option",{disabled:!0,children:"--"}),j.map(v,B=>X("option",{value:B,children:h[B].displayName},B))]})}}Ea.__docgenInfo={description:"",methods:[{name:"handleChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"ReactSyntheticEvent",raw:"React.SyntheticEvent",elements:[{name:"HTMLSelectElement"}],alias:"React.SyntheticEvent"}}],returns:null}],displayName:"WidgetSelect",props:{onChange:{required:!1,tsType:{name:"signature",type:"function",raw:"(widgetType: string) => unknown",signature:{arguments:[{type:{name:"string"},name:"widgetType"}],return:{name:"unknown"}}},description:""}}};const Zi="[[☃ {id}]]",Da="(\\[\\[☃ {id}\\]\\])",tt=new RegExp(Da.replace("{id}","[a-z-]+ [0-9]+"),"g"),Ki=/^\[\[([a-z-]+)$/,Ji=/(?:\n{2,}|^\n*)$/,Qi=/(\n*)$/,e1=/^(\n*)/,Gt=l=>{let h=l.toString();return h.length>=5&&(h=h.replace(/(\d)(?=(\d{3})+$)/g,"$1{,}")),h},t1=l=>{if(!Ji.test(l)){const h=Qi.exec(l);if(h){const v=h[1];return l+` `.slice(0,2-v.length)}}return l},r1=l=>{const h=e1.exec(l);if(!h)return l;const v=h[1];return` @@ -266,7 +266,7 @@ M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Ae=function(){function o ![](`+R+")";this.lastUserValue=this.props.content,this.props.onChange({content:C})}return}const N=this.state.textAreaValue;j(M).chain().map(function(R){if(!R.type.match("image.*"))return null;const C="☃ "+j.uniqueId("image_");return S+=` -![](`+C+")",{file:R,sentinel:C}}).reject(j.isNull).tap(()=>{this.lastUserValue=N,this.props.onChange({content:S})}).each(R=>{v(R.file,C=>{this.lastUserValue=N,this.props.onChange({content:this.state.textAreaValue.replace(R.sentinel,C)})})})},this.handleChange=h=>{clearTimeout(this.deferredChange),this.setState({textAreaValue:h.currentTarget.value}),this.deferredChange=setTimeout(()=>{this.state.textAreaValue!==this.props.content&&this.props.onChange({content:this.state.textAreaValue})},this.props.apiOptions.editorChangeDelay)},this._handleKeyDown=h=>{if(h.stopPropagation(),h.key==="Tab"){const v=this.textarea.current,S=H0.textarea.getWordBeforeCursor(v),B=S.string.toLowerCase().match(Ki);if(B!=null){const M=B[1],N=Aa(),R=j.filter(N,C=>C.substring(0,M.length)===M);if(R.length===1){const C=R[0];this._addWidgetToContent(this.props.content,[S.pos.start,S.pos.end+1],C)}h.preventDefault()}}},this._maybeCopyWidgets=h=>{const v=h.currentTarget,S=v.value.substring(v.selectionStart,v.selectionEnd),B=j.map(S.match(tt),N=>H0.rWidgetParts.exec(N)[1]),M=j.pick(this.serialize().widgets,B);localStorage.perseusLastCopiedText=S,localStorage.perseusLastCopiedWidgets=JSON.stringify(M),Ni.log(`Widgets copied: ${localStorage.perseusLastCopiedWidgets}`)},this._maybePasteWidgets=h=>{const v=localStorage.perseusLastCopiedWidgets,S=localStorage.perseusLastCopiedText,B=h.originalEvent.clipboardData.getData("text");if(v&&S===B){h.preventDefault();const M=JSON.parse(v),N=this._safeWidgetNameMapping(M),R={};for(const[Z,k0]of Object.entries(M))R[N[Z]]=k0;const C=j.extend(R,this.props.widgets),n0=S.replace(tt,Z=>{const k0=H0.rWidgetParts.exec(Z),T0=k0[0],Q=k0[1];return T0.replace(Q,N[Q])}),c0=h.currentTarget,z0=c0.selectionStart,a0=this.state.textAreaValue.substr(0,z0)+n0+this.state.textAreaValue.substr(c0.selectionEnd);this.lastUserValue=this.state.textAreaValue,this.props.onChange({content:a0,widgets:C},()=>{const Z=z0+n0.length;H0.textarea.moveCursor(c0,Z)})}},this._safeWidgetNameMapping=h=>{const v=j.keys(h).map(R=>R.split(" ")),S=j.uniq(v.map(R=>R[0])),B=j.keys(this.props.widgets).map(R=>R.split(" ")),M={};j.each(S,R=>{M[R]=j.chain(B).filter(C=>C[0]===R).map(C=>+C[1]+1).max().value(),M[R]=Math.max(M[R],1)});const N={};return j.each(v,R=>{const C=R.join(" "),n0=R[0];N[C]=`${n0} ${M[n0]}`,M[n0]++}),N},this._addWidgetToContent=(h,v,S)=>{var T0;const B=j.map(h.match(tt),Q=>{const v0=H0.rWidgetParts.exec(Q),e0=v0[2],A0=+v0[3];return[e0,A0]}),M=j.reduce(B,(Q,v0)=>{const[e0,A0]=v0;return e0===S?Math.max(A0+1,Q):Q},1),N=S+" "+M,R=Zi.replace("{id}",N),C=Di(S)==="block",n0=h.slice(0,v[0]),c0=h.slice(v[1]),z0=C?t1(n0):n0,a0=C?r1(c0):c0,Z=z0+R+a0,k0=j.clone(this.props.widgets);k0[N]={options:(T0=Ut(S))==null?void 0:T0.defaultProps,type:S,version:_i(S)},this.lastUserValue=this.props.content,this.props.onChange({content:Z,widgets:k0},()=>{this.textarea.current&&H0.textarea.moveCursor(this.textarea.current,Z.length-c0.length)})},this._addWidget=h=>{const v=this.textarea.current;v&&(this._addWidgetToContent(this.props.content,[v.selectionStart,v.selectionEnd],h),v.focus())},this.addTemplate=h=>{const v=h.currentTarget.value;if(v==="")return;h.currentTarget.value="";let S=this.props.content;S=S.replace(/\n*$/,` +![](`+C+")",{file:R,sentinel:C}}).reject(j.isNull).tap(()=>{this.lastUserValue=N,this.props.onChange({content:S})}).each(R=>{v(R.file,C=>{this.lastUserValue=N,this.props.onChange({content:this.state.textAreaValue.replace(R.sentinel,C)})})})},this.handleChange=h=>{clearTimeout(this.deferredChange),this.setState({textAreaValue:h.currentTarget.value}),this.deferredChange=setTimeout(()=>{this.state.textAreaValue!==this.props.content&&this.props.onChange({content:this.state.textAreaValue})},this.props.apiOptions.editorChangeDelay)},this._handleKeyDown=h=>{if(h.stopPropagation(),h.key==="Tab"){const v=this.textarea.current,S=H0.textarea.getWordBeforeCursor(v),B=S.string.toLowerCase().match(Ki);if(B!=null){const M=B[1],N=Aa(),R=j.filter(N,C=>C.substring(0,M.length)===M);if(R.length===1){const C=R[0];this._addWidgetToContent(this.props.content,[S.pos.start,S.pos.end+1],C)}h.preventDefault()}}},this._maybeCopyWidgets=h=>{const v=h.currentTarget,S=v.value.substring(v.selectionStart,v.selectionEnd),B=j.map(S.match(tt),N=>H0.rWidgetParts.exec(N)[1]),M=j.pick(this.serialize().widgets,B);localStorage.perseusLastCopiedText=S,localStorage.perseusLastCopiedWidgets=JSON.stringify(M),qi.log(`Widgets copied: ${localStorage.perseusLastCopiedWidgets}`)},this._maybePasteWidgets=h=>{const v=localStorage.perseusLastCopiedWidgets,S=localStorage.perseusLastCopiedText,B=h.originalEvent.clipboardData.getData("text");if(v&&S===B){h.preventDefault();const M=JSON.parse(v),N=this._safeWidgetNameMapping(M),R={};for(const[Z,k0]of Object.entries(M))R[N[Z]]=k0;const C=j.extend(R,this.props.widgets),n0=S.replace(tt,Z=>{const k0=H0.rWidgetParts.exec(Z),T0=k0[0],Q=k0[1];return T0.replace(Q,N[Q])}),c0=h.currentTarget,z0=c0.selectionStart,a0=this.state.textAreaValue.substr(0,z0)+n0+this.state.textAreaValue.substr(c0.selectionEnd);this.lastUserValue=this.state.textAreaValue,this.props.onChange({content:a0,widgets:C},()=>{const Z=z0+n0.length;H0.textarea.moveCursor(c0,Z)})}},this._safeWidgetNameMapping=h=>{const v=j.keys(h).map(R=>R.split(" ")),S=j.uniq(v.map(R=>R[0])),B=j.keys(this.props.widgets).map(R=>R.split(" ")),M={};j.each(S,R=>{M[R]=j.chain(B).filter(C=>C[0]===R).map(C=>+C[1]+1).max().value(),M[R]=Math.max(M[R],1)});const N={};return j.each(v,R=>{const C=R.join(" "),n0=R[0];N[C]=`${n0} ${M[n0]}`,M[n0]++}),N},this._addWidgetToContent=(h,v,S)=>{var T0;const B=j.map(h.match(tt),Q=>{const v0=H0.rWidgetParts.exec(Q),e0=v0[2],A0=+v0[3];return[e0,A0]}),M=j.reduce(B,(Q,v0)=>{const[e0,A0]=v0;return e0===S?Math.max(A0+1,Q):Q},1),N=S+" "+M,R=Zi.replace("{id}",N),C=Ei(S)==="block",n0=h.slice(0,v[0]),c0=h.slice(v[1]),z0=C?t1(n0):n0,a0=C?r1(c0):c0,Z=z0+R+a0,k0=j.clone(this.props.widgets);k0[N]={options:(T0=Ut(S))==null?void 0:T0.defaultProps,type:S,version:Di(S)},this.lastUserValue=this.props.content,this.props.onChange({content:Z,widgets:k0},()=>{this.textarea.current&&H0.textarea.moveCursor(this.textarea.current,Z.length-c0.length)})},this._addWidget=h=>{const v=this.textarea.current;v&&(this._addWidgetToContent(this.props.content,[v.selectionStart,v.selectionEnd],h),v.focus())},this.addTemplate=h=>{const v=h.currentTarget.value;if(v==="")return;h.currentTarget.value="";let S=this.props.content;S=S.replace(/\n*$/,` `);let B;if(v==="table")B=`header 1 | header 2 | header 3 - | - | - @@ -284,7 +284,7 @@ x &= 25 \\end{align}$`;else if(v==="piecewise")B=`$f(x) = \\begin{cases} f(x-1)+5 & \\text{if }x > 1 \\end{cases}$`;else if(v==="allWidgets")B=Aa().map(N=>`[[${H0.snowman} ${N} 1]]`).join(` -`);else throw new Ci("Invalid template type: "+v,Bi.InvalidInput,{metadata:{templateType:v}});const M=S+B;this.lastUserValue=this.props.content,this.props.onChange({content:M},this.focusAndMoveToEnd)},this.getSaveWarnings=()=>{const h=j.intersection(this.widgetIds,j.keys(this.refs));return j(h).chain().map(S=>{const B=this.refs[S].getSaveWarnings,M=B?B():[];return j.map(M,N=>S+": "+N)}).flatten(!0).value()},this.focus=()=>{const h=this.textarea.current;h&&h.focus()},this.focusAndMoveToEnd=()=>{this.focus();const h=this.textarea.current;h&&(h.selectionStart=h.value.length,h.selectionEnd=h.value.length)},this.serialize=h=>{const v={},S=j.intersection(this.widgetIds,j.keys(this.refs));return j.each(S,B=>{v[B]=this.refs[B].serialize()}),h&&h.keepDeletedWidgets&&j.chain(this.props.widgets).keys().reject(B=>j.contains(S,B)).each(B=>{v[B]=this.props.widgets[B]}),{replace:this.props.replace,content:this.props.content,images:this.props.images,widgets:v}}}componentDidMount(){this.lastUserValue=null,this._sizeImages(this.props),Ai(this.textarea.current).on("copy cut",this._maybeCopyWidgets).on("paste",this._maybePasteWidgets)}UNSAFE_componentWillReceiveProps(h){this.props.content!==h.content&&this.setState({textAreaValue:h.content})}componentDidUpdate(h){const v=this.textarea.current;this.lastUserValue!=null&&v&&(v.focus(),v.value=this.lastUserValue,v.selectionStart=0,v.setSelectionRange(0,h.content.length),document.execCommand("insertText",!1,this.props.content)===!1&&(v.value=this.props.content),this.lastUserValue=null),this.props.content!==h.content&&this._sizeImages(this.props)}componentWillUnmount(){clearTimeout(this.deferredChange)}getWidgetEditor(h,v){if(Ut(v))return X(Ta,{ref:h,id:h,onChange:this._handleWidgetEditorChange.bind(this,h),onRemove:this._handleWidgetEditorRemove.bind(this,h),apiOptions:this.props.apiOptions,widgetIsOpen:this.props.widgetIsOpen,...this.props.widgets[h]},h)}render(){let h,v,S,B,M,N,R;const C=[];if(this.props.showWordCount){const T0=Ht.characterCount(this.props.content),Q=Math.floor(T0/6);R=X("span",{className:"perseus-editor-word-count",title:"~"+Gt(Q)+" words ("+Gt(T0)+" characters)",children:Gt(Q)})}if(this.props.widgetEnabled){h=H0.split(this.props.content,tt),v={},S=[];for(let Q=0;Q{if(e0.type==="math"||e0.type==="blockMath"){const A0=qi(e0.content);try{rt.renderToString(A0,{colorIsTextColor:!0})}catch(F){C.push({math:A0,message:F.message})}}})}else{const v0=H0.rWidgetParts.exec(h[Q]);if(v0!=null){const e0=v0[1],A0=v0[2],F=e0 in v;v[e0]=this.getWidgetEditor(e0,A0);const Y0=F||!v[e0]?"error ":"",_0=F?Q:e0;S.push(X("b",{className:Y0,children:h[Q]},_0))}}if(this.widgetIds=j.keys(v),B=X(Ea,{onChange:this._addWidget}),M=j0("select",{onChange:this.addTemplate,children:[X("option",{value:"",children:"Insert template…"}),X("option",{disabled:!0,children:"--"}),X("option",{value:"table",children:"Table"}),X("option",{value:"titledTable",children:"Titled table"}),X("option",{value:"alignment",children:"Aligned equations"}),X("option",{value:"piecewise",children:"Piecewise function"}),X("option",{disabled:!0,children:"--"}),X("option",{value:"allWidgets",children:"All widgets (for testing)"})]}),!this.props.immutableWidgets){const Q=Object.values(v);N=j0("div",{className:"perseus-editor-widgets",children:[j0("div",{className:"perseus-editor-widgets-selectors",children:[B,M,R]}),Q]}),R=null}}else S=[this.props.content];S.push(X("br",{},"end"));const n0=[X("div",{className:"perseus-textarea-underlay",ref:this.underlay,children:S},"underlay"),X("textarea",{ref:this.textarea,onChange:this.handleChange,onKeyDown:this._handleKeyDown,placeholder:this.props.placeholder,disabled:this.props.disabled,value:this.state.textAreaValue},"textarea")];let c0;this.props.imageUploader?c0=X(Ui,{onDrop:this.handleDrop,className:"perseus-textarea-pair",children:n0}):c0=X("div",{className:"perseus-textarea-pair",children:n0});const a0=this.props.content.replace(/\[\[\u2603 (([a-z-]+) ([0-9]+))\]\]/g,"").trim().length===0,Z=!/\[\[\u2603 (([a-z-]+) ([0-9]+))\]\]/g.test(this.props.content),k0={borderTop:"none",padding:4,backgroundColor:"pink"};return j0("div",{className:"perseus-single-editor "+(this.props.className||""),children:[c0,C.length>0&&X(Hi,{errorList:C}),this.props.warnNoPrompt&&a0&&X("div",{style:k0,children:"Graded Groups should contain a prompt"}),this.props.warnNoWidgets&&Z&&X("div",{style:k0,children:"Graded Groups should contain at least one widget"}),R,N]})}};Xt.defaultProps={content:"",placeholder:"",widgets:{},images:{},disabled:!1,widgetEnabled:!0,immutableWidgets:!1,showWordCount:!1,warnNoPrompt:!1,warnNoWidgets:!1};let Vt=Xt;Vt.__docgenInfo={description:"",methods:[{name:"getWidgetEditor",docblock:null,modifiers:[],params:[{name:"id",optional:!1,type:{name:"string"}},{name:"type",optional:!1,type:{name:'PerseusWidget["type"]',raw:'PerseusWidget["type"]'}}],returns:{type:{name:"union",raw:"undefined | React.ReactNode",elements:[{name:"undefined"},{name:"ReactReactNode",raw:"React.ReactNode"}]}}},{name:"_handleWidgetEditorChange",docblock:null,modifiers:[],params:[{name:"id",optional:!1,type:{name:"string"}},{name:"newWidgetInfo",optional:!1,type:{name:"PerseusWidget",alias:"PerseusWidget"}},{name:"cb",optional:!0,type:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}}},{name:"silent",optional:!0,type:{name:"boolean"}}],returns:null},{name:"_handleWidgetEditorRemove",docblock:null,modifiers:[],params:[{name:"id",optional:!1,type:{name:"string"}}],returns:null},{name:"_sizeImages",docblock:`Calculate the size of all the images in props.content, and send +`);else throw new Ai("Invalid template type: "+v,Ci.InvalidInput,{metadata:{templateType:v}});const M=S+B;this.lastUserValue=this.props.content,this.props.onChange({content:M},this.focusAndMoveToEnd)},this.getSaveWarnings=()=>{const h=j.intersection(this.widgetIds,j.keys(this.refs));return j(h).chain().map(S=>{const B=this.refs[S].getSaveWarnings,M=B?B():[];return j.map(M,N=>S+": "+N)}).flatten(!0).value()},this.focus=()=>{const h=this.textarea.current;h&&h.focus()},this.focusAndMoveToEnd=()=>{this.focus();const h=this.textarea.current;h&&(h.selectionStart=h.value.length,h.selectionEnd=h.value.length)},this.serialize=h=>{const v={},S=j.intersection(this.widgetIds,j.keys(this.refs));return j.each(S,B=>{v[B]=this.refs[B].serialize()}),h&&h.keepDeletedWidgets&&j.chain(this.props.widgets).keys().reject(B=>j.contains(S,B)).each(B=>{v[B]=this.props.widgets[B]}),{replace:this.props.replace,content:this.props.content,images:this.props.images,widgets:v}}}componentDidMount(){this.lastUserValue=null,this._sizeImages(this.props),ki(this.textarea.current).on("copy cut",this._maybeCopyWidgets).on("paste",this._maybePasteWidgets)}UNSAFE_componentWillReceiveProps(h){this.props.content!==h.content&&this.setState({textAreaValue:h.content})}componentDidUpdate(h){const v=this.textarea.current;this.lastUserValue!=null&&v&&(v.focus(),v.value=this.lastUserValue,v.selectionStart=0,v.setSelectionRange(0,h.content.length),document.execCommand("insertText",!1,this.props.content)===!1&&(v.value=this.props.content),this.lastUserValue=null),this.props.content!==h.content&&this._sizeImages(this.props)}componentWillUnmount(){clearTimeout(this.deferredChange)}getWidgetEditor(h,v){if(Ut(v))return X(Ta,{ref:h,id:h,onChange:this._handleWidgetEditorChange.bind(this,h),onRemove:this._handleWidgetEditorRemove.bind(this,h),apiOptions:this.props.apiOptions,widgetIsOpen:this.props.widgetIsOpen,...this.props.widgets[h]},h)}render(){let h,v,S,B,M,N,R;const C=[];if(this.props.showWordCount){const T0=Ht.characterCount(this.props.content),Q=Math.floor(T0/6);R=X("span",{className:"perseus-editor-word-count",title:"~"+Gt(Q)+" words ("+Gt(T0)+" characters)",children:Gt(Q)})}if(this.props.widgetEnabled){h=H0.split(this.props.content,tt),v={},S=[];for(let Q=0;Q{if(e0.type==="math"||e0.type==="blockMath"){const A0=_i(e0.content);try{rt.renderToString(A0,{colorIsTextColor:!0})}catch(F){C.push({math:A0,message:F.message})}}})}else{const v0=H0.rWidgetParts.exec(h[Q]);if(v0!=null){const e0=v0[1],A0=v0[2],F=e0 in v;v[e0]=this.getWidgetEditor(e0,A0);const Y0=F||!v[e0]?"error ":"",_0=F?Q:e0;S.push(X("b",{className:Y0,children:h[Q]},_0))}}if(this.widgetIds=j.keys(v),B=X(Ea,{onChange:this._addWidget}),M=j0("select",{onChange:this.addTemplate,children:[X("option",{value:"",children:"Insert template…"}),X("option",{disabled:!0,children:"--"}),X("option",{value:"table",children:"Table"}),X("option",{value:"titledTable",children:"Titled table"}),X("option",{value:"alignment",children:"Aligned equations"}),X("option",{value:"piecewise",children:"Piecewise function"}),X("option",{disabled:!0,children:"--"}),X("option",{value:"allWidgets",children:"All widgets (for testing)"})]}),!this.props.immutableWidgets){const Q=Object.values(v);N=j0("div",{className:"perseus-editor-widgets",children:[j0("div",{className:"perseus-editor-widgets-selectors",children:[B,M,R]}),Q]}),R=null}}else S=[this.props.content];S.push(X("br",{},"end"));const n0=[X("div",{className:"perseus-textarea-underlay",ref:this.underlay,children:S},"underlay"),X("textarea",{ref:this.textarea,onChange:this.handleChange,onKeyDown:this._handleKeyDown,placeholder:this.props.placeholder,disabled:this.props.disabled,value:this.state.textAreaValue},"textarea")];let c0;this.props.imageUploader?c0=X(Ui,{onDrop:this.handleDrop,className:"perseus-textarea-pair",children:n0}):c0=X("div",{className:"perseus-textarea-pair",children:n0});const a0=this.props.content.replace(/\[\[\u2603 (([a-z-]+) ([0-9]+))\]\]/g,"").trim().length===0,Z=!/\[\[\u2603 (([a-z-]+) ([0-9]+))\]\]/g.test(this.props.content),k0={borderTop:"none",padding:4,backgroundColor:"pink"};return j0("div",{className:"perseus-single-editor "+(this.props.className||""),children:[c0,C.length>0&&X(Hi,{errorList:C}),this.props.warnNoPrompt&&a0&&X("div",{style:k0,children:"Graded Groups should contain a prompt"}),this.props.warnNoWidgets&&Z&&X("div",{style:k0,children:"Graded Groups should contain at least one widget"}),R,N]})}};Xt.defaultProps={content:"",placeholder:"",widgets:{},images:{},disabled:!1,widgetEnabled:!0,immutableWidgets:!1,showWordCount:!1,warnNoPrompt:!1,warnNoWidgets:!1};let Vt=Xt;Vt.__docgenInfo={description:"",methods:[{name:"getWidgetEditor",docblock:null,modifiers:[],params:[{name:"id",optional:!1,type:{name:"string"}},{name:"type",optional:!1,type:{name:'PerseusWidget["type"]',raw:'PerseusWidget["type"]'}}],returns:{type:{name:"union",raw:"undefined | React.ReactNode",elements:[{name:"undefined"},{name:"ReactReactNode",raw:"React.ReactNode"}]}}},{name:"_handleWidgetEditorChange",docblock:null,modifiers:[],params:[{name:"id",optional:!1,type:{name:"string"}},{name:"newWidgetInfo",optional:!1,type:{name:"PerseusWidget",alias:"PerseusWidget"}},{name:"cb",optional:!0,type:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}}},{name:"silent",optional:!0,type:{name:"boolean"}}],returns:null},{name:"_handleWidgetEditorRemove",docblock:null,modifiers:[],params:[{name:"id",optional:!1,type:{name:"string"}}],returns:null},{name:"_sizeImages",docblock:`Calculate the size of all the images in props.content, and send those sizes to this.props.images using props.onChange.`,modifiers:[],params:[{name:"props",optional:!1,type:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ apiOptions: any; className?: string; diff --git a/assets/editor-jsonify-iuVqcZSO.js b/assets/editor-jsonify-SX5E4P_Y.js similarity index 61% rename from assets/editor-jsonify-iuVqcZSO.js rename to assets/editor-jsonify-SX5E4P_Y.js index e3fd7d4617..80064ac4f8 100644 --- a/assets/editor-jsonify-iuVqcZSO.js +++ b/assets/editor-jsonify-SX5E4P_Y.js @@ -1 +1 @@ -import{_ as o}from"./jquery-yG1GhClm.js";import{d as i}from"./article-renderer-6f7Dak4j.js";const s={serialize:function(){return o.omit(this.props,i)}};export{s as E}; +import{_ as o}from"./jquery-yG1GhClm.js";import{d as i}from"./article-renderer-TMdCDA85.js";const s={serialize:function(){return o.omit(this.props,i)}};export{s as E}; diff --git a/assets/editor-page-whMlClJx.js b/assets/editor-page-a0k5dFPi.js similarity index 95% rename from assets/editor-page-whMlClJx.js rename to assets/editor-page-a0k5dFPi.js index 04fdf18fcc..5bcf409502 100644 --- a/assets/editor-page-whMlClJx.js +++ b/assets/editor-page-a0k5dFPi.js @@ -1,4 +1,4 @@ -import{a,j as s}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import{_ as o}from"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as k,C as I}from"./perseus-api-mOiZT07d.js";import{c as M}from"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as b}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{r as p}from"./index-TT1qJ6UJ.js";import{I as T,J as R}from"./register-all-widgets-and-editors-for-testing-EmJZ0mCF.js";import{V as A}from"./viewport-resizer-2eJF63Xv.js";import{I as O}from"./icon-paths-AuJwhOz7.js";import{D as q}from"./device-framer-YjfQ5GqB.js";import{E as C}from"./editor-HVcPyY4Q.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{I as E}from"./item-extras-editor-2WxH27E_.js";const{InfoTip:U,InlineIcon:d}=b,{iconCircleArrowDown:D,iconCircleArrowUp:L,iconPlus:P,iconTrash:N}=O,f=class f extends p.Component{constructor(){super(...arguments),this.editor=p.createRef(),this.handleChange=e=>{this.props.onChange({replace:e.target.checked})},this.focus=()=>{var e;(e=this.editor.current)==null||e.focus()},this.getSaveWarnings=()=>{var e;return(e=this.editor.current)==null?void 0:e.getSaveWarnings()},this.serialize=e=>{var t;return(t=this.editor.current)==null?void 0:t.serialize(e)}}render(){return a("div",{className:"perseus-hint-editor "+this.props.className,children:[this.props.showTitle&&s("div",{className:"pod-title",children:"Hint"}),s(C,{ref:this.editor,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},this.props.itemId),a("div",{className:"hint-controls-container clearfix",children:[this.props.showMoveButtons&&a("span",{className:"reorder-hints",children:[s("button",{type:"button",className:this.props.isLast?"hidden":"",onClick:o.partial(this.props.onMove,1),children:s(d,{...D})})," ",s("button",{type:"button",className:this.props.isFirst?"hidden":"",onClick:o.partial(this.props.onMove,-1),children:s(d,{...L})})," ",this.props.isLast&&s(U,{children:s("p",{children:"The last hint is automatically bolded."})})]}),s("input",{type:"checkbox",checked:this.props.replace,onChange:this.handleChange}),"Replace previous hint",this.props.showRemoveButton&&a("button",{type:"button",className:"remove-hint simple-button orange",onClick:this.props.onRemove,children:[s(d,{...N}),"Remove this hint"," "]})]})]})}};f.defaultProps={className:"",content:"",replace:!1,showMoveButtons:!0,showTitle:!0,showRemoveButton:!0};let l=f;const y=class y extends p.Component{constructor(){super(...arguments),this.editor=p.createRef(),this.frame=p.createRef(),this.updatePreview=()=>{var t;const e=this.props.isLast&&!/\*\*/.test(this.props.hint.content);(t=this.frame.current)==null||t.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}}})},this.getSaveWarnings=()=>{var e;return(e=this.editor.current)==null?void 0:e.getSaveWarnings()},this.serialize=e=>{var t;return(t=this.editor.current)==null?void 0:t.serialize(e)},this.focus=()=>{var e;(e=this.editor.current)==null||e.focus()}}componentDidMount(){this.updatePreview()}componentDidUpdate(){this.updatePreview()}render(){const e=this.props.deviceType==="phone"||this.props.deviceType==="tablet";return a("div",{className:"perseus-combined-hint-editor perseus-editor-row",children:[s("div",{className:"perseus-editor-left-cell",children:s(l,{ref:this.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})}),s("div",{className:"perseus-editor-right-cell",children:s(q,{deviceType:this.props.deviceType,nochrome:!0,children:s(T,{ref:this.frame,datasetKey:"mobile",datasetValue:e,seamless:!0,url:this.props.previewURL})})})]})}};y.defaultProps={highlightLint:!1};let c=y;const m=class m extends p.Component{constructor(){super(...arguments),this.handleHintChange=(e,t,i,n)=>{const r=[...this.props.hints];r[e]=o.extend({},this.serializeHint(e,{keepDeletedWidgets:!0}),t),this.props.onChange({hints:r},i,n)},this.handleHintRemove=e=>{if(!confirm("Are you sure you want to delete this hint?"))return;const t=[...this.props.hints];t.splice(e,1),this.props.onChange({hints:t})},this.handleHintMove=(e,t)=>{const i=[...this.props.hints],n=i.splice(e,1)[0];i.splice(e+t,0,n),this.props.onChange({hints:i},()=>{this.refs["hintEditor"+(e+t)].focus()})},this.addHint=()=>{const e=this.props.hints.concat([{content:"",images:{},widgets:{}}]);this.props.onChange({hints:e},()=>{const t=e.length-1;this.refs["hintEditor"+t].focus()})},this.getSaveWarnings=()=>o.chain(this.props.hints).map((e,t)=>o.map(this.refs["hintEditor"+t].getSaveWarnings(),i=>"Hint "+(t+1)+": "+i)).flatten(!0).value(),this.serialize=e=>this.props.hints.map((t,i)=>this.serializeHint(i,e)),this.serializeHint=(e,t)=>this.refs["hintEditor"+e].serialize(t)}render(){const{itemId:e,hints:t}=this.props,i=o.map(t,function(n,r){return s(c,{ref:"hintEditor"+r,isFirst:r===0,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:[]},"hintEditor"+r)},this);return a("div",{className:"perseus-hints-editor perseus-editor-table",children:[i,s("div",{className:"perseus-editor-row",children:s("div",{className:"add-hint-container perseus-editor-left-cell",children:a("button",{type:"button",className:"add-hint simple-button orange",onClick:this.addHint,children:[s(d,{...P})," Add a hint"]})})})]})}};m.HintEditor=l,m.defaultProps={onChange:()=>{},hints:[],highlightLint:!1};let h=m;l.__docgenInfo={description:"",methods:[{name:"handleChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"ReactChangeEvent",raw:"React.ChangeEvent",elements:[{name:"HTMLInputElement"}],alias:"React.ChangeEvent"}}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[{name:"options",optional:!1,type:{name:"any"}}],returns:null}],displayName:"HintEditor",props:{itemId:{required:!1,tsType:{name:"string"},description:""},apiOptions:{required:!1,tsType:{name:"APIOptions"},description:""},className:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},imageUploader:{required:!1,tsType:{name:"ImageUploader"},description:""},showMoveButtons:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"true",computed:!1}},showRemoveButton:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"true",computed:!1}},showTitle:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"true",computed:!1}},content:{required:!1,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:"",defaultValue:{value:'""',computed:!1}},replace:{required:!1,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:"",defaultValue:{value:"false",computed:!1}},widgets:{required:!1,tsType:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"WidgetDict"},{name:"null"},{name:"undefined"}]},description:""},images:{required:!1,tsType:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"ImageDict"},{name:"null"},{name:"undefined"}]},description:""},isLast:{required:!0,tsType:{name:"boolean"},description:""},isFirst:{required:!0,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(direction: number) => unknown",signature:{arguments:[{type:{name:"number"},name:"direction"}],return:{name:"unknown"}}},description:""},onRemove:{required:!0,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},onChange:{required:!0,tsType:{name:"ChangeHandler"},description:""},__type:{required:!1,tsType:{name:"literal",value:'"hint"'},description:""}}};h.__docgenInfo={description:"",methods:[{name:"handleHintChange",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:{name:"number"}},{name:"newProps",optional:!1,type:{name:"signature",type:"object",raw:`{ +import{a,j as s}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import{_ as o}from"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as k,C as I}from"./perseus-api-mOiZT07d.js";import{c as M}from"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as b}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{r as p}from"./index-TT1qJ6UJ.js";import{I as T,J as R}from"./register-all-widgets-and-editors-for-testing-Duh1ZXvu.js";import{V as A}from"./viewport-resizer-spuc4uQO.js";import{I as O}from"./icon-paths-AuJwhOz7.js";import{D as q}from"./device-framer-kfyrsN2-.js";import{E as C}from"./editor-I-vnrXtz.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{I as E}from"./item-extras-editor-cTVEyrYD.js";const{InfoTip:U,InlineIcon:d}=b,{iconCircleArrowDown:D,iconCircleArrowUp:L,iconPlus:P,iconTrash:N}=O,f=class f extends p.Component{constructor(){super(...arguments),this.editor=p.createRef(),this.handleChange=e=>{this.props.onChange({replace:e.target.checked})},this.focus=()=>{var e;(e=this.editor.current)==null||e.focus()},this.getSaveWarnings=()=>{var e;return(e=this.editor.current)==null?void 0:e.getSaveWarnings()},this.serialize=e=>{var t;return(t=this.editor.current)==null?void 0:t.serialize(e)}}render(){return a("div",{className:"perseus-hint-editor "+this.props.className,children:[this.props.showTitle&&s("div",{className:"pod-title",children:"Hint"}),s(C,{ref:this.editor,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},this.props.itemId),a("div",{className:"hint-controls-container clearfix",children:[this.props.showMoveButtons&&a("span",{className:"reorder-hints",children:[s("button",{type:"button",className:this.props.isLast?"hidden":"",onClick:o.partial(this.props.onMove,1),children:s(d,{...D})})," ",s("button",{type:"button",className:this.props.isFirst?"hidden":"",onClick:o.partial(this.props.onMove,-1),children:s(d,{...L})})," ",this.props.isLast&&s(U,{children:s("p",{children:"The last hint is automatically bolded."})})]}),s("input",{type:"checkbox",checked:this.props.replace,onChange:this.handleChange}),"Replace previous hint",this.props.showRemoveButton&&a("button",{type:"button",className:"remove-hint simple-button orange",onClick:this.props.onRemove,children:[s(d,{...N}),"Remove this hint"," "]})]})]})}};f.defaultProps={className:"",content:"",replace:!1,showMoveButtons:!0,showTitle:!0,showRemoveButton:!0};let l=f;const y=class y extends p.Component{constructor(){super(...arguments),this.editor=p.createRef(),this.frame=p.createRef(),this.updatePreview=()=>{var t;const e=this.props.isLast&&!/\*\*/.test(this.props.hint.content);(t=this.frame.current)==null||t.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}}})},this.getSaveWarnings=()=>{var e;return(e=this.editor.current)==null?void 0:e.getSaveWarnings()},this.serialize=e=>{var t;return(t=this.editor.current)==null?void 0:t.serialize(e)},this.focus=()=>{var e;(e=this.editor.current)==null||e.focus()}}componentDidMount(){this.updatePreview()}componentDidUpdate(){this.updatePreview()}render(){const e=this.props.deviceType==="phone"||this.props.deviceType==="tablet";return a("div",{className:"perseus-combined-hint-editor perseus-editor-row",children:[s("div",{className:"perseus-editor-left-cell",children:s(l,{ref:this.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})}),s("div",{className:"perseus-editor-right-cell",children:s(q,{deviceType:this.props.deviceType,nochrome:!0,children:s(T,{ref:this.frame,datasetKey:"mobile",datasetValue:e,seamless:!0,url:this.props.previewURL})})})]})}};y.defaultProps={highlightLint:!1};let c=y;const m=class m extends p.Component{constructor(){super(...arguments),this.handleHintChange=(e,t,i,n)=>{const r=[...this.props.hints];r[e]=o.extend({},this.serializeHint(e,{keepDeletedWidgets:!0}),t),this.props.onChange({hints:r},i,n)},this.handleHintRemove=e=>{if(!confirm("Are you sure you want to delete this hint?"))return;const t=[...this.props.hints];t.splice(e,1),this.props.onChange({hints:t})},this.handleHintMove=(e,t)=>{const i=[...this.props.hints],n=i.splice(e,1)[0];i.splice(e+t,0,n),this.props.onChange({hints:i},()=>{this.refs["hintEditor"+(e+t)].focus()})},this.addHint=()=>{const e=this.props.hints.concat([{content:"",images:{},widgets:{}}]);this.props.onChange({hints:e},()=>{const t=e.length-1;this.refs["hintEditor"+t].focus()})},this.getSaveWarnings=()=>o.chain(this.props.hints).map((e,t)=>o.map(this.refs["hintEditor"+t].getSaveWarnings(),i=>"Hint "+(t+1)+": "+i)).flatten(!0).value(),this.serialize=e=>this.props.hints.map((t,i)=>this.serializeHint(i,e)),this.serializeHint=(e,t)=>this.refs["hintEditor"+e].serialize(t)}render(){const{itemId:e,hints:t}=this.props,i=o.map(t,function(n,r){return s(c,{ref:"hintEditor"+r,isFirst:r===0,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:[]},"hintEditor"+r)},this);return a("div",{className:"perseus-hints-editor perseus-editor-table",children:[i,s("div",{className:"perseus-editor-row",children:s("div",{className:"add-hint-container perseus-editor-left-cell",children:a("button",{type:"button",className:"add-hint simple-button orange",onClick:this.addHint,children:[s(d,{...P})," Add a hint"]})})})]})}};m.HintEditor=l,m.defaultProps={onChange:()=>{},hints:[],highlightLint:!1};let h=m;l.__docgenInfo={description:"",methods:[{name:"handleChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"ReactChangeEvent",raw:"React.ChangeEvent",elements:[{name:"HTMLInputElement"}],alias:"React.ChangeEvent"}}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[{name:"options",optional:!1,type:{name:"any"}}],returns:null}],displayName:"HintEditor",props:{itemId:{required:!1,tsType:{name:"string"},description:""},apiOptions:{required:!1,tsType:{name:"APIOptions"},description:""},className:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},imageUploader:{required:!1,tsType:{name:"ImageUploader"},description:""},showMoveButtons:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"true",computed:!1}},showRemoveButton:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"true",computed:!1}},showTitle:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"true",computed:!1}},content:{required:!1,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:"",defaultValue:{value:'""',computed:!1}},replace:{required:!1,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:"",defaultValue:{value:"false",computed:!1}},widgets:{required:!1,tsType:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"WidgetDict"},{name:"null"},{name:"undefined"}]},description:""},images:{required:!1,tsType:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"ImageDict"},{name:"null"},{name:"undefined"}]},description:""},isLast:{required:!0,tsType:{name:"boolean"},description:""},isFirst:{required:!0,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(direction: number) => unknown",signature:{arguments:[{type:{name:"number"},name:"direction"}],return:{name:"unknown"}}},description:""},onRemove:{required:!0,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},onChange:{required:!0,tsType:{name:"ChangeHandler"},description:""},__type:{required:!1,tsType:{name:"literal",value:'"hint"'},description:""}}};h.__docgenInfo={description:"",methods:[{name:"handleHintChange",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:{name:"number"}},{name:"newProps",optional:!1,type:{name:"signature",type:"object",raw:`{ apiOptions?: APIOptions; deviceType: DeviceType; imageUploader?: ImageUploader; diff --git a/assets/editor-page-with-storybook-preview-TaVLOU-C.js b/assets/editor-page-with-storybook-preview-PyHv_pWj.js similarity index 74% rename from assets/editor-page-with-storybook-preview-TaVLOU-C.js rename to assets/editor-page-with-storybook-preview-PyHv_pWj.js index 5e639fda1c..a7d093b4a4 100644 --- a/assets/editor-page-with-storybook-preview-TaVLOU-C.js +++ b/assets/editor-page-with-storybook-preview-PyHv_pWj.js @@ -1 +1 @@ -import{a as l,j as t}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import{R as f}from"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{B as I}from"./choice-E4eyMygy.js";import{V as a}from"./index-6h5t6F0w.js";import{I as _}from"./locked-label-settings-X4RKk04F.js";import{S as A}from"./index-qUyqkRvh.js";import{c as h,s as o}from"./index-deFLJwr4.js";import{L as q}from"./index-h_CiYGGb.js";import{x as B}from"./index-rfN0X25E.js";import{a as C}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{l as R}from"./index-awljIyHI.js";import{r as i}from"./index-TT1qJ6UJ.js";import{m as g}from"./strings-OAjNfY6D.js";import{E}from"./editor-page-whMlClJx.js";import{f as O}from"./flags-for-api-options-oZTvm2lx.js";const j=C("onChange");function M(m){const[y,w]=i.useState("phone"),[S,b]=i.useState(!1),[x,v]=i.useState(),[d,P]=i.useState(m.question),[n,k]=i.useState(m.hints),[s,c]=i.useState(!0),p=m.apiOptions??{isMobile:!1,flags:O};return l(a,{children:[t(E,{apiOptions:p,previewDevice:y,onPreviewDeviceChange:e=>w(e),developerMode:!0,jsonMode:S,answerArea:x,question:d,hints:n,frameSource:"about:blank",previewURL:"about:blank",itemId:"1",onChange:e=>{j(e),"jsonMode"in e&&b(e.jsonMode),"answerArea"in e&&v(e.answerArea),"question"in e&&P(e.question),"hints"in e&&k(e.hints)}}),!s&&t(I,{onClick:()=>c(!s),style:r.openPanelButton,children:"Open preview (storybook only)"}),s&&l(a,{style:r.panel,children:[t(_,{icon:B,onClick:()=>c(!s),style:r.closeButton}),t(a,{style:r.panelInner,children:t(f,{strings:g,apiOptions:p,...d})}),n==null?void 0:n.map((e,u)=>l(a,{style:r.panelInner,children:[t(A,{size:o.medium_16}),t(q,{children:`Hint ${u+1}`}),t(f,{strings:g,apiOptions:p,...e})]},u))]})]})}const r=R.StyleSheet.create({panel:{position:"fixed",right:0,minWidth:500,height:"90vh",overflow:"auto",flex:"none",backgroundColor:h.fadedBlue16,padding:o.medium_16,borderRadius:o.small_12,alignItems:"end"},panelInner:{flex:"none",backgroundColor:h.white,borderRadius:o.xSmall_8,marginTop:o.medium_16,width:"100%",padding:o.xSmall_8},closeButton:{margin:0},openPanelButton:{position:"fixed",right:o.medium_16,bottom:o.xxxLarge_64}});M.__docgenInfo={description:"",methods:[],displayName:"EditorPageWithStorybookPreview",props:{apiOptions:{required:!1,tsType:{name:"APIOptions"},description:""},question:{required:!1,tsType:{name:"PerseusRenderer"},description:""},hints:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"Hint"}],raw:"ReadonlyArray"},description:""}}};export{M as E}; +import{a as l,j as t}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import{R as f}from"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{B as I}from"./choice-E4eyMygy.js";import{V as a}from"./index-6h5t6F0w.js";import{I as _}from"./locked-label-settings-mrPkDK9u.js";import{S as A}from"./index-qUyqkRvh.js";import{c as h,s as o}from"./index-deFLJwr4.js";import{L as q}from"./index-h_CiYGGb.js";import{x as B}from"./index-rfN0X25E.js";import{a as C}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{l as R}from"./index-awljIyHI.js";import{r as i}from"./index-TT1qJ6UJ.js";import{m as g}from"./strings-OAjNfY6D.js";import{E}from"./editor-page-a0k5dFPi.js";import{f as O}from"./flags-for-api-options-VdIBjpAD.js";const j=C("onChange");function M(m){const[y,w]=i.useState("phone"),[S,b]=i.useState(!1),[x,v]=i.useState(),[d,P]=i.useState(m.question),[n,k]=i.useState(m.hints),[s,c]=i.useState(!0),p=m.apiOptions??{isMobile:!1,flags:O};return l(a,{children:[t(E,{apiOptions:p,previewDevice:y,onPreviewDeviceChange:e=>w(e),developerMode:!0,jsonMode:S,answerArea:x,question:d,hints:n,frameSource:"about:blank",previewURL:"about:blank",itemId:"1",onChange:e=>{j(e),"jsonMode"in e&&b(e.jsonMode),"answerArea"in e&&v(e.answerArea),"question"in e&&P(e.question),"hints"in e&&k(e.hints)}}),!s&&t(I,{onClick:()=>c(!s),style:r.openPanelButton,children:"Open preview (storybook only)"}),s&&l(a,{style:r.panel,children:[t(_,{icon:B,onClick:()=>c(!s),style:r.closeButton}),t(a,{style:r.panelInner,children:t(f,{strings:g,apiOptions:p,...d})}),n==null?void 0:n.map((e,u)=>l(a,{style:r.panelInner,children:[t(A,{size:o.medium_16}),t(q,{children:`Hint ${u+1}`}),t(f,{strings:g,apiOptions:p,...e})]},u))]})]})}const r=R.StyleSheet.create({panel:{position:"fixed",right:0,minWidth:500,height:"90vh",overflow:"auto",flex:"none",backgroundColor:h.fadedBlue16,padding:o.medium_16,borderRadius:o.small_12,alignItems:"end"},panelInner:{flex:"none",backgroundColor:h.white,borderRadius:o.xSmall_8,marginTop:o.medium_16,width:"100%",padding:o.xSmall_8},closeButton:{margin:0},openPanelButton:{position:"fixed",right:o.medium_16,bottom:o.xxxLarge_64}});M.__docgenInfo={description:"",methods:[],displayName:"EditorPageWithStorybookPreview",props:{apiOptions:{required:!1,tsType:{name:"APIOptions"},description:""},question:{required:!1,tsType:{name:"PerseusRenderer"},description:""},hints:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"Hint"}],raw:"ReadonlyArray"},description:""}}};export{M as E}; diff --git a/assets/editor-page.stories-FwV0GRrD.js b/assets/editor-page.stories-FwV0GRrD.js deleted file mode 100644 index a2ceffc39a..0000000000 --- a/assets/editor-page.stories-FwV0GRrD.js +++ /dev/null @@ -1,3 +0,0 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{r as p}from"./register-all-widgets-and-editors-for-testing-EmJZ0mCF.js";import{E as e}from"./editor-page-with-storybook-preview-TaVLOU-C.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./categorizer-editor-am_KbYeJ.js";import"./components-GHvuFaIn.js";import"./editor-jsonify-iuVqcZSO.js";import"./index-0C4KXdeC.js";import"./blur-input-hjJsfoK9.js";import"./definition-editor-U6nI8Sor.js";import"./editor-HVcPyY4Q.js";import"./index-SM3muJE2.js";import"./section-control-button-c-G3Veu9.js";import"./index-tFzzSRL2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";import"./dropdown-editor-YwuHUUGx.js";import"./explanation-editor-mOtE1dCr.js";import"./expression-editor-QP0tq_O5.js";import"./graph-settings-F_5lrkPp.js";import"./image-editor-vUFdKz9N.js";import"./input-number-editor-kZK8JIcV.js";import"./index-qwL3MFQI.js";import"./interactive-graph-editor-mWYDsmAp.js";import"./heading-8aCiuWUg.js";import"./interactive-graph-settings-aG03uuTu.js";import"./locked-figures-section-K5V7atp-.js";import"./locked-ellipse-settings-kWVnJxri.js";import"./locked-figure-aria-RWwSDIb0.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-X4RKk04F.js";import"./color-select-G-xDxP7-.js";import"./util-3pmDu6r6.js";import"./line-stroke-select-CC0fFBuz.js";import"./locked-function-settings-ARS0ni8Z.js";import"./line-swatch-xLt6fclZ.js";import"./locked-line-settings-APCIPT7n.js";import"./locked-point-settings-KDnxNHJ0.js";import"./labeled-switch--NF5de2V.js";import"./locked-polygon-settings-oPik-nhx.js";import"./locked-vector-settings-JVpVhbIu.js";import"./label-image-editor-mryVz6qt.js";import"./form-wrapped-text-field-DtGz9PJ5.js";import"./answer-choices-SJhxKMzc.js";import"./behavior-X6OD0iDh.js";import"./question-markers-WvVDMwno.js";import"./marker-ika3cQ1R.js";import"./select-image-cimnxdnG.js";import"./matcher-editor-Aey-GH6J.js";import"./number-line-editor-qZz0HHTk.js";import"./numeric-input-editor-qJT3lp_E.js";import"./phet-simulation-editor-h1woLwi3.js";import"./python-program-editor-2Q8IzVky.js";import"./editor-bnXHS4_2.js";import"./sorter-editor-5DYvFg1M.js";import"./chunk-WFFRPTHA-zlNDxfrq.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./editor-page-whMlClJx.js";import"./viewport-resizer-2eJF63Xv.js";import"./constants-hQyjCzwz.js";import"./device-framer-YjfQ5GqB.js";import"./item-extras-editor-2WxH27E_.js";import"./flags-for-api-options-oZTvm2lx.js";p();const it={title:"PerseusEditor/EditorPage"},r=()=>m(e,{});r.__docgenInfo={description:"",methods:[],displayName:"Demo"};var o,t,i;r.parameters={...r.parameters,docs:{...(o=r.parameters)==null?void 0:o.docs,source:{originalSource:`(): React.ReactElement => { - return ; -}`,...(i=(t=r.parameters)==null?void 0:t.docs)==null?void 0:i.source}}};const mt=["Demo"];export{r as Demo,mt as __namedExportsOrder,it as default}; diff --git a/assets/editor-page.stories-j1G48zbC.js b/assets/editor-page.stories-j1G48zbC.js new file mode 100644 index 0000000000..52f7d32a31 --- /dev/null +++ b/assets/editor-page.stories-j1G48zbC.js @@ -0,0 +1,3 @@ +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{r as p}from"./register-all-widgets-and-editors-for-testing-Duh1ZXvu.js";import{E as e}from"./editor-page-with-storybook-preview-PyHv_pWj.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-fuycm_QE.js";import"./invariant-bu5zBsRS.js";import"./jquery-yG1GhClm.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./categorizer-editor-B70XrHDb.js";import"./components-h6HHhmoA.js";import"./editor-jsonify-SX5E4P_Y.js";import"./index-k-0mNqHS.js";import"./blur-input-hjJsfoK9.js";import"./definition-editor-dEifSd-2.js";import"./editor-I-vnrXtz.js";import"./index-SM3muJE2.js";import"./section-control-button-J8oVp9bZ.js";import"./index-tFzzSRL2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";import"./dropdown-editor-z4XV_Nz9.js";import"./explanation-editor-7TAFL4nE.js";import"./expression-editor-iqoCc9gS.js";import"./graph-settings-_umr9_il.js";import"./image-editor-AZ-dC4_D.js";import"./input-number-editor-TkxXdBqK.js";import"./index-Jny9tT-6.js";import"./interactive-graph-editor-1ZmjvlNv.js";import"./heading-8aCiuWUg.js";import"./interactive-graph-settings-bMgmMCqq.js";import"./locked-figures-section-Tfk_-k0r.js";import"./locked-ellipse-settings-TfTFulml.js";import"./locked-figure-aria-7tCktpI9.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-mrPkDK9u.js";import"./color-select-GgikiV2v.js";import"./util-yTFMWwoT.js";import"./line-stroke-select-8a9MPfaw.js";import"./locked-function-settings-hpVCfdZN.js";import"./line-swatch-0Zcc1GCG.js";import"./locked-line-settings-s3VKqEiy.js";import"./locked-point-settings-ajnmafNS.js";import"./labeled-switch-Qne5XsM1.js";import"./locked-polygon-settings-LXOy6nHR.js";import"./locked-vector-settings-214PJGeS.js";import"./label-image-editor-cReH8dJ4.js";import"./form-wrapped-text-field-BopYavUW.js";import"./answer-choices-2q3o0s95.js";import"./behavior-bUq-LmpJ.js";import"./question-markers-h3QT0QS4.js";import"./marker-o8uSzdrK.js";import"./select-image--koiUF2W.js";import"./matcher-editor-roy8eQL9.js";import"./number-line-editor-5mXaeixJ.js";import"./numeric-input-editor-HZCTKW32.js";import"./phet-simulation-editor-8cXa9agX.js";import"./python-program-editor-KSnFH92m.js";import"./editor-0vKo6Oc_.js";import"./sorter-editor-rLrUJXLc.js";import"./chunk-WFFRPTHA-zlNDxfrq.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./editor-page-a0k5dFPi.js";import"./viewport-resizer-spuc4uQO.js";import"./constants-hQyjCzwz.js";import"./device-framer-kfyrsN2-.js";import"./item-extras-editor-cTVEyrYD.js";import"./flags-for-api-options-VdIBjpAD.js";p();const mt={title:"PerseusEditor/EditorPage"},r=()=>m(e,{});r.__docgenInfo={description:"",methods:[],displayName:"Demo"};var o,t,i;r.parameters={...r.parameters,docs:{...(o=r.parameters)==null?void 0:o.docs,source:{originalSource:`(): React.ReactElement => { + return ; +}`,...(i=(t=r.parameters)==null?void 0:t.docs)==null?void 0:i.source}}};const pt=["Demo"];export{r as Demo,pt as __namedExportsOrder,mt as default}; diff --git a/assets/editor.stories-6ciPhGip.js b/assets/editor.stories-TMqEcRb8.js similarity index 62% rename from assets/editor.stories-6ciPhGip.js rename to assets/editor.stories-TMqEcRb8.js index 8df1631447..365a82832a 100644 --- a/assets/editor.stories-6ciPhGip.js +++ b/assets/editor.stories-TMqEcRb8.js @@ -1,4 +1,4 @@ -import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{V as R}from"./index-6h5t6F0w.js";import{a as O}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{r as e}from"./index-TT1qJ6UJ.js";import"./index-nm6u35aB.js";import{S as C}from"./side-by-side-kpK-8vW0.js";import{r as x}from"./register-all-widgets-and-editors-for-testing-EmJZ0mCF.js";import{a as u}from"./flags-for-api-options-oZTvm2lx.js";import{E as f}from"./editor-HVcPyY4Q.js";import"./index-awljIyHI.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./version-akiLXZts.js";import"./article-editor-bhN33pAO.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./device-framer-YjfQ5GqB.js";import"./constants-hQyjCzwz.js";import"./section-control-button-c-G3Veu9.js";import"./index-tFzzSRL2.js";import"./viewport-resizer-2eJF63Xv.js";import"./index-0C4KXdeC.js";import"./structured-item-diff-cBK7G-UD.js";import"./text-diff-2XL6ZGXE.js";import"./tags-diff-2P1jpY0i.js";import"./editor-page-whMlClJx.js";import"./item-extras-editor-2WxH27E_.js";import"./multi-items-SYXQQaEF.js";/* empty css */import"./categorizer-editor-am_KbYeJ.js";import"./editor-jsonify-iuVqcZSO.js";import"./blur-input-hjJsfoK9.js";import"./definition-editor-U6nI8Sor.js";import"./dropdown-editor-YwuHUUGx.js";import"./explanation-editor-mOtE1dCr.js";import"./expression-editor-QP0tq_O5.js";import"./graph-settings-F_5lrkPp.js";import"./image-editor-vUFdKz9N.js";import"./input-number-editor-kZK8JIcV.js";import"./index-qwL3MFQI.js";import"./interactive-graph-editor-mWYDsmAp.js";import"./heading-8aCiuWUg.js";import"./toggleable-caret-lFiCktzo.js";import"./interactive-graph-settings-aG03uuTu.js";import"./locked-figures-section-K5V7atp-.js";import"./locked-ellipse-settings-kWVnJxri.js";import"./locked-figure-aria-RWwSDIb0.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-X4RKk04F.js";import"./color-select-G-xDxP7-.js";import"./util-3pmDu6r6.js";import"./line-stroke-select-CC0fFBuz.js";import"./locked-function-settings-ARS0ni8Z.js";import"./line-swatch-xLt6fclZ.js";import"./locked-line-settings-APCIPT7n.js";import"./locked-point-settings-KDnxNHJ0.js";import"./labeled-switch--NF5de2V.js";import"./locked-polygon-settings-oPik-nhx.js";import"./locked-vector-settings-JVpVhbIu.js";import"./label-image-editor-mryVz6qt.js";import"./form-wrapped-text-field-DtGz9PJ5.js";import"./answer-choices-SJhxKMzc.js";import"./behavior-X6OD0iDh.js";import"./question-markers-WvVDMwno.js";import"./marker-ika3cQ1R.js";import"./select-image-cimnxdnG.js";import"./matcher-editor-Aey-GH6J.js";import"./number-line-editor-qZz0HHTk.js";import"./numeric-input-editor-qJT3lp_E.js";import"./phet-simulation-editor-h1woLwi3.js";import"./python-program-editor-2Q8IzVky.js";import"./editor-bnXHS4_2.js";import"./sorter-editor-5DYvFg1M.js";import"./index-SM3muJE2.js";import"./tex-error-view-Y2BSLjwB.js";const n={content:`A sequence is defined recursively as follows: +import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{V as R}from"./index-6h5t6F0w.js";import{a as O}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{r as e}from"./index-TT1qJ6UJ.js";import"./index-6Rnzd_gN.js";import{S as C}from"./side-by-side-kpK-8vW0.js";import{r as x}from"./register-all-widgets-and-editors-for-testing-Duh1ZXvu.js";import{a as u}from"./flags-for-api-options-VdIBjpAD.js";import{E as f}from"./editor-I-vnrXtz.js";import"./index-awljIyHI.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./version-akiLXZts.js";import"./article-editor-_CIVbpzD.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./device-framer-kfyrsN2-.js";import"./constants-hQyjCzwz.js";import"./section-control-button-J8oVp9bZ.js";import"./index-tFzzSRL2.js";import"./viewport-resizer-spuc4uQO.js";import"./index-k-0mNqHS.js";import"./structured-item-diff-eXkE0zlp.js";import"./text-diff-VQhvkbai.js";import"./tags-diff-QpgBeBx_.js";import"./editor-page-a0k5dFPi.js";import"./item-extras-editor-cTVEyrYD.js";import"./multi-items-zAjfw5su.js";import"./index-fuycm_QE.js";/* empty css */import"./categorizer-editor-B70XrHDb.js";import"./editor-jsonify-SX5E4P_Y.js";import"./blur-input-hjJsfoK9.js";import"./definition-editor-dEifSd-2.js";import"./dropdown-editor-z4XV_Nz9.js";import"./explanation-editor-7TAFL4nE.js";import"./expression-editor-iqoCc9gS.js";import"./graph-settings-_umr9_il.js";import"./image-editor-AZ-dC4_D.js";import"./input-number-editor-TkxXdBqK.js";import"./index-Jny9tT-6.js";import"./interactive-graph-editor-1ZmjvlNv.js";import"./heading-8aCiuWUg.js";import"./toggleable-caret-lFiCktzo.js";import"./interactive-graph-settings-bMgmMCqq.js";import"./locked-figures-section-Tfk_-k0r.js";import"./locked-ellipse-settings-TfTFulml.js";import"./locked-figure-aria-7tCktpI9.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-mrPkDK9u.js";import"./color-select-GgikiV2v.js";import"./util-yTFMWwoT.js";import"./line-stroke-select-8a9MPfaw.js";import"./locked-function-settings-hpVCfdZN.js";import"./line-swatch-0Zcc1GCG.js";import"./locked-line-settings-s3VKqEiy.js";import"./locked-point-settings-ajnmafNS.js";import"./labeled-switch-Qne5XsM1.js";import"./locked-polygon-settings-LXOy6nHR.js";import"./locked-vector-settings-214PJGeS.js";import"./label-image-editor-cReH8dJ4.js";import"./form-wrapped-text-field-BopYavUW.js";import"./answer-choices-2q3o0s95.js";import"./behavior-bUq-LmpJ.js";import"./question-markers-h3QT0QS4.js";import"./marker-o8uSzdrK.js";import"./select-image--koiUF2W.js";import"./matcher-editor-roy8eQL9.js";import"./number-line-editor-5mXaeixJ.js";import"./numeric-input-editor-HZCTKW32.js";import"./phet-simulation-editor-8cXa9agX.js";import"./python-program-editor-KSnFH92m.js";import"./editor-0vKo6Oc_.js";import"./sorter-editor-rLrUJXLc.js";import"./index-SM3muJE2.js";import"./tex-error-view-Y2BSLjwB.js";const n={content:`A sequence is defined recursively as follows: $\\qquad\\displaystyle{{a}_{n}}=-\\frac{1}{a_{n-1}-1} @@ -7,7 +7,7 @@ $\\qquad\\displaystyle{{a}_{n}}=-\\frac{1}{a_{n-1}-1} Find the term $a_3$ in the sequence. -[[☃ input-number 1]]`,images:{},widgets:{"input-number 1":{graded:!0,version:{major:0,minor:0},static:!1,type:"input-number",options:{maxError:.1,inexact:!1,value:.5,simplify:"required",answerType:"number",size:"normal"},alignment:"default"}}};x();const Ir={title:"PerseusEditor/Editor"},i=()=>r(f,{apiOptions:u,content:n.content,placeholder:"",widgets:n.widgets,images:n.images,disabled:!1,widgetEnabled:!0,immutableWidgets:!1,showWordCount:!0,warnNoPrompt:!0,warnNoWidgets:!0,onChange:p=>{}}),o=()=>{const p=e.useRef(null),[h,w]=e.useState({}),[b,S]=e.useState("[[☃ interactive-graph 1]]"),[y,W]=e.useState({}),[v,E]=e.useState({"interactive-graph 1":{options:{labels:["x","y"],range:[[-10,10],[-10,10]],gridStep:[1,1],snapStep:[1,1],step:[1,1],backgroundImage:{url:null},markings:"graph",showProtractor:!1,showTooltips:!1,graph:{type:"linear",coords:[[1,1],[5,5]]},correct:{type:"linear"}},type:"interactive-graph",version:{major:0,minor:0}}});return r("div",{className:"framework-perseus",children:r(C,{leftTitle:"Editor",left:r(R,{style:{width:"360px",margin:"20px"},children:r(f,{ref:p,apiOptions:u,content:b,placeholder:"",widgets:v,images:y,disabled:!1,widgetEnabled:!0,immutableWidgets:!1,showWordCount:!0,warnNoPrompt:!1,warnNoWidgets:!0,onChange:t=>{O("onChange")(t),t.content?S(t.content):t.widgets?E(t.widgets):t.images&&W(t.images),setTimeout(()=>{var s;w(((s=p.current)==null?void 0:s.serialize())||{})},0)}})}),rightTitle:"Serialized Widget Options",jsonObject:h})})};i.__docgenInfo={description:"",methods:[],displayName:"Demo"};o.__docgenInfo={description:"",methods:[],displayName:"DemoInteractiveGraph"};var m,a,d;i.parameters={...i.parameters,docs:{...(m=i.parameters)==null?void 0:m.docs,source:{originalSource:`(): React.ReactElement => { +[[☃ input-number 1]]`,images:{},widgets:{"input-number 1":{graded:!0,version:{major:0,minor:0},static:!1,type:"input-number",options:{maxError:.1,inexact:!1,value:.5,simplify:"required",answerType:"number",size:"normal"},alignment:"default"}}};x();const Pr={title:"PerseusEditor/Editor"},i=()=>r(f,{apiOptions:u,content:n.content,placeholder:"",widgets:n.widgets,images:n.images,disabled:!1,widgetEnabled:!0,immutableWidgets:!1,showWordCount:!0,warnNoPrompt:!0,warnNoWidgets:!0,onChange:p=>{}}),o=()=>{const p=e.useRef(null),[h,w]=e.useState({}),[b,S]=e.useState("[[☃ interactive-graph 1]]"),[y,W]=e.useState({}),[v,E]=e.useState({"interactive-graph 1":{options:{labels:["x","y"],range:[[-10,10],[-10,10]],gridStep:[1,1],snapStep:[1,1],step:[1,1],backgroundImage:{url:null},markings:"graph",showProtractor:!1,showTooltips:!1,graph:{type:"linear",coords:[[1,1],[5,5]]},correct:{type:"linear"}},type:"interactive-graph",version:{major:0,minor:0}}});return r("div",{className:"framework-perseus",children:r(C,{leftTitle:"Editor",left:r(R,{style:{width:"360px",margin:"20px"},children:r(f,{ref:p,apiOptions:u,content:b,placeholder:"",widgets:v,images:y,disabled:!1,widgetEnabled:!0,immutableWidgets:!1,showWordCount:!0,warnNoPrompt:!1,warnNoWidgets:!0,onChange:t=>{O("onChange")(t),t.content?S(t.content):t.widgets?E(t.widgets):t.images&&W(t.images),setTimeout(()=>{var s;w(((s=p.current)==null?void 0:s.serialize())||{})},0)}})}),rightTitle:"Serialized Widget Options",jsonObject:h})})};i.__docgenInfo={description:"",methods:[],displayName:"Demo"};o.__docgenInfo={description:"",methods:[],displayName:"DemoInteractiveGraph"};var m,a,d;i.parameters={...i.parameters,docs:{...(m=i.parameters)==null?void 0:m.docs,source:{originalSource:`(): React.ReactElement => { return {}} />; }`,...(d=(a=i.parameters)==null?void 0:a.docs)==null?void 0:d.source}}};var l,c,g;o.parameters={...o.parameters,docs:{...(l=o.parameters)==null?void 0:l.docs,source:{originalSource:`(): React.ReactElement => { const editorRef = React.useRef(null); @@ -72,4 +72,4 @@ Find the term $a_3$ in the sequence. } rightTitle="Serialized Widget Options" jsonObject={options} /> ); -}`,...(g=(c=o.parameters)==null?void 0:c.docs)==null?void 0:g.source}}};const Pr=["Demo","DemoInteractiveGraph"];export{i as Demo,o as DemoInteractiveGraph,Pr as __namedExportsOrder,Ir as default}; +}`,...(g=(c=o.parameters)==null?void 0:c.docs)==null?void 0:g.source}}};const Tr=["Demo","DemoInteractiveGraph"];export{i as Demo,o as DemoInteractiveGraph,Tr as __namedExportsOrder,Pr as default}; diff --git a/assets/explanation-editor-mOtE1dCr.js b/assets/explanation-editor-7TAFL4nE.js similarity index 75% rename from assets/explanation-editor-mOtE1dCr.js rename to assets/explanation-editor-7TAFL4nE.js index 4c75742987..52539ae8fc 100644 --- a/assets/explanation-editor-mOtE1dCr.js +++ b/assets/explanation-editor-7TAFL4nE.js @@ -1,3 +1,3 @@ -import{a as o,j as t}from"./jsx-runtime-FVsy8kgq.js";import{c as l,p as m}from"./article-renderer-6f7Dak4j.js";import{_ as n}from"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as d}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{E as c}from"./editor-jsonify-iuVqcZSO.js";import{P as i}from"./index-0C4KXdeC.js";import{r as h}from"./index-TT1qJ6UJ.js";import{E as u}from"./editor-HVcPyY4Q.js";const{TextInput:p}=d,g={showPrompt:"Explain",hidePrompt:"Hide explanation",explanation:`explanation goes here +import{a as o,j as t}from"./jsx-runtime-FVsy8kgq.js";import{c as l,p as m}from"./article-renderer-TMdCDA85.js";import{_ as n}from"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as d}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{E as c}from"./editor-jsonify-SX5E4P_Y.js";import{P as i}from"./index-k-0mNqHS.js";import{r as h}from"./index-TT1qJ6UJ.js";import{E as u}from"./editor-I-vnrXtz.js";const{TextInput:p}=d,g={showPrompt:"Explain",hidePrompt:"Hide explanation",explanation:`explanation goes here more explanation`,widgets:{}},s=class s extends h.Component{constructor(){super(...arguments),this.state={},this.change=(...e)=>l.apply(this,e),this.serialize=()=>c.serialize.call(this)}render(){return o("div",{className:"perseus-widget-explanation-editor",children:[t("div",{className:"perseus-widget-row",children:o("label",{children:["Prompt to show explanation:"," ",t(p,{value:this.props.showPrompt,onChange:this.change("showPrompt")})]})}),t("div",{className:"perseus-widget-row",children:o("label",{children:["Prompt to hide explanation:"," ",t(p,{value:this.props.hidePrompt,onChange:this.change("hidePrompt")})]})}),t("div",{className:"perseus-widget-row",children:t(u,{apiOptions:this.props.apiOptions,content:this.props.explanation,widgets:this.props.widgets,widgetEnabled:!0,immutableWidgets:!1,onChange:e=>{const a={};n.has(e,"content")&&(a.explanation=e.content),n.has(e,"widgets")&&(a.widgets=e.widgets),this.change(a)}})})]})}};s.propTypes={...m,showPrompt:i.string,hidePrompt:i.string,explanation:i.string,widgets:i.object,apiOptions:i.any},s.widgetName="explanation",s.defaultProps=g;let r=s;r.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"ExplanationEditor",props:{showPrompt:{defaultValue:{value:'"Explain"',computed:!1},description:"",type:{name:"string"},required:!1},hidePrompt:{defaultValue:{value:'"Hide explanation"',computed:!1},description:"",type:{name:"string"},required:!1},explanation:{defaultValue:{value:'"explanation goes here\\n\\nmore explanation"',computed:!1},description:"",type:{name:"string"},required:!1},widgets:{defaultValue:{value:"{}",computed:!1},description:"",type:{name:"object"},required:!1},apiOptions:{description:"",type:{name:"any"},required:!1}},composes:["@khanacademy/perseus"]};export{r as E}; diff --git a/assets/explanation-editor.stories-s1DaRjsi.js b/assets/explanation-editor.stories-KH-w38bl.js similarity index 52% rename from assets/explanation-editor.stories-s1DaRjsi.js rename to assets/explanation-editor.stories-KH-w38bl.js index 704004e9bc..6f83b1e24e 100644 --- a/assets/explanation-editor.stories-s1DaRjsi.js +++ b/assets/explanation-editor.stories-KH-w38bl.js @@ -1,3 +1,3 @@ -import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{a as m}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{E as a}from"./explanation-editor-mOtE1dCr.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./editor-jsonify-iuVqcZSO.js";import"./index-0C4KXdeC.js";import"./editor-HVcPyY4Q.js";import"./index-SM3muJE2.js";import"./section-control-button-c-G3Veu9.js";import"./index-tFzzSRL2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";const nt={title:"PerseusEditor/Widgets/Explanation Editor"},o=e=>p(a,{onChange:m("onChange")});o.__docgenInfo={description:"",methods:[],displayName:"Default"};var t,r,i;o.parameters={...o.parameters,docs:{...(t=o.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{a as m}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{E as a}from"./explanation-editor-7TAFL4nE.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./editor-jsonify-SX5E4P_Y.js";import"./index-k-0mNqHS.js";import"./editor-I-vnrXtz.js";import"./index-fuycm_QE.js";import"./index-SM3muJE2.js";import"./section-control-button-J8oVp9bZ.js";import"./index-tFzzSRL2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";const st={title:"PerseusEditor/Widgets/Explanation Editor"},o=e=>p(a,{onChange:m("onChange")});o.__docgenInfo={description:"",methods:[],displayName:"Default"};var t,r,i;o.parameters={...o.parameters,docs:{...(t=o.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; -}`,...(i=(r=o.parameters)==null?void 0:r.docs)==null?void 0:i.source}}};const st=["Default"];export{o as Default,st as __namedExportsOrder,nt as default}; +}`,...(i=(r=o.parameters)==null?void 0:r.docs)==null?void 0:i.source}}};const dt=["Default"];export{o as Default,dt as __namedExportsOrder,st as default}; diff --git a/assets/explanation.stories-ipVYxuOT.js b/assets/explanation.stories-w_6-HjWD.js similarity index 85% rename from assets/explanation.stories-ipVYxuOT.js rename to assets/explanation.stories-w_6-HjWD.js index 82fb1c3e0d..766a0791d1 100644 --- a/assets/explanation.stories-ipVYxuOT.js +++ b/assets/explanation.stories-w_6-HjWD.js @@ -1,4 +1,4 @@ -import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{R as a}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const v={content:`Here's the explanation +import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{R as a}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const v={content:`Here's the explanation [[☃ explanation 1]] Did you get that?`,images:{},widgets:{"explanation 1":{graded:!0,version:{major:0,minor:0},static:!1,type:"explanation",options:{hidePrompt:"Hide explanation!",widgets:{},explanation:"This is an explanation",static:!1,showPrompt:"Explanation"},alignment:"default"}}},b={content:`Here's the explanation [[☃ explanation 1]] diff --git a/assets/expression-editor-QP0tq_O5.js b/assets/expression-editor-iqoCc9gS.js similarity index 62% rename from assets/expression-editor-QP0tq_O5.js rename to assets/expression-editor-iqoCc9gS.js index c71e172114..5b764a3e83 100644 --- a/assets/expression-editor-QP0tq_O5.js +++ b/assets/expression-editor-iqoCc9gS.js @@ -1,2 +1,2 @@ -import{j as n,a as c,F as I}from"./jsx-runtime-FVsy8kgq.js";import{p as N}from"./util-XcxTwqb0.js";import{a as C,c as D,P as R,E as _}from"./article-renderer-6f7Dak4j.js";import{_ as g}from"./jquery-yG1GhClm.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import{l as w}from"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as T}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import{f as q}from"./index-J2t_5nK1.js";import"./index-IIMKO4_x.js";import{B as f}from"./choice-E4eyMygy.js";import{C as m,l as S}from"./index-QCAhLhLD.js";import{S as O}from"./index-qUyqkRvh.js";import{s as p,c as y}from"./index-deFLJwr4.js";import{H as k,d as L}from"./index-h_CiYGGb.js";import{l}from"./index-awljIyHI.js";import{r as F}from"./index-TT1qJ6UJ.js";import{P as B}from"./index-0C4KXdeC.js";import{R as Y}from"./index-7vsPyIck.js";const d=B,z=C({propTypes:{className:d.string,components:d.arrayOf(d.node).isRequired,onReorder:d.func.isRequired,style:d.any,verify:d.func},getDefaultProps:function(){return{verify:()=>!0}},getInitialState:function(){return{dragging:null,components:this.props.components}},componentDidMount:function(){this._setDragEvents()},UNSAFE_componentWillReceiveProps:function(r){this.setState({components:r.components})},componentDidUpdate:function(){this._setDragEvents()},onDragStart:function(r){this.setState({dragging:r})},onDrop:function(){this.setState({dragging:null}),this.props.onReorder(this.state.components)},onDragEnter:function(r){if(this.state.dragging===r)return;const i=this.state.components.slice(),e=i.splice(this.state.dragging,1);i.splice(r,0,e[0]);const t=this.props.verify(i);return t&&this.setState({dragging:r,components:i}),t},_listenEvent:function(r){r.dataTransfer.setData("hackhackhack","because browsers!")},_cancelEvent:function(r){r.preventDefault()},_setDragEvents:function(){this._dragItems=this._dragItems||[];const r=Y.findDOMNode(this).querySelectorAll("[draggable=true]"),i=[],e=[];for(let t=0;tn(P,{index:e,component:i,area:this,draggable:i.props.draggable,dragging:e===this.state.dragging},i.key));return n("ol",{className:this.props.className,style:this.props.style,children:r})}}),P=C({propTypes:{area:d.shape({onDragEnter:d.func.isRequired,onDragStart:d.func.isRequired,onDrop:d.func.isRequired}),component:d.node.isRequired,dragging:d.bool.isRequired,draggable:d.bool.isRequired,index:d.number.isRequired},handleDragStart:function(r){r.nativeEvent.dataTransfer.effectAllowed="move",this.props.area.onDragStart(this.props.index)},handleDrop:function(){this.props.area.onDrop(this.props.index)},handleDragEnter:function(r){const i=this.props.area.onDragEnter(this.props.index);r.nativeEvent.dataTransfer.effectAllowed=i?"move":"none"},handleDragOver:function(r){r.preventDefault()},render:function(){let r="sortable-disabled";return this.props.dragging?r="sortable-dragging":this.props.draggable&&(r="sortable-enabled"),n("li",{draggable:this.props.draggable,className:[r,l.css(U.sortableListItem)].join(" "),onDragStart:this.handleDragStart,onDrop:this.handleDrop,onDragEnter:this.handleDragEnter,onDragOver:this.handleDragOver,children:this.props.component})}}),U=l.StyleSheet.create({sortableListItem:{margin:"5px 0"}}),{InfoTip:u}=T,A=["basic","trig","prealgebra","logarithms","basic relations","advanced relations"],E=({key:r})=>Number.parseInt(r??""),V=r=>{const i=[];r.forEach(e=>{i[E(e)]=!0});for(let e=0;e{const e=["value","form","simplify","considered","key"],t=["answerForms","buttonSets","functions","times","visibleLabel","ariaLabel"],s=this.props.answerForms.map(a=>g(a).pick(e));return w(this.props).set(["answerForms"],s).mod([],a=>g(a).pick(t)).freeze()},this.getSaveWarnings=()=>{const e=[];return this.props.answerForms.length===0?e.push("No answers specified"):(this.props.answerForms.some(s=>s.considered==="correct")||e.push("No correct answer specified"),g(this.props.answerForms).each((s,a)=>{if(this.props.value==="")e.push(`Answer ${a+1} is empty`);else{const h=N(s.value,{functions:this.props.functions});h.parsed?s.simplify&&!h.expr.isSimplified()&&e.push(`${s.value} isn't simplified, but is required" + - " to be`):e.push(`Couldn't parse ${s.value}`)}})),e},this._newEmptyAnswerForm=()=>({considered:"correct",form:!1,key:V(this.props.answerForms),simplify:!1,value:""}),this.newAnswer=()=>{const e=this.props.answerForms.slice();e.push(this._newEmptyAnswerForm()),this.change({answerForms:e})},this.handleRemoveForm=e=>{const t=this.props.answerForms.slice();t.splice(e,1),this.change({answerForms:t})},this.updateForm=(e,t)=>{const s=w(this.props.answerForms).merge([e],t).freeze();this.change({answerForms:s})},this.handleReorder=e=>{const t=e.map(s=>{const a=g(s.props).pick("considered","form","simplify","value");return a.key=s.key,a});this.change({answerForms:t})},this.handleButtonSet=e=>{const s=A.filter(a=>this.props.buttonSets.includes(a)!==(a===e));this.props.onChange({buttonSets:s})},this.handleToggleDiv=()=>{let e,t;this.props.buttonSets.includes("basic+div")?(e="basic",t="basic+div"):(e="basic+div",t="basic");const s=this.props.buttonSets.filter(a=>a!==t).concat(e);this.change("buttonSets",s)},this.handleTexInsert=e=>{this.refs.expression.insert(e)},this.handleFunctions=e=>{this.setState({functionsInternal:e});const t={};t.functions=e.split(/[ ,]+/).filter(q),this.props.onChange(t)},this.state={functionsInternal:this.props.functions.join(" ")}}change(...i){return D.apply(this,i)}render(){const i=this.props.answerForms.map(s=>{const a=E(s),h={times:this.props.times,functions:this.props.functions,buttonSets:this.props.buttonSets,buttonsVisible:"focused",form:s.form,simplify:s.simplify,value:s.value,onChange:v=>this.updateForm(a,v),trackInteraction:()=>{},widgetId:this.props.widgetId+"-"+s.key};return w(s).merge([],{key:a,draggable:!0,onChange:v=>this.updateForm(Number.parseInt(s.key??""),v),onDelete:()=>this.handleRemoveForm(a),expressionProps:h}).freeze()}).map(s=>n(j,{...s},s.key)),e=n(z,{components:i,onReorder:this.handleReorder}),t=A.map(s=>{const a=s==="basic",h=this.props.buttonSets.includes(s)||a;return n(m,{label:s,checked:h,disabled:a,onChange:()=>this.handleButtonSet(s)},s)});return t.unshift(n(m,{label:"show ÷ button",checked:this.props.buttonSets.includes("basic+div"),onChange:this.handleToggleDiv},"show ÷ button")),c("div",{children:[n(k,{children:"Global Options"}),c("div",{className:l.css(o.paddedY),children:[n(S,{label:"Visible label",value:this.props.visibleLabel||"",onChange:this.change("visibleLabel")}),n(u,{children:n("p",{children:"Optional visible text; strongly encouraged to help learners using dictation software, but can be omitted if the surrounding content provides enough context."})})]}),c("div",{className:l.css(o.paddedY),children:[n(S,{label:"Aria label",value:this.props.ariaLabel||"",onChange:this.change("ariaLabel")}),n(u,{children:c("p",{children:["Label text that's read by screen readers. Highly recommend adding a label here to ensure your exercise is accessible. For more information on writting accessible labels, please see"," ",n("a",{href:"https://www.w3.org/WAI/tips/designing/#ensure-that-form-elements-include-clearly-associated-labels",target:"_blank",children:"this article."})]})})]}),c("div",{className:l.css(o.paddedY),children:[n(S,{label:"Function variables",value:this.state.functionsInternal,onChange:this.handleFunctions}),n(u,{children:n("p",{children:'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".'})})]}),c("div",{className:l.css(o.paddedY),children:[n(m,{label:"Use × instead of ⋅ for multiplication",checked:this.props.times,onChange:s=>{this.props.onChange({times:s})}}),n(u,{children:n("p",{children:"For pre-algebra problems this option displays multiplication as \\times instead of \\cdot in both the rendered output and the acceptable formats examples."})})]}),c("div",{className:l.css(o.paddedY),children:[n(L,{children:"Button Sets"}),t]}),n(k,{children:"Answers"}),n("p",{style:{margin:"4px 0"},children:"student responses area matched against these from top to bottom"}),e,n("div",{children:n(f,{size:"small",onClick:this.newAnswer,children:"Add new answer"})})]})}};b.widgetName="expression",b.defaultProps={answerForms:[],times:!1,buttonSets:["basic"],functions:["f","g","h"]};let x=b;const W=function(r,i){let e=r.indexOf(i);return e=(e+1)%r.length,r[e]};class j extends F.Component{constructor(){super(...arguments),this.state={deleteFocused:!1},this.change=(...i)=>D.apply(this,i),this.handleImSure=()=>{this.props.onDelete()},this.handleCancelDelete=()=>{this.setState({deleteFocused:!1})},this.handleDelete=()=>{this.setState({deleteFocused:!0})},this.toggleConsidered=()=>{const i=W(R,this.props.considered);this.change({considered:i})}}render(){const i=this.state.deleteFocused?c(I,{children:[n(f,{size:"small",onClick:this.handleImSure,color:"destructive",children:"I'm sure!"}),n(O,{size:p.small_12}),n(f,{size:"small",onClick:this.handleCancelDelete,light:!0,children:"Cancel"})]}):n(f,{size:"small",onClick:this.handleDelete,color:"destructive",light:!0,children:"Delete"}),e=l.css(o.answerStatus,this.props.considered==="wrong"&&o.answerStatusWrong,this.props.considered==="correct"&&o.answerStatusCorrect,this.props.considered==="ungraded"&&o.answerStatusUngraded);return c("div",{className:l.css(o.answerOption),children:[n("div",{className:l.css(o.answerHandle)}),c("div",{className:l.css(o.answerBody),children:[c("div",{children:[n("button",{onClick:this.toggleConsidered,className:e,children:this.props.considered}),n("div",{children:n(_,{...this.props.expressionProps})})]}),c("div",{className:l.css(o.paddedY,o.paddedX),children:[n(m,{label:"Answer expression must have the same form.",checked:this.props.form,onChange:t=>{this.props.onChange({form:t})}}),n(u,{children:n("p",{children:"The student's answer must be in the same form. Commutativity and excess negative signs are ignored."})})]}),c("div",{className:l.css(o.paddedY,o.paddedX),children:[n(m,{label:"Answer expression must be fully expanded and simplified.",checked:this.props.simplify,onChange:t=>{this.props.onChange({simplify:t})}}),n(u,{children:n("p",{children:`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."`})})]}),n("div",{className:l.css(o.buttonRow,o.paddedY),children:i})]})]})}}const o=l.StyleSheet.create({paddedX:{paddingLeft:p.xSmall_8,paddingRight:p.xSmall_8},paddedY:{paddingTop:p.xxSmall_6,paddingBottom:p.xxSmall_6},answerOption:{border:"1px solid #ddd",borderRadius:"3px",display:"flex"},answerHandle:{background:"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==) no-repeat 50% 50%",borderRight:"1px solid #ddd",cursor:"move",width:"20px",minWidth:"20px"},answerStatus:{border:"none",userSelect:"none",width:"100px",paddingTop:p.small_12,paddingBottom:p.small_12},answerStatusWrong:{backgroundColor:y.fadedRed16},answerStatusCorrect:{backgroundColor:y.fadedGreen16},answerStatusUngraded:{backgroundColor:y.fadedBlue16},answerBody:{},buttonRow:{display:"flex"}});x.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"_newEmptyAnswerForm",docblock:null,modifiers:[],params:[],returns:null},{name:"newAnswer",docblock:null,modifiers:[],params:[],returns:null},{name:"handleRemoveForm",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null}],returns:null},{name:"updateForm",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"props",optional:!1,type:null}],returns:null},{name:"handleReorder",docblock:null,modifiers:[],params:[{name:"components",optional:!1,type:null}],returns:null},{name:"handleButtonSet",docblock:null,modifiers:[],params:[{name:"changingName",optional:!1,type:null}],returns:null},{name:"handleToggleDiv",docblock:null,modifiers:[],params:[],returns:null},{name:"handleTexInsert",docblock:null,modifiers:[],params:[{name:"str",optional:!1,type:null}],returns:null},{name:"handleFunctions",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:null}],returns:null}],displayName:"ExpressionEditor",props:{widgetId:{required:!1,tsType:{name:"any"},description:""},value:{required:!1,tsType:{name:"string"},description:""},answerForms:{defaultValue:{value:"[]",computed:!1},required:!1},times:{defaultValue:{value:"false",computed:!1},required:!1},buttonSets:{defaultValue:{value:'["basic"]',computed:!1},required:!1},functions:{defaultValue:{value:'["f", "g", "h"]',computed:!1},required:!1}}};export{x as E}; +import{j as n,a as c,F as I}from"./jsx-runtime-FVsy8kgq.js";import{p as N}from"./util-YrNvlCNO.js";import{c as C,P as R,E as _}from"./article-renderer-TMdCDA85.js";import{_ as g}from"./jquery-yG1GhClm.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import{l as w}from"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as T}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import{f as q}from"./index-J2t_5nK1.js";import"./index-IIMKO4_x.js";import{B as f}from"./choice-E4eyMygy.js";import{C as m,l as S}from"./index-QCAhLhLD.js";import{S as O}from"./index-qUyqkRvh.js";import{s as p,c as y}from"./index-deFLJwr4.js";import{H as k,d as L}from"./index-h_CiYGGb.js";import{l}from"./index-awljIyHI.js";import{r as D}from"./index-TT1qJ6UJ.js";import{c as F}from"./index-fuycm_QE.js";import{P as B}from"./index-k-0mNqHS.js";import{R as Y}from"./index-7vsPyIck.js";const d=B,z=F({propTypes:{className:d.string,components:d.arrayOf(d.node).isRequired,onReorder:d.func.isRequired,style:d.any,verify:d.func},getDefaultProps:function(){return{verify:()=>!0}},getInitialState:function(){return{dragging:null,components:this.props.components}},componentDidMount:function(){this._setDragEvents()},UNSAFE_componentWillReceiveProps:function(r){this.setState({components:r.components})},componentDidUpdate:function(){this._setDragEvents()},onDragStart:function(r){this.setState({dragging:r})},onDrop:function(){this.setState({dragging:null}),this.props.onReorder(this.state.components)},onDragEnter:function(r){if(this.state.dragging===r)return;const i=this.state.components.slice(),e=i.splice(this.state.dragging,1);i.splice(r,0,e[0]);const t=this.props.verify(i);return t&&this.setState({dragging:r,components:i}),t},_listenEvent:function(r){r.dataTransfer.setData("hackhackhack","because browsers!")},_cancelEvent:function(r){r.preventDefault()},_setDragEvents:function(){this._dragItems=this._dragItems||[];const r=Y.findDOMNode(this).querySelectorAll("[draggable=true]"),i=[],e=[];for(let t=0;tn(P,{index:e,component:i,area:this,draggable:i.props.draggable,dragging:e===this.state.dragging},i.key));return n("ol",{className:this.props.className,style:this.props.style,children:r})}}),P=F({propTypes:{area:d.shape({onDragEnter:d.func.isRequired,onDragStart:d.func.isRequired,onDrop:d.func.isRequired}),component:d.node.isRequired,dragging:d.bool.isRequired,draggable:d.bool.isRequired,index:d.number.isRequired},handleDragStart:function(r){r.nativeEvent.dataTransfer.effectAllowed="move",this.props.area.onDragStart(this.props.index)},handleDrop:function(){this.props.area.onDrop(this.props.index)},handleDragEnter:function(r){const i=this.props.area.onDragEnter(this.props.index);r.nativeEvent.dataTransfer.effectAllowed=i?"move":"none"},handleDragOver:function(r){r.preventDefault()},render:function(){let r="sortable-disabled";return this.props.dragging?r="sortable-dragging":this.props.draggable&&(r="sortable-enabled"),n("li",{draggable:this.props.draggable,className:[r,l.css(U.sortableListItem)].join(" "),onDragStart:this.handleDragStart,onDrop:this.handleDrop,onDragEnter:this.handleDragEnter,onDragOver:this.handleDragOver,children:this.props.component})}}),U=l.StyleSheet.create({sortableListItem:{margin:"5px 0"}}),{InfoTip:u}=T,A=["basic","trig","prealgebra","logarithms","basic relations","advanced relations"],E=({key:r})=>Number.parseInt(r??""),V=r=>{const i=[];r.forEach(e=>{i[E(e)]=!0});for(let e=0;e{const e=["value","form","simplify","considered","key"],t=["answerForms","buttonSets","functions","times","visibleLabel","ariaLabel"],s=this.props.answerForms.map(a=>g(a).pick(e));return w(this.props).set(["answerForms"],s).mod([],a=>g(a).pick(t)).freeze()},this.getSaveWarnings=()=>{const e=[];return this.props.answerForms.length===0?e.push("No answers specified"):(this.props.answerForms.some(s=>s.considered==="correct")||e.push("No correct answer specified"),g(this.props.answerForms).each((s,a)=>{if(this.props.value==="")e.push(`Answer ${a+1} is empty`);else{const h=N(s.value,{functions:this.props.functions});h.parsed?s.simplify&&!h.expr.isSimplified()&&e.push(`${s.value} isn't simplified, but is required" + + " to be`):e.push(`Couldn't parse ${s.value}`)}})),e},this._newEmptyAnswerForm=()=>({considered:"correct",form:!1,key:V(this.props.answerForms),simplify:!1,value:""}),this.newAnswer=()=>{const e=this.props.answerForms.slice();e.push(this._newEmptyAnswerForm()),this.change({answerForms:e})},this.handleRemoveForm=e=>{const t=this.props.answerForms.slice();t.splice(e,1),this.change({answerForms:t})},this.updateForm=(e,t)=>{const s=w(this.props.answerForms).merge([e],t).freeze();this.change({answerForms:s})},this.handleReorder=e=>{const t=e.map(s=>{const a=g(s.props).pick("considered","form","simplify","value");return a.key=s.key,a});this.change({answerForms:t})},this.handleButtonSet=e=>{const s=A.filter(a=>this.props.buttonSets.includes(a)!==(a===e));this.props.onChange({buttonSets:s})},this.handleToggleDiv=()=>{let e,t;this.props.buttonSets.includes("basic+div")?(e="basic",t="basic+div"):(e="basic+div",t="basic");const s=this.props.buttonSets.filter(a=>a!==t).concat(e);this.change("buttonSets",s)},this.handleTexInsert=e=>{this.refs.expression.insert(e)},this.handleFunctions=e=>{this.setState({functionsInternal:e});const t={};t.functions=e.split(/[ ,]+/).filter(q),this.props.onChange(t)},this.state={functionsInternal:this.props.functions.join(" ")}}change(...i){return C.apply(this,i)}render(){const i=this.props.answerForms.map(s=>{const a=E(s),h={times:this.props.times,functions:this.props.functions,buttonSets:this.props.buttonSets,buttonsVisible:"focused",form:s.form,simplify:s.simplify,value:s.value,onChange:v=>this.updateForm(a,v),trackInteraction:()=>{},widgetId:this.props.widgetId+"-"+s.key};return w(s).merge([],{key:a,draggable:!0,onChange:v=>this.updateForm(Number.parseInt(s.key??""),v),onDelete:()=>this.handleRemoveForm(a),expressionProps:h}).freeze()}).map(s=>n(j,{...s},s.key)),e=n(z,{components:i,onReorder:this.handleReorder}),t=A.map(s=>{const a=s==="basic",h=this.props.buttonSets.includes(s)||a;return n(m,{label:s,checked:h,disabled:a,onChange:()=>this.handleButtonSet(s)},s)});return t.unshift(n(m,{label:"show ÷ button",checked:this.props.buttonSets.includes("basic+div"),onChange:this.handleToggleDiv},"show ÷ button")),c("div",{children:[n(k,{children:"Global Options"}),c("div",{className:l.css(o.paddedY),children:[n(S,{label:"Visible label",value:this.props.visibleLabel||"",onChange:this.change("visibleLabel")}),n(u,{children:n("p",{children:"Optional visible text; strongly encouraged to help learners using dictation software, but can be omitted if the surrounding content provides enough context."})})]}),c("div",{className:l.css(o.paddedY),children:[n(S,{label:"Aria label",value:this.props.ariaLabel||"",onChange:this.change("ariaLabel")}),n(u,{children:c("p",{children:["Label text that's read by screen readers. Highly recommend adding a label here to ensure your exercise is accessible. For more information on writting accessible labels, please see"," ",n("a",{href:"https://www.w3.org/WAI/tips/designing/#ensure-that-form-elements-include-clearly-associated-labels",target:"_blank",children:"this article."})]})})]}),c("div",{className:l.css(o.paddedY),children:[n(S,{label:"Function variables",value:this.state.functionsInternal,onChange:this.handleFunctions}),n(u,{children:n("p",{children:'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".'})})]}),c("div",{className:l.css(o.paddedY),children:[n(m,{label:"Use × instead of ⋅ for multiplication",checked:this.props.times,onChange:s=>{this.props.onChange({times:s})}}),n(u,{children:n("p",{children:"For pre-algebra problems this option displays multiplication as \\times instead of \\cdot in both the rendered output and the acceptable formats examples."})})]}),c("div",{className:l.css(o.paddedY),children:[n(L,{children:"Button Sets"}),t]}),n(k,{children:"Answers"}),n("p",{style:{margin:"4px 0"},children:"student responses area matched against these from top to bottom"}),e,n("div",{children:n(f,{size:"small",onClick:this.newAnswer,children:"Add new answer"})})]})}};b.widgetName="expression",b.defaultProps={answerForms:[],times:!1,buttonSets:["basic"],functions:["f","g","h"]};let x=b;const W=function(r,i){let e=r.indexOf(i);return e=(e+1)%r.length,r[e]};class j extends D.Component{constructor(){super(...arguments),this.state={deleteFocused:!1},this.change=(...i)=>C.apply(this,i),this.handleImSure=()=>{this.props.onDelete()},this.handleCancelDelete=()=>{this.setState({deleteFocused:!1})},this.handleDelete=()=>{this.setState({deleteFocused:!0})},this.toggleConsidered=()=>{const i=W(R,this.props.considered);this.change({considered:i})}}render(){const i=this.state.deleteFocused?c(I,{children:[n(f,{size:"small",onClick:this.handleImSure,color:"destructive",children:"I'm sure!"}),n(O,{size:p.small_12}),n(f,{size:"small",onClick:this.handleCancelDelete,light:!0,children:"Cancel"})]}):n(f,{size:"small",onClick:this.handleDelete,color:"destructive",light:!0,children:"Delete"}),e=l.css(o.answerStatus,this.props.considered==="wrong"&&o.answerStatusWrong,this.props.considered==="correct"&&o.answerStatusCorrect,this.props.considered==="ungraded"&&o.answerStatusUngraded);return c("div",{className:l.css(o.answerOption),children:[n("div",{className:l.css(o.answerHandle)}),c("div",{className:l.css(o.answerBody),children:[c("div",{children:[n("button",{onClick:this.toggleConsidered,className:e,children:this.props.considered}),n("div",{children:n(_,{...this.props.expressionProps})})]}),c("div",{className:l.css(o.paddedY,o.paddedX),children:[n(m,{label:"Answer expression must have the same form.",checked:this.props.form,onChange:t=>{this.props.onChange({form:t})}}),n(u,{children:n("p",{children:"The student's answer must be in the same form. Commutativity and excess negative signs are ignored."})})]}),c("div",{className:l.css(o.paddedY,o.paddedX),children:[n(m,{label:"Answer expression must be fully expanded and simplified.",checked:this.props.simplify,onChange:t=>{this.props.onChange({simplify:t})}}),n(u,{children:n("p",{children:`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."`})})]}),n("div",{className:l.css(o.buttonRow,o.paddedY),children:i})]})]})}}const o=l.StyleSheet.create({paddedX:{paddingLeft:p.xSmall_8,paddingRight:p.xSmall_8},paddedY:{paddingTop:p.xxSmall_6,paddingBottom:p.xxSmall_6},answerOption:{border:"1px solid #ddd",borderRadius:"3px",display:"flex"},answerHandle:{background:"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==) no-repeat 50% 50%",borderRight:"1px solid #ddd",cursor:"move",width:"20px",minWidth:"20px"},answerStatus:{border:"none",userSelect:"none",width:"100px",paddingTop:p.small_12,paddingBottom:p.small_12},answerStatusWrong:{backgroundColor:y.fadedRed16},answerStatusCorrect:{backgroundColor:y.fadedGreen16},answerStatusUngraded:{backgroundColor:y.fadedBlue16},answerBody:{},buttonRow:{display:"flex"}});x.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"_newEmptyAnswerForm",docblock:null,modifiers:[],params:[],returns:null},{name:"newAnswer",docblock:null,modifiers:[],params:[],returns:null},{name:"handleRemoveForm",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null}],returns:null},{name:"updateForm",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"props",optional:!1,type:null}],returns:null},{name:"handleReorder",docblock:null,modifiers:[],params:[{name:"components",optional:!1,type:null}],returns:null},{name:"handleButtonSet",docblock:null,modifiers:[],params:[{name:"changingName",optional:!1,type:null}],returns:null},{name:"handleToggleDiv",docblock:null,modifiers:[],params:[],returns:null},{name:"handleTexInsert",docblock:null,modifiers:[],params:[{name:"str",optional:!1,type:null}],returns:null},{name:"handleFunctions",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:null}],returns:null}],displayName:"ExpressionEditor",props:{widgetId:{required:!1,tsType:{name:"any"},description:""},value:{required:!1,tsType:{name:"string"},description:""},answerForms:{defaultValue:{value:"[]",computed:!1},required:!1},times:{defaultValue:{value:"false",computed:!1},required:!1},buttonSets:{defaultValue:{value:'["basic"]',computed:!1},required:!1},functions:{defaultValue:{value:'["f", "g", "h"]',computed:!1},required:!1}}};export{x as E}; diff --git a/assets/expression-editor.stories-bX7eLN_p.js b/assets/expression-editor.stories-5tmUGox7.js similarity index 56% rename from assets/expression-editor.stories-bX7eLN_p.js rename to assets/expression-editor.stories-5tmUGox7.js index 628dd57f43..35df72a3c1 100644 --- a/assets/expression-editor.stories-bX7eLN_p.js +++ b/assets/expression-editor.stories-5tmUGox7.js @@ -1,7 +1,7 @@ -import{j as i,a as c}from"./jsx-runtime-FVsy8kgq.js";import{l as p}from"./index-awljIyHI.js";import{r as u}from"./index-TT1qJ6UJ.js";import{R as g}from"./renderer-with-debug-ui-fbym8U_I.js";import{E as l}from"./expression-editor-QP0tq_O5.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";import"./components-GHvuFaIn.js";import"./index-0C4KXdeC.js";const nr={title:"PerseusEditor/Widgets/Expression Editor"};class f extends u.Component{constructor(e){super(e);const t=r.widgets["expression 1"].options;this.state={answerForms:t.answerForms,times:t.times,buttonSets:t.buttonSets,functions:t.functions}}mergeQuestionWithState(){return{...r,widgets:{...r.widgets,"expression 1":{...r.widgets["expression 1"],options:{...r.widgets["expression 1"].options,...this.state}}}}}render(){const e=Object.freeze({});return c("div",{className:p.css(m.wrapper),children:[i("div",{className:p.css(m.editorWrapper),children:i(l,{...this.state,onChange:t=>{this.setState({...t})}})}),i(g,{question:this.mergeQuestionWithState(),apiOptions:e,reviewMode:!0})]})}}const o=d=>i(f,{}),r={content:`This is a cool expression question +import{j as i,a as c}from"./jsx-runtime-FVsy8kgq.js";import{l as p}from"./index-awljIyHI.js";import{r as u}from"./index-TT1qJ6UJ.js";import{R as g}from"./renderer-with-debug-ui-YzY7YHzw.js";import{E as l}from"./expression-editor-iqoCc9gS.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";import"./components-h6HHhmoA.js";import"./index-fuycm_QE.js";import"./index-k-0mNqHS.js";const ar={title:"PerseusEditor/Widgets/Expression Editor"};class f extends u.Component{constructor(e){super(e);const t=r.widgets["expression 1"].options;this.state={answerForms:t.answerForms,times:t.times,buttonSets:t.buttonSets,functions:t.functions}}mergeQuestionWithState(){return{...r,widgets:{...r.widgets,"expression 1":{...r.widgets["expression 1"],options:{...r.widgets["expression 1"].options,...this.state}}}}}render(){const e=Object.freeze({});return c("div",{className:p.css(m.wrapper),children:[i("div",{className:p.css(m.editorWrapper),children:i(l,{...this.state,onChange:t=>{this.setState({...t})}})}),i(g,{question:this.mergeQuestionWithState(),apiOptions:e,reviewMode:!0})]})}}const o=d=>i(f,{}),r={content:`This is a cool expression question [[☃ expression 1]] `,images:{},widgets:{"expression 1":{alignment:"default",graded:!0,options:{answerForms:[{considered:"correct",form:!0,key:"0",simplify:!1,value:"16+88i"}],buttonSets:["basic"],functions:["f","g","h"],times:!1},static:!1,type:"expression",version:{major:1,minor:0}}}},m=p.StyleSheet.create({wrapper:{padding:50},editorWrapper:{paddingBottom:100}});o.__docgenInfo={description:"",methods:[],displayName:"Debug"};var s,n,a;o.parameters={...o.parameters,docs:{...(s=o.parameters)==null?void 0:s.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; -}`,...(a=(n=o.parameters)==null?void 0:n.docs)==null?void 0:a.source}}};const ar=["Debug"];export{o as Debug,ar as __namedExportsOrder,nr as default}; +}`,...(a=(n=o.parameters)==null?void 0:n.docs)==null?void 0:a.source}}};const dr=["Debug"];export{o as Debug,dr as __namedExportsOrder,ar as default}; diff --git a/assets/expression.stories-d1DbWABc.js b/assets/expression.stories-bBdYXZfc.js similarity index 83% rename from assets/expression.stories-d1DbWABc.js rename to assets/expression.stories-bBdYXZfc.js index 74f1a9f754..27fd4bc049 100644 --- a/assets/expression.stories-d1DbWABc.js +++ b/assets/expression.stories-bBdYXZfc.js @@ -1,4 +1,4 @@ -import{j as r,a as u}from"./jsx-runtime-FVsy8kgq.js";import{a as T}from"./mobile-keypad-hKjeQGNp.js";import"./prop-types-3bOVFRDQ.js";import"./key-translator-IA-2V2LV.js";import"./button-assets-txIojR3b.js";import{K as _}from"./enums-x5qaTru7.js";import{a as W}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{S as L}from"./server-item-renderer-with-debug-ui-rx6QaX-9.js";import{T as M}from"./test-keypad-context-wrapper-UieRILfg.js";import{I as N,f as j}from"./article-renderer-6f7Dak4j.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./version-akiLXZts.js";import"./invariant-bu5zBsRS.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./choice-E4eyMygy.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./dependencies-8XILypbq.js";import"./multi-renderer-PglzmXdY.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./hints-renderer-zKC46_AN.js";import"./shared-3pf9YZIg.js";import"./base-radio-ffaiqOwN.js";import"./choice-none-above-tmJoP6pY.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./hud-FI3E3dT_.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./ke-score-ui-xy7p6xf5.js";import"./side-by-side-kpK-8vW0.js";import"./test-dependencies-UUeUFXqw.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./answer-choices-uB4giKvU.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";const c=(e,t)=>({question:{content:"[[☃ expression 1]]",images:{},widgets:{"expression 1":{type:"expression",graded:!0,options:e,version:t}}},answer:null,answerArea:Object.fromEntries(N.map(o=>[o,!1])),itemDataVersion:{major:0,minor:1},hints:[]});c({answerForms:[],times:!1,buttonSets:["basic"],functions:[],buttonsVisible:"always",ariaLabel:"Test aria label",visibleLabel:"Test visible label"},{major:1,minor:0});const D=c({answerForms:[{considered:"correct",form:!1,simplify:!1,value:"123-x"},{considered:"correct",form:!1,simplify:!1,value:"x-123"}],times:!1,buttonSets:["basic"],functions:["f","g","h"],buttonsVisible:"always"},{major:1,minor:0}),A={answerForms:[{considered:"ungraded",form:!1,simplify:!1,value:"x+1"},{considered:"wrong",form:!1,simplify:!1,value:"y+1"},{considered:"correct",form:!1,simplify:!1,value:"z+1"},{considered:"correct",form:!1,simplify:!1,value:"a+1"}],times:!1,buttonSets:["basic"],functions:["f","g","h"],buttonsVisible:"focused",visibleLabel:"number of cm",ariaLabel:"number of centimeters"},d=c(A,{major:1,minor:0}),n=({item:e,customKeypad:t,isMobile:o=!1})=>r(M,{children:r(T.Consumer,{children:({keypadElement:l})=>r(L,{item:e,keypadElement:l,apiOptions:{isMobile:o,customKeypad:t,onFocusChange:W("onFocusChange")}})})}),s=e=>{const t={functions:["f","g","h"],times:!0,answerForms:[],buttonSets:["basic","basic+div","trig","prealgebra","logarithms","basic relations","advanced relations"]},o={keypadType:_.EXPRESSION,extraKeys:["x","y","z"]};return r("div",{style:{padding:"2rem"},children:r(j.widget,{alignment:null,value:"",visibleLabel:"",ariaLabel:"",containerSizeClass:"small",findWidgets:l=>[],isLastUsedWidget:!1,onChange:()=>{},problemNum:1,static:!1,trackInteraction:()=>{},widgetId:"expression",reviewModeRubric:t,keypadConfiguration:o})})},i=e=>r(n,{item:d,customKeypad:!1}),a=e=>u("div",{children:[u("p",{children:["MathInput uses touch events;"," ",r("a",{href:"https://developer.chrome.com/docs/devtools/device-mode/",children:"emulate mobile"})," ","to use the custom keypad."]}),r(n,{item:d,customKeypad:!0,isMobile:!0})]}),p=e=>r(n,{item:D,customKeypad:e.customKeypad}),m=e=>r(n,{item:d,customKeypad:e.customKeypad}),Mr={title:"Perseus/Widgets/Expression",argTypes:{customKeypad:{control:"boolean"}}};s.__docgenInfo={description:"",methods:[],displayName:"DesktopKitchenSink",props:{customKeypad:{required:!0,tsType:{name:"boolean"},description:""}}};i.__docgenInfo={description:"",methods:[],displayName:"Desktop",props:{customKeypad:{required:!0,tsType:{name:"boolean"},description:""}}};a.__docgenInfo={description:"",methods:[],displayName:"Mobile",props:{customKeypad:{required:!0,tsType:{name:"boolean"},description:""}}};p.__docgenInfo={description:"",methods:[],displayName:"ExpressionItem2",props:{customKeypad:{required:!0,tsType:{name:"boolean"},description:""}}};m.__docgenInfo={description:"",methods:[],displayName:"ExpressionItem3",props:{customKeypad:{required:!0,tsType:{name:"boolean"},description:""}}};var y,f,g;s.parameters={...s.parameters,docs:{...(y=s.parameters)==null?void 0:y.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as r,a as u}from"./jsx-runtime-FVsy8kgq.js";import{a as T}from"./mobile-keypad-hKjeQGNp.js";import"./prop-types-3bOVFRDQ.js";import"./key-translator-IA-2V2LV.js";import"./button-assets-txIojR3b.js";import{K as _}from"./enums-x5qaTru7.js";import{a as W}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{S as L}from"./server-item-renderer-with-debug-ui-xomgDBO_.js";import{T as M}from"./test-keypad-context-wrapper-UieRILfg.js";import{I as N,e as j}from"./article-renderer-TMdCDA85.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./version-akiLXZts.js";import"./invariant-bu5zBsRS.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./choice-E4eyMygy.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./dependencies-8XILypbq.js";import"./multi-renderer-vtdVtdWv.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./hints-renderer-sA0Ao_qa.js";import"./shared-3pf9YZIg.js";import"./base-radio-TdBv-OLd.js";import"./choice-none-above-HXEAXx7K.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./hud-FI3E3dT_.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./ke-score-ui-xy7p6xf5.js";import"./side-by-side-kpK-8vW0.js";import"./test-dependencies-OZugV_HD.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./answer-choices-xSqM961S.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";const c=(e,t)=>({question:{content:"[[☃ expression 1]]",images:{},widgets:{"expression 1":{type:"expression",graded:!0,options:e,version:t}}},answer:null,answerArea:Object.fromEntries(N.map(o=>[o,!1])),itemDataVersion:{major:0,minor:1},hints:[]});c({answerForms:[],times:!1,buttonSets:["basic"],functions:[],buttonsVisible:"always",ariaLabel:"Test aria label",visibleLabel:"Test visible label"},{major:1,minor:0});const D=c({answerForms:[{considered:"correct",form:!1,simplify:!1,value:"123-x"},{considered:"correct",form:!1,simplify:!1,value:"x-123"}],times:!1,buttonSets:["basic"],functions:["f","g","h"],buttonsVisible:"always"},{major:1,minor:0}),A={answerForms:[{considered:"ungraded",form:!1,simplify:!1,value:"x+1"},{considered:"wrong",form:!1,simplify:!1,value:"y+1"},{considered:"correct",form:!1,simplify:!1,value:"z+1"},{considered:"correct",form:!1,simplify:!1,value:"a+1"}],times:!1,buttonSets:["basic"],functions:["f","g","h"],buttonsVisible:"focused",visibleLabel:"number of cm",ariaLabel:"number of centimeters"},d=c(A,{major:1,minor:0}),n=({item:e,customKeypad:t,isMobile:o=!1})=>r(M,{children:r(T.Consumer,{children:({keypadElement:l})=>r(L,{item:e,keypadElement:l,apiOptions:{isMobile:o,customKeypad:t,onFocusChange:W("onFocusChange")}})})}),s=e=>{const t={functions:["f","g","h"],times:!0,answerForms:[],buttonSets:["basic","basic+div","trig","prealgebra","logarithms","basic relations","advanced relations"]},o={keypadType:_.EXPRESSION,extraKeys:["x","y","z"]};return r("div",{style:{padding:"2rem"},children:r(j.widget,{alignment:null,value:"",visibleLabel:"",ariaLabel:"",containerSizeClass:"small",findWidgets:l=>[],isLastUsedWidget:!1,onChange:()=>{},problemNum:1,static:!1,trackInteraction:()=>{},widgetId:"expression",reviewModeRubric:t,keypadConfiguration:o})})},i=e=>r(n,{item:d,customKeypad:!1}),a=e=>u("div",{children:[u("p",{children:["MathInput uses touch events;"," ",r("a",{href:"https://developer.chrome.com/docs/devtools/device-mode/",children:"emulate mobile"})," ","to use the custom keypad."]}),r(n,{item:d,customKeypad:!0,isMobile:!0})]}),p=e=>r(n,{item:D,customKeypad:e.customKeypad}),m=e=>r(n,{item:d,customKeypad:e.customKeypad}),Mr={title:"Perseus/Widgets/Expression",argTypes:{customKeypad:{control:"boolean"}}};s.__docgenInfo={description:"",methods:[],displayName:"DesktopKitchenSink",props:{customKeypad:{required:!0,tsType:{name:"boolean"},description:""}}};i.__docgenInfo={description:"",methods:[],displayName:"Desktop",props:{customKeypad:{required:!0,tsType:{name:"boolean"},description:""}}};a.__docgenInfo={description:"",methods:[],displayName:"Mobile",props:{customKeypad:{required:!0,tsType:{name:"boolean"},description:""}}};p.__docgenInfo={description:"",methods:[],displayName:"ExpressionItem2",props:{customKeypad:{required:!0,tsType:{name:"boolean"},description:""}}};m.__docgenInfo={description:"",methods:[],displayName:"ExpressionItem3",props:{customKeypad:{required:!0,tsType:{name:"boolean"},description:""}}};var y,f,g;s.parameters={...s.parameters,docs:{...(y=s.parameters)==null?void 0:y.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const reviewModeRubric = { functions: ["f", "g", "h"], times: true, diff --git a/assets/flags-for-api-options-oZTvm2lx.js b/assets/flags-for-api-options-VdIBjpAD.js similarity index 56% rename from assets/flags-for-api-options-oZTvm2lx.js rename to assets/flags-for-api-options-VdIBjpAD.js index ed5c1203d7..aa3365225b 100644 --- a/assets/flags-for-api-options-oZTvm2lx.js +++ b/assets/flags-for-api-options-VdIBjpAD.js @@ -1 +1 @@ -import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as t}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";const r={mafs:{angle:!0,segment:!0,circle:!0,quadratic:!0,sinusoid:!0,polygon:!0,linear:!0,"linear-system":!0,ray:!0,point:!0,none:!0,"interactive-graph-locked-features-labels":!0,"locked-figures-aria":!0,"locked-point-labels":!0,"locked-line-labels":!0,"locked-vector-labels":!0,"locked-ellipse-labels":!0,"locked-polygon-labels":!0,"locked-function-labels":!0}},z={...t.defaults,flags:{...t.defaults.flags,...r}};export{z as a,r as f}; +import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as t}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";const r={mafs:{angle:!0,segment:!0,circle:!0,quadratic:!0,sinusoid:!0,polygon:!0,linear:!0,"linear-system":!0,ray:!0,point:!0,none:!0,"interactive-graph-locked-features-labels":!0,"locked-figures-aria":!0,"locked-point-labels":!0,"locked-line-labels":!0,"locked-vector-labels":!0,"locked-ellipse-labels":!0,"locked-polygon-labels":!0,"locked-function-labels":!0}},z={...t.defaults,flags:{...t.defaults.flags,...r}};export{z as a,r as f}; diff --git a/assets/form-wrapped-text-field-BopYavUW.js b/assets/form-wrapped-text-field-BopYavUW.js new file mode 100644 index 0000000000..7be95daa0f --- /dev/null +++ b/assets/form-wrapped-text-field-BopYavUW.js @@ -0,0 +1 @@ +import{j as l,a as D}from"./jsx-runtime-FVsy8kgq.js";import{t as M,a,b as N}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{c as b}from"./index-deFLJwr4.js";import{l as s}from"./index-awljIyHI.js";import{r as g}from"./index-TT1qJ6UJ.js";class T extends g.Component{constructor(){super(...arguments),this.state={focused:!1},this.handleBlur=o=>{const{onBlur:t}=this.props;t&&t(o),this.setState({focused:!1})},this.handleFocus=o=>{const{onFocus:t}=this.props;t&&t(o),this.setState({focused:!0})},this.disableDefault=o=>{o.preventDefault()}}render(){const{forwardedRef:o,width:t,grow:n,shrink:i,icon:d,backgroundColor:c,focusBorderColor:x,borderColor:y,color:m,onSubmit:B,leftSideIcon:u,id:S,testId:w,type:k,labelMediumInputText:F,...C}=this.props,{focused:I}=this.state,r={},f=[e.input,e.container];t&&(r.width=t),n&&(r.flexGrow=n===!0?1:n),(i||i===0)&&(r.flexShrink=i===!0?0:i),c?r.backgroundColor=c:f.push(e.defaultBackground),m&&(r.color=m);const R=I?x||b.blue:y||b.offBlack16;r.border=`1px solid ${R}`;const h=d&&l("span",{className:s.css(e.icon),children:d}),j=F?e.labelMediumInputBase:e.inputBase;return D("form",{className:s.css(...f),style:r,onSubmit:B||this.disableDefault,children:[u&&h,l("input",{...C,onFocus:this.handleFocus,onBlur:this.handleBlur,type:k,className:s.css(j),ref:o,id:S,"data-testid":w}),!u&&h]})}}const e=s.StyleSheet.create({inputBase:{background:"inherit",border:"none",...M.bodyXsmall,outline:"none","::placeholder":{color:a.gray41},width:"100%",color:"inherit",marginBottom:0,paddingLeft:0,boxShadow:"none",padding:0,margin:0},labelMediumInputBase:{background:"inherit",border:"none",outline:"none","::placeholder":{color:a.gray41},width:"100%",fontWeight:"normal",fontFamily:"Lato, san-serif",fontSize:"16px",lineHeight:"20px"},input:{height:40,borderRadius:N,boxSizing:"border-box",padding:"8px 10px"},container:{display:"inline-flex",alignItems:"center",marginBottom:0},defaultBackground:{backgroundColor:a.white},icon:{display:"flex",alignItems:"center",justifyContent:"center"}}),co=g.forwardRef((p,o)=>l(T,{...p,forwardedRef:o}));export{co as F}; diff --git a/assets/form-wrapped-text-field-DtGz9PJ5.js b/assets/form-wrapped-text-field-DtGz9PJ5.js deleted file mode 100644 index 04f5f8ad2a..0000000000 --- a/assets/form-wrapped-text-field-DtGz9PJ5.js +++ /dev/null @@ -1 +0,0 @@ -import{j as l,a as D}from"./jsx-runtime-FVsy8kgq.js";import{t as M,b as a,e as N}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{c as b}from"./index-deFLJwr4.js";import{l as s}from"./index-awljIyHI.js";import{r as g}from"./index-TT1qJ6UJ.js";class T extends g.Component{constructor(){super(...arguments),this.state={focused:!1},this.handleBlur=o=>{const{onBlur:t}=this.props;t&&t(o),this.setState({focused:!1})},this.handleFocus=o=>{const{onFocus:t}=this.props;t&&t(o),this.setState({focused:!0})},this.disableDefault=o=>{o.preventDefault()}}render(){const{forwardedRef:o,width:t,grow:n,shrink:i,icon:d,backgroundColor:c,focusBorderColor:x,borderColor:y,color:m,onSubmit:B,leftSideIcon:u,id:S,testId:w,type:k,labelMediumInputText:F,...C}=this.props,{focused:I}=this.state,r={},f=[e.input,e.container];t&&(r.width=t),n&&(r.flexGrow=n===!0?1:n),(i||i===0)&&(r.flexShrink=i===!0?0:i),c?r.backgroundColor=c:f.push(e.defaultBackground),m&&(r.color=m);const R=I?x||b.blue:y||b.offBlack16;r.border=`1px solid ${R}`;const h=d&&l("span",{className:s.css(e.icon),children:d}),j=F?e.labelMediumInputBase:e.inputBase;return D("form",{className:s.css(...f),style:r,onSubmit:B||this.disableDefault,children:[u&&h,l("input",{...C,onFocus:this.handleFocus,onBlur:this.handleBlur,type:k,className:s.css(j),ref:o,id:S,"data-testid":w}),!u&&h]})}}const e=s.StyleSheet.create({inputBase:{background:"inherit",border:"none",...M.bodyXsmall,outline:"none","::placeholder":{color:a.gray41},width:"100%",color:"inherit",marginBottom:0,paddingLeft:0,boxShadow:"none",padding:0,margin:0},labelMediumInputBase:{background:"inherit",border:"none",outline:"none","::placeholder":{color:a.gray41},width:"100%",fontWeight:"normal",fontFamily:"Lato, san-serif",fontSize:"16px",lineHeight:"20px"},input:{height:40,borderRadius:N,boxSizing:"border-box",padding:"8px 10px"},container:{display:"inline-flex",alignItems:"center",marginBottom:0},defaultBackground:{backgroundColor:a.white},icon:{display:"flex",alignItems:"center",justifyContent:"center"}}),co=g.forwardRef((p,o)=>l(T,{...p,forwardedRef:o}));export{co as F}; diff --git a/assets/formatter-SWP5E3XI-DFe396sY.js b/assets/formatter-SWP5E3XI-VlZk_GWI.js similarity index 99% rename from assets/formatter-SWP5E3XI-DFe396sY.js rename to assets/formatter-SWP5E3XI-VlZk_GWI.js index 9fc0e9e05c..c2b8c6546d 100644 --- a/assets/formatter-SWP5E3XI-DFe396sY.js +++ b/assets/formatter-SWP5E3XI-VlZk_GWI.js @@ -1,4 +1,4 @@ -import{_ as ea,m as pl,b as ta}from"./DocsRenderer-NNNQARDV-ONpjav1a.js";import"./iframe-sjDFBNDn.js";import"../sb-preview/runtime.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./react-18-N0svEjlN.js";import"./client-rbWgHzHN.js";import"./index-7vsPyIck.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./bundle.esm-7jAAHVxW.js";import"./index-ogXoivrg.js";import"./_getPrototype-bjD8Yebc.js";import"./index-PPLHz8o0.js";var cl=ta({"node_modules/prettier/parser-html.js"(Jr,Xr){(function(Ae){if(typeof Jr=="object"&&typeof Xr=="object")Xr.exports=Ae();else if(typeof define=="function"&&define.amd)define(Ae);else{var Yt=typeof globalThis<"u"?globalThis:typeof global<"u"?global:typeof self<"u"?self:this||{};Yt.prettierPlugins=Yt.prettierPlugins||{},Yt.prettierPlugins.html=Ae()}})(function(){var Ae=(ot,Ne)=>()=>(Ne||ot((Ne={exports:{}}).exports,Ne),Ne.exports),Yt=Ae((ot,Ne)=>{var Se=function(Oe){return Oe&&Oe.Math==Math&&Oe};Ne.exports=Se(typeof globalThis=="object"&&globalThis)||Se(typeof window=="object"&&window)||Se(typeof self=="object"&&self)||Se(typeof global=="object"&&global)||function(){return this}()||Function("return this")()}),hr=Ae((ot,Ne)=>{Ne.exports=function(Se){try{return!!Se()}catch{return!0}}}),br=Ae((ot,Ne)=>{var Se=hr();Ne.exports=!Se(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7})}),Hr=Ae((ot,Ne)=>{var Se=hr();Ne.exports=!Se(function(){var Oe=(function(){}).bind();return typeof Oe!="function"||Oe.hasOwnProperty("prototype")})}),gr=Ae((ot,Ne)=>{var Se=Hr(),Oe=Function.prototype.call;Ne.exports=Se?Oe.bind(Oe):function(){return Oe.apply(Oe,arguments)}}),Dn=Ae(ot=>{var Ne={}.propertyIsEnumerable,Se=Object.getOwnPropertyDescriptor,Oe=Se&&!Ne.call({1:2},1);ot.f=Oe?function(ee){var V=Se(this,ee);return!!V&&V.enumerable}:Ne}),Lr=Ae((ot,Ne)=>{Ne.exports=function(Se,Oe){return{enumerable:!(Se&1),configurable:!(Se&2),writable:!(Se&4),value:Oe}}}),Dr=Ae((ot,Ne)=>{var Se=Hr(),Oe=Function.prototype,ee=Oe.call,V=Se&&Oe.bind.bind(ee,ee);Ne.exports=Se?V:function(W){return function(){return ee.apply(W,arguments)}}}),Br=Ae((ot,Ne)=>{var Se=Dr(),Oe=Se({}.toString),ee=Se("".slice);Ne.exports=function(V){return ee(Oe(V),8,-1)}}),Zr=Ae((ot,Ne)=>{var Se=Dr(),Oe=hr(),ee=Br(),V=Object,W=Se("".split);Ne.exports=Oe(function(){return!V("z").propertyIsEnumerable(0)})?function(Z){return ee(Z)=="String"?W(Z,""):V(Z)}:V}),nn=Ae((ot,Ne)=>{Ne.exports=function(Se){return Se==null}}),qn=Ae((ot,Ne)=>{var Se=nn(),Oe=TypeError;Ne.exports=function(ee){if(Se(ee))throw Oe("Can't call method on "+ee);return ee}}),dn=Ae((ot,Ne)=>{var Se=Zr(),Oe=qn();Ne.exports=function(ee){return Se(Oe(ee))}}),Vn=Ae((ot,Ne)=>{var Se=typeof document=="object"&&document.all,Oe=typeof Se>"u"&&Se!==void 0;Ne.exports={all:Se,IS_HTMLDDA:Oe}}),dr=Ae((ot,Ne)=>{var Se=Vn(),Oe=Se.all;Ne.exports=Se.IS_HTMLDDA?function(ee){return typeof ee=="function"||ee===Oe}:function(ee){return typeof ee=="function"}}),Or=Ae((ot,Ne)=>{var Se=dr(),Oe=Vn(),ee=Oe.all;Ne.exports=Oe.IS_HTMLDDA?function(V){return typeof V=="object"?V!==null:Se(V)||V===ee}:function(V){return typeof V=="object"?V!==null:Se(V)}}),un=Ae((ot,Ne)=>{var Se=Yt(),Oe=dr(),ee=function(V){return Oe(V)?V:void 0};Ne.exports=function(V,W){return arguments.length<2?ee(Se[V]):Se[V]&&Se[V][W]}}),Un=Ae((ot,Ne)=>{var Se=Dr();Ne.exports=Se({}.isPrototypeOf)}),ii=Ae((ot,Ne)=>{var Se=un();Ne.exports=Se("navigator","userAgent")||""}),si=Ae((ot,Ne)=>{var Se=Yt(),Oe=ii(),ee=Se.process,V=Se.Deno,W=ee&&ee.versions||V&&V.version,Z=W&&W.v8,Y,ne;Z&&(Y=Z.split("."),ne=Y[0]>0&&Y[0]<4?1:+(Y[0]+Y[1])),!ne&&Oe&&(Y=Oe.match(/Edge\/(\d+)/),(!Y||Y[1]>=74)&&(Y=Oe.match(/Chrome\/(\d+)/),Y&&(ne=+Y[1]))),Ne.exports=ne}),Gn=Ae((ot,Ne)=>{var Se=si(),Oe=hr();Ne.exports=!!Object.getOwnPropertySymbols&&!Oe(function(){var ee=Symbol();return!String(ee)||!(Object(ee)instanceof Symbol)||!Symbol.sham&&Se&&Se<41})}),Jn=Ae((ot,Ne)=>{var Se=Gn();Ne.exports=Se&&!Symbol.sham&&typeof Symbol.iterator=="symbol"}),Xn=Ae((ot,Ne)=>{var Se=un(),Oe=dr(),ee=Un(),V=Jn(),W=Object;Ne.exports=V?function(Z){return typeof Z=="symbol"}:function(Z){var Y=Se("Symbol");return Oe(Y)&&ee(Y.prototype,W(Z))}}),fn=Ae((ot,Ne)=>{var Se=String;Ne.exports=function(Oe){try{return Se(Oe)}catch{return"Object"}}}),sn=Ae((ot,Ne)=>{var Se=dr(),Oe=fn(),ee=TypeError;Ne.exports=function(V){if(Se(V))return V;throw ee(Oe(V)+" is not a function")}}),mn=Ae((ot,Ne)=>{var Se=sn(),Oe=nn();Ne.exports=function(ee,V){var W=ee[V];return Oe(W)?void 0:Se(W)}}),ai=Ae((ot,Ne)=>{var Se=gr(),Oe=dr(),ee=Or(),V=TypeError;Ne.exports=function(W,Z){var Y,ne;if(Z==="string"&&Oe(Y=W.toString)&&!ee(ne=Se(Y,W))||Oe(Y=W.valueOf)&&!ee(ne=Se(Y,W))||Z!=="string"&&Oe(Y=W.toString)&&!ee(ne=Se(Y,W)))return ne;throw V("Can't convert object to primitive value")}}),oi=Ae((ot,Ne)=>{Ne.exports=!1}),hn=Ae((ot,Ne)=>{var Se=Yt(),Oe=Object.defineProperty;Ne.exports=function(ee,V){try{Oe(Se,ee,{value:V,configurable:!0,writable:!0})}catch{Se[ee]=V}return V}}),gn=Ae((ot,Ne)=>{var Se=Yt(),Oe=hn(),ee="__core-js_shared__",V=Se[ee]||Oe(ee,{});Ne.exports=V}),Wn=Ae((ot,Ne)=>{var Se=oi(),Oe=gn();(Ne.exports=function(ee,V){return Oe[ee]||(Oe[ee]=V!==void 0?V:{})})("versions",[]).push({version:"3.26.1",mode:Se?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.1/LICENSE",source:"https://github.com/zloirock/core-js"})}),Sn=Ae((ot,Ne)=>{var Se=qn(),Oe=Object;Ne.exports=function(ee){return Oe(Se(ee))}}),kr=Ae((ot,Ne)=>{var Se=Dr(),Oe=Sn(),ee=Se({}.hasOwnProperty);Ne.exports=Object.hasOwn||function(V,W){return ee(Oe(V),W)}}),zn=Ae((ot,Ne)=>{var Se=Dr(),Oe=0,ee=Math.random(),V=Se(1 .toString);Ne.exports=function(W){return"Symbol("+(W===void 0?"":W)+")_"+V(++Oe+ee,36)}}),$r=Ae((ot,Ne)=>{var Se=Yt(),Oe=Wn(),ee=kr(),V=zn(),W=Gn(),Z=Jn(),Y=Oe("wks"),ne=Se.Symbol,Fe=ne&&ne.for,je=Z?ne:ne&&ne.withoutSetter||V;Ne.exports=function(he){if(!ee(Y,he)||!(W||typeof Y[he]=="string")){var qe="Symbol."+he;W&&ee(ne,he)?Y[he]=ne[he]:Z&&Fe?Y[he]=Fe(qe):Y[he]=je(qe)}return Y[he]}}),li=Ae((ot,Ne)=>{var Se=gr(),Oe=Or(),ee=Xn(),V=mn(),W=ai(),Z=$r(),Y=TypeError,ne=Z("toPrimitive");Ne.exports=function(Fe,je){if(!Oe(Fe)||ee(Fe))return Fe;var he=V(Fe,ne),qe;if(he){if(je===void 0&&(je="default"),qe=Se(he,Fe,je),!Oe(qe)||ee(qe))return qe;throw Y("Can't convert object to primitive value")}return je===void 0&&(je="number"),W(Fe,je)}}),yn=Ae((ot,Ne)=>{var Se=li(),Oe=Xn();Ne.exports=function(ee){var V=Se(ee,"string");return Oe(V)?V:V+""}}),pi=Ae((ot,Ne)=>{var Se=Yt(),Oe=Or(),ee=Se.document,V=Oe(ee)&&Oe(ee.createElement);Ne.exports=function(W){return V?ee.createElement(W):{}}}),Hn=Ae((ot,Ne)=>{var Se=br(),Oe=hr(),ee=pi();Ne.exports=!Se&&!Oe(function(){return Object.defineProperty(ee("div"),"a",{get:function(){return 7}}).a!=7})}),Yn=Ae(ot=>{var Ne=br(),Se=gr(),Oe=Dn(),ee=Lr(),V=dn(),W=yn(),Z=kr(),Y=Hn(),ne=Object.getOwnPropertyDescriptor;ot.f=Ne?ne:function(Fe,je){if(Fe=V(Fe),je=W(je),Y)try{return ne(Fe,je)}catch{}if(Z(Fe,je))return ee(!Se(Oe.f,Fe,je),Fe[je])}}),ci=Ae((ot,Ne)=>{var Se=br(),Oe=hr();Ne.exports=Se&&Oe(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!=42})}),Wr=Ae((ot,Ne)=>{var Se=Or(),Oe=String,ee=TypeError;Ne.exports=function(V){if(Se(V))return V;throw ee(Oe(V)+" is not an object")}}),en=Ae(ot=>{var Ne=br(),Se=Hn(),Oe=ci(),ee=Wr(),V=yn(),W=TypeError,Z=Object.defineProperty,Y=Object.getOwnPropertyDescriptor,ne="enumerable",Fe="configurable",je="writable";ot.f=Ne?Oe?function(he,qe,et){if(ee(he),qe=V(qe),ee(et),typeof he=="function"&&qe==="prototype"&&"value"in et&&je in et&&!et[je]){var Ze=Y(he,qe);Ze&&Ze[je]&&(he[qe]=et.value,et={configurable:Fe in et?et[Fe]:Ze[Fe],enumerable:ne in et?et[ne]:Ze[ne],writable:!1})}return Z(he,qe,et)}:Z:function(he,qe,et){if(ee(he),qe=V(qe),ee(et),Se)try{return Z(he,qe,et)}catch{}if("get"in et||"set"in et)throw W("Accessors not supported");return"value"in et&&(he[qe]=et.value),he}}),Kn=Ae((ot,Ne)=>{var Se=br(),Oe=en(),ee=Lr();Ne.exports=Se?function(V,W,Z){return Oe.f(V,W,ee(1,Z))}:function(V,W,Z){return V[W]=Z,V}}),Di=Ae((ot,Ne)=>{var Se=br(),Oe=kr(),ee=Function.prototype,V=Se&&Object.getOwnPropertyDescriptor,W=Oe(ee,"name"),Z=W&&(function(){}).name==="something",Y=W&&(!Se||Se&&V(ee,"name").configurable);Ne.exports={EXISTS:W,PROPER:Z,CONFIGURABLE:Y}}),Qn=Ae((ot,Ne)=>{var Se=Dr(),Oe=dr(),ee=gn(),V=Se(Function.toString);Oe(ee.inspectSource)||(ee.inspectSource=function(W){return V(W)}),Ne.exports=ee.inspectSource}),di=Ae((ot,Ne)=>{var Se=Yt(),Oe=dr(),ee=Se.WeakMap;Ne.exports=Oe(ee)&&/native code/.test(String(ee))}),fi=Ae((ot,Ne)=>{var Se=Wn(),Oe=zn(),ee=Se("keys");Ne.exports=function(V){return ee[V]||(ee[V]=Oe(V))}}),Zn=Ae((ot,Ne)=>{Ne.exports={}}),mi=Ae((ot,Ne)=>{var Se=di(),Oe=Yt(),ee=Or(),V=Kn(),W=kr(),Z=gn(),Y=fi(),ne=Zn(),Fe="Object already initialized",je=Oe.TypeError,he=Oe.WeakMap,qe,et,Ze,nt=function(At){return Ze(At)?et(At):qe(At,{})},rt=function(At){return function(Lt){var qt;if(!ee(Lt)||(qt=et(Lt)).type!==At)throw je("Incompatible receiver, "+At+" required");return qt}};Se||Z.state?($=Z.state||(Z.state=new he),$.get=$.get,$.has=$.has,$.set=$.set,qe=function(At,Lt){if($.has(At))throw je(Fe);return Lt.facade=At,$.set(At,Lt),Lt},et=function(At){return $.get(At)||{}},Ze=function(At){return $.has(At)}):(Ft=Y("state"),ne[Ft]=!0,qe=function(At,Lt){if(W(At,Ft))throw je(Fe);return Lt.facade=At,V(At,Ft,Lt),Lt},et=function(At){return W(At,Ft)?At[Ft]:{}},Ze=function(At){return W(At,Ft)});var $,Ft;Ne.exports={set:qe,get:et,has:Ze,enforce:nt,getterFor:rt}}),gu=Ae((ot,Ne)=>{var Se=hr(),Oe=dr(),ee=kr(),V=br(),W=Di().CONFIGURABLE,Z=Qn(),Y=mi(),ne=Y.enforce,Fe=Y.get,je=Object.defineProperty,he=V&&!Se(function(){return je(function(){},"length",{value:8}).length!==8}),qe=String(String).split("String"),et=Ne.exports=function(Ze,nt,rt){String(nt).slice(0,7)==="Symbol("&&(nt="["+String(nt).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),rt&&rt.getter&&(nt="get "+nt),rt&&rt.setter&&(nt="set "+nt),(!ee(Ze,"name")||W&&Ze.name!==nt)&&(V?je(Ze,"name",{value:nt,configurable:!0}):Ze.name=nt),he&&rt&&ee(rt,"arity")&&Ze.length!==rt.arity&&je(Ze,"length",{value:rt.arity});try{rt&&ee(rt,"constructor")&&rt.constructor?V&&je(Ze,"prototype",{writable:!1}):Ze.prototype&&(Ze.prototype=void 0)}catch{}var $=ne(Ze);return ee($,"source")||($.source=qe.join(typeof nt=="string"?nt:"")),Ze};Function.prototype.toString=et(function(){return Oe(this)&&Fe(this).source||Z(this)},"toString")}),hi=Ae((ot,Ne)=>{var Se=dr(),Oe=en(),ee=gu(),V=hn();Ne.exports=function(W,Z,Y,ne){ne||(ne={});var Fe=ne.enumerable,je=ne.name!==void 0?ne.name:Z;if(Se(Y)&&ee(Y,je,ne),ne.global)Fe?W[Z]=Y:V(Z,Y);else{try{ne.unsafe?W[Z]&&(Fe=!0):delete W[Z]}catch{}Fe?W[Z]=Y:Oe.f(W,Z,{value:Y,enumerable:!1,configurable:!ne.nonConfigurable,writable:!ne.nonWritable})}return W}}),gi=Ae((ot,Ne)=>{var Se=Math.ceil,Oe=Math.floor;Ne.exports=Math.trunc||function(ee){var V=+ee;return(V>0?Oe:Se)(V)}}),xn=Ae((ot,Ne)=>{var Se=gi();Ne.exports=function(Oe){var ee=+Oe;return ee!==ee||ee===0?0:Se(ee)}}),yi=Ae((ot,Ne)=>{var Se=xn(),Oe=Math.max,ee=Math.min;Ne.exports=function(V,W){var Z=Se(V);return Z<0?Oe(Z+W,0):ee(Z,W)}}),Ei=Ae((ot,Ne)=>{var Se=xn(),Oe=Math.min;Ne.exports=function(ee){return ee>0?Oe(Se(ee),9007199254740991):0}}),tn=Ae((ot,Ne)=>{var Se=Ei();Ne.exports=function(Oe){return Se(Oe.length)}}),Ci=Ae((ot,Ne)=>{var Se=dn(),Oe=yi(),ee=tn(),V=function(W){return function(Z,Y,ne){var Fe=Se(Z),je=ee(Fe),he=Oe(ne,je),qe;if(W&&Y!=Y){for(;je>he;)if(qe=Fe[he++],qe!=qe)return!0}else for(;je>he;he++)if((W||he in Fe)&&Fe[he]===Y)return W||he||0;return!W&&-1}};Ne.exports={includes:V(!0),indexOf:V(!1)}}),Fi=Ae((ot,Ne)=>{var Se=Dr(),Oe=kr(),ee=dn(),V=Ci().indexOf,W=Zn(),Z=Se([].push);Ne.exports=function(Y,ne){var Fe=ee(Y),je=0,he=[],qe;for(qe in Fe)!Oe(W,qe)&&Oe(Fe,qe)&&Z(he,qe);for(;ne.length>je;)Oe(Fe,qe=ne[je++])&&(~V(he,qe)||Z(he,qe));return he}}),Ai=Ae((ot,Ne)=>{Ne.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]}),vi=Ae(ot=>{var Ne=Fi(),Se=Ai(),Oe=Se.concat("length","prototype");ot.f=Object.getOwnPropertyNames||function(ee){return Ne(ee,Oe)}}),bi=Ae(ot=>{ot.f=Object.getOwnPropertySymbols}),Si=Ae((ot,Ne)=>{var Se=un(),Oe=Dr(),ee=vi(),V=bi(),W=Wr(),Z=Oe([].concat);Ne.exports=Se("Reflect","ownKeys")||function(Y){var ne=ee.f(W(Y)),Fe=V.f;return Fe?Z(ne,Fe(Y)):ne}}),xi=Ae((ot,Ne)=>{var Se=kr(),Oe=Si(),ee=Yn(),V=en();Ne.exports=function(W,Z,Y){for(var ne=Oe(Z),Fe=V.f,je=ee.f,he=0;he{var Se=hr(),Oe=dr(),ee=/#|\.prototype\./,V=function(Fe,je){var he=Z[W(Fe)];return he==ne?!0:he==Y?!1:Oe(je)?Se(je):!!je},W=V.normalize=function(Fe){return String(Fe).replace(ee,".").toLowerCase()},Z=V.data={},Y=V.NATIVE="N",ne=V.POLYFILL="P";Ne.exports=V}),an=Ae((ot,Ne)=>{var Se=Yt(),Oe=Yn().f,ee=Kn(),V=hi(),W=hn(),Z=xi(),Y=Ti();Ne.exports=function(ne,Fe){var je=ne.target,he=ne.global,qe=ne.stat,et,Ze,nt,rt,$,Ft;if(he?Ze=Se:qe?Ze=Se[je]||W(je,{}):Ze=(Se[je]||{}).prototype,Ze)for(nt in Fe){if($=Fe[nt],ne.dontCallGetSet?(Ft=Oe(Ze,nt),rt=Ft&&Ft.value):rt=Ze[nt],et=Y(he?nt:je+(qe?".":"#")+nt,ne.forced),!et&&rt!==void 0){if(typeof $==typeof rt)continue;Z($,rt)}(ne.sham||rt&&rt.sham)&&ee($,"sham",!0),V(Ze,nt,$,ne)}}}),yu=Ae(()=>{var ot=an(),Ne=Yt();ot({global:!0,forced:Ne.globalThis!==Ne},{globalThis:Ne})}),Bi=Ae(()=>{yu()}),Eu=Ae((ot,Ne)=>{var Se=Br();Ne.exports=Array.isArray||function(Oe){return Se(Oe)=="Array"}}),Cu=Ae((ot,Ne)=>{var Se=TypeError,Oe=9007199254740991;Ne.exports=function(ee){if(ee>Oe)throw Se("Maximum allowed index exceeded");return ee}}),Fu=Ae((ot,Ne)=>{var Se=Br(),Oe=Dr();Ne.exports=function(ee){if(Se(ee)==="Function")return Oe(ee)}}),Au=Ae((ot,Ne)=>{var Se=Fu(),Oe=sn(),ee=Hr(),V=Se(Se.bind);Ne.exports=function(W,Z){return Oe(W),Z===void 0?W:ee?V(W,Z):function(){return W.apply(Z,arguments)}}}),vu=Ae((ot,Ne)=>{var Se=Eu(),Oe=tn(),ee=Cu(),V=Au(),W=function(Z,Y,ne,Fe,je,he,qe,et){for(var Ze=je,nt=0,rt=qe?V(qe,et):!1,$,Ft;nt0&&Se($)?(Ft=Oe($),Ze=W(Z,Y,$,Ft,Ze,he-1)-1):(ee(Ze+1),Z[Ze]=$),Ze++),nt++;return Ze};Ne.exports=W}),wi=Ae((ot,Ne)=>{var Se=$r(),Oe=Se("toStringTag"),ee={};ee[Oe]="z",Ne.exports=String(ee)==="[object z]"}),bu=Ae((ot,Ne)=>{var Se=wi(),Oe=dr(),ee=Br(),V=$r(),W=V("toStringTag"),Z=Object,Y=ee(function(){return arguments}())=="Arguments",ne=function(Fe,je){try{return Fe[je]}catch{}};Ne.exports=Se?ee:function(Fe){var je,he,qe;return Fe===void 0?"Undefined":Fe===null?"Null":typeof(he=ne(je=Z(Fe),W))=="string"?he:Y?ee(je):(qe=ee(je))=="Object"&&Oe(je.callee)?"Arguments":qe}}),Su=Ae((ot,Ne)=>{var Se=Dr(),Oe=hr(),ee=dr(),V=bu(),W=un(),Z=Qn(),Y=function(){},ne=[],Fe=W("Reflect","construct"),je=/^\s*(?:class|function)\b/,he=Se(je.exec),qe=!je.exec(Y),et=function(nt){if(!ee(nt))return!1;try{return Fe(Y,ne,nt),!0}catch{return!1}},Ze=function(nt){if(!ee(nt))return!1;switch(V(nt)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return qe||!!he(je,Z(nt))}catch{return!0}};Ze.sham=!0,Ne.exports=!Fe||Oe(function(){var nt;return et(et.call)||!et(Object)||!et(function(){nt=!0})||nt})?Ze:et}),Ni=Ae((ot,Ne)=>{var Se=Eu(),Oe=Su(),ee=Or(),V=$r(),W=V("species"),Z=Array;Ne.exports=function(Y){var ne;return Se(Y)&&(ne=Y.constructor,Oe(ne)&&(ne===Z||Se(ne.prototype))?ne=void 0:ee(ne)&&(ne=ne[W],ne===null&&(ne=void 0))),ne===void 0?Z:ne}}),xu=Ae((ot,Ne)=>{var Se=Ni();Ne.exports=function(Oe,ee){return new(Se(Oe))(ee===0?0:ee)}}),_i=Ae(()=>{var ot=an(),Ne=vu(),Se=sn(),Oe=Sn(),ee=tn(),V=xu();ot({target:"Array",proto:!0},{flatMap:function(W){var Z=Oe(this),Y=ee(Z),ne;return Se(W),ne=V(Z,0),ne.length=Ne(ne,Z,Z,Y,0,1,W,arguments.length>1?arguments[1]:void 0),ne}})}),eu=Ae((ot,Ne)=>{Ne.exports={}}),ki=Ae((ot,Ne)=>{var Se=$r(),Oe=eu(),ee=Se("iterator"),V=Array.prototype;Ne.exports=function(W){return W!==void 0&&(Oe.Array===W||V[ee]===W)}}),Tu=Ae((ot,Ne)=>{var Se=bu(),Oe=mn(),ee=nn(),V=eu(),W=$r(),Z=W("iterator");Ne.exports=function(Y){if(!ee(Y))return Oe(Y,Z)||Oe(Y,"@@iterator")||V[Se(Y)]}}),Pi=Ae((ot,Ne)=>{var Se=gr(),Oe=sn(),ee=Wr(),V=fn(),W=Tu(),Z=TypeError;Ne.exports=function(Y,ne){var Fe=arguments.length<2?W(Y):ne;if(Oe(Fe))return ee(Se(Fe,Y));throw Z(V(Y)+" is not iterable")}}),Ii=Ae((ot,Ne)=>{var Se=gr(),Oe=Wr(),ee=mn();Ne.exports=function(V,W,Z){var Y,ne;Oe(V);try{if(Y=ee(V,"return"),!Y){if(W==="throw")throw Z;return Z}Y=Se(Y,V)}catch(Fe){ne=!0,Y=Fe}if(W==="throw")throw Z;if(ne)throw Y;return Oe(Y),Z}}),ji=Ae((ot,Ne)=>{var Se=Au(),Oe=gr(),ee=Wr(),V=fn(),W=ki(),Z=tn(),Y=Un(),ne=Pi(),Fe=Tu(),je=Ii(),he=TypeError,qe=function(Ze,nt){this.stopped=Ze,this.result=nt},et=qe.prototype;Ne.exports=function(Ze,nt,rt){var $=rt&&rt.that,Ft=!!(rt&&rt.AS_ENTRIES),At=!!(rt&&rt.IS_RECORD),Lt=!!(rt&&rt.IS_ITERATOR),qt=!!(rt&&rt.INTERRUPTED),Zt=Se(nt,$),ue,yr,Pr,zr,fr,Rr,mr,rn=function(Fr){return ue&&je(ue,"normal",Fr),new qe(!0,Fr)},wr=function(Fr){return Ft?(ee(Fr),qt?Zt(Fr[0],Fr[1],rn):Zt(Fr[0],Fr[1])):qt?Zt(Fr,rn):Zt(Fr)};if(At)ue=Ze.iterator;else if(Lt)ue=Ze;else{if(yr=Fe(Ze),!yr)throw he(V(Ze)+" is not iterable");if(W(yr)){for(Pr=0,zr=Z(Ze);zr>Pr;Pr++)if(fr=wr(Ze[Pr]),fr&&Y(et,fr))return fr;return new qe(!1)}ue=ne(Ze,yr)}for(Rr=At?Ze.next:ue.next;!(mr=Oe(Rr,ue)).done;){try{fr=wr(mr.value)}catch(Fr){je(ue,"throw",Fr)}if(typeof fr=="object"&&fr&&Y(et,fr))return fr}return new qe(!1)}}),Li=Ae((ot,Ne)=>{var Se=yn(),Oe=en(),ee=Lr();Ne.exports=function(V,W,Z){var Y=Se(W);Y in V?Oe.f(V,Y,ee(0,Z)):V[Y]=Z}}),Oi=Ae(()=>{var ot=an(),Ne=ji(),Se=Li();ot({target:"Object",stat:!0},{fromEntries:function(Oe){var ee={};return Ne(Oe,function(V,W){Se(ee,V,W)},{AS_ENTRIES:!0}),ee}})}),$i=Ae((ot,Ne)=>{var Se=["cliName","cliCategory","cliDescription"];function Oe(L,re){if(L==null)return{};var ge=ee(L,re),Ee,Pe;if(Object.getOwnPropertySymbols){var ie=Object.getOwnPropertySymbols(L);for(Pe=0;Pe=0)&&Object.prototype.propertyIsEnumerable.call(L,Ee)&&(ge[Ee]=L[Ee])}return ge}function ee(L,re){if(L==null)return{};var ge={},Ee=Object.keys(L),Pe,ie;for(ie=0;ie=0)&&(ge[Pe]=L[Pe]);return ge}Bi(),_i(),Oi();var V=Object.create,W=Object.defineProperty,Z=Object.getOwnPropertyDescriptor,Y=Object.getOwnPropertyNames,ne=Object.getPrototypeOf,Fe=Object.prototype.hasOwnProperty,je=(L,re)=>function(){return L&&(re=(0,L[Y(L)[0]])(L=0)),re},he=(L,re)=>function(){return re||(0,L[Y(L)[0]])((re={exports:{}}).exports,re),re.exports},qe=(L,re)=>{for(var ge in re)W(L,ge,{get:re[ge],enumerable:!0})},et=(L,re,ge,Ee)=>{if(re&&typeof re=="object"||typeof re=="function")for(let Pe of Y(re))!Fe.call(L,Pe)&&Pe!==ge&&W(L,Pe,{get:()=>re[Pe],enumerable:!(Ee=Z(re,Pe))||Ee.enumerable});return L},Ze=(L,re,ge)=>(ge=L!=null?V(ne(L)):{},et(re||!L||!L.__esModule?W(ge,"default",{value:L,enumerable:!0}):ge,L)),nt=L=>et(W({},"__esModule",{value:!0}),L),rt,$=je({""(){rt={env:{},argv:[]}}}),Ft=he({"node_modules/angular-html-parser/lib/compiler/src/chars.js"(L){$(),Object.defineProperty(L,"__esModule",{value:!0}),L.$EOF=0,L.$BSPACE=8,L.$TAB=9,L.$LF=10,L.$VTAB=11,L.$FF=12,L.$CR=13,L.$SPACE=32,L.$BANG=33,L.$DQ=34,L.$HASH=35,L.$$=36,L.$PERCENT=37,L.$AMPERSAND=38,L.$SQ=39,L.$LPAREN=40,L.$RPAREN=41,L.$STAR=42,L.$PLUS=43,L.$COMMA=44,L.$MINUS=45,L.$PERIOD=46,L.$SLASH=47,L.$COLON=58,L.$SEMICOLON=59,L.$LT=60,L.$EQ=61,L.$GT=62,L.$QUESTION=63,L.$0=48,L.$7=55,L.$9=57,L.$A=65,L.$E=69,L.$F=70,L.$X=88,L.$Z=90,L.$LBRACKET=91,L.$BACKSLASH=92,L.$RBRACKET=93,L.$CARET=94,L.$_=95,L.$a=97,L.$b=98,L.$e=101,L.$f=102,L.$n=110,L.$r=114,L.$t=116,L.$u=117,L.$v=118,L.$x=120,L.$z=122,L.$LBRACE=123,L.$BAR=124,L.$RBRACE=125,L.$NBSP=160,L.$PIPE=124,L.$TILDA=126,L.$AT=64,L.$BT=96;function re(Ue){return Ue>=L.$TAB&&Ue<=L.$SPACE||Ue==L.$NBSP}L.isWhitespace=re;function ge(Ue){return L.$0<=Ue&&Ue<=L.$9}L.isDigit=ge;function Ee(Ue){return Ue>=L.$a&&Ue<=L.$z||Ue>=L.$A&&Ue<=L.$Z}L.isAsciiLetter=Ee;function Pe(Ue){return Ue>=L.$a&&Ue<=L.$f||Ue>=L.$A&&Ue<=L.$F||ge(Ue)}L.isAsciiHexDigit=Pe;function ie(Ue){return Ue===L.$LF||Ue===L.$CR}L.isNewLine=ie;function de(Ue){return L.$0<=Ue&&Ue<=L.$7}L.isOctalDigit=de}}),At=he({"node_modules/angular-html-parser/lib/compiler/src/aot/static_symbol.js"(L){$(),Object.defineProperty(L,"__esModule",{value:!0});var re=class{constructor(Ee,Pe,ie){this.filePath=Ee,this.name=Pe,this.members=ie}assertNoMembers(){if(this.members.length)throw new Error(`Illegal state: symbol without members expected, but got ${JSON.stringify(this)}.`)}};L.StaticSymbol=re;var ge=class{constructor(){this.cache=new Map}get(Ee,Pe,ie){ie=ie||[];let de=ie.length?`.${ie.join(".")}`:"",Ue=`"${Ee}".${Pe}${de}`,Ge=this.cache.get(Ue);return Ge||(Ge=new re(Ee,Pe,ie),this.cache.set(Ue,Ge)),Ge}};L.StaticSymbolCache=ge}}),Lt=he({"node_modules/angular-html-parser/lib/compiler/src/util.js"(L){$(),Object.defineProperty(L,"__esModule",{value:!0});var re=/-+([a-z0-9])/g;function ge(le){return le.replace(re,function(){for(var We=arguments.length,Me=new Array(We),at=0;atde(Me,this,We))}visitStringMap(le,We){let Me={};return Object.keys(le).forEach(at=>{Me[at]=de(le[at],this,We)}),Me}visitPrimitive(le,We){return le}visitOther(le,We){return le}};L.ValueTransformer=gt,L.SyncAsync={assertSync:le=>{if(st(le))throw new Error("Illegal state: value cannot be a promise");return le},then:(le,We)=>st(le)?le.then(We):We(le),all:le=>le.some(st)?Promise.all(le):le};function ce(le){throw new Error(`Internal Error: ${le}`)}L.error=ce;function ve(le,We){let Me=Error(le);return Me[Ve]=!0,We&&(Me[He]=We),Me}L.syntaxError=ve;var Ve="ngSyntaxError",He="ngParseErrors";function Je(le){return le[Ve]}L.isSyntaxError=Je;function Qe(le){return le[He]||[]}L.getParseErrors=Qe;function yt(le){return le.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}L.escapeRegExp=yt;var _t=Object.getPrototypeOf({});function ct(le){return typeof le=="object"&&le!==null&&Object.getPrototypeOf(le)===_t}function kt(le){let We="";for(let Me=0;Me=55296&&at<=56319&&le.length>Me+1){let Jt=le.charCodeAt(Me+1);Jt>=56320&&Jt<=57343&&(Me++,at=(at-55296<<10)+Jt-56320+65536)}at<=127?We+=String.fromCharCode(at):at<=2047?We+=String.fromCharCode(at>>6&31|192,at&63|128):at<=65535?We+=String.fromCharCode(at>>12|224,at>>6&63|128,at&63|128):at<=2097151&&(We+=String.fromCharCode(at>>18&7|240,at>>12&63|128,at>>6&63|128,at&63|128))}return We}L.utf8Encode=kt;function $t(le){if(typeof le=="string")return le;if(le instanceof Array)return"["+le.map($t).join(", ")+"]";if(le==null)return""+le;if(le.overriddenName)return`${le.overriddenName}`;if(le.name)return`${le.name}`;if(!le.toString)return"object";let We=le.toString();if(We==null)return""+We;let Me=We.indexOf(` +import{_ as ea,m as pl,b as ta}from"./DocsRenderer-NNNQARDV-AKp_79_j.js";import"./iframe-uulHRm1N.js";import"../sb-preview/runtime.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./react-18-N0svEjlN.js";import"./client-rbWgHzHN.js";import"./index-7vsPyIck.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./bundle.esm-7jAAHVxW.js";import"./index-ogXoivrg.js";import"./_getPrototype-bjD8Yebc.js";import"./index-PPLHz8o0.js";var cl=ta({"node_modules/prettier/parser-html.js"(Jr,Xr){(function(Ae){if(typeof Jr=="object"&&typeof Xr=="object")Xr.exports=Ae();else if(typeof define=="function"&&define.amd)define(Ae);else{var Yt=typeof globalThis<"u"?globalThis:typeof global<"u"?global:typeof self<"u"?self:this||{};Yt.prettierPlugins=Yt.prettierPlugins||{},Yt.prettierPlugins.html=Ae()}})(function(){var Ae=(ot,Ne)=>()=>(Ne||ot((Ne={exports:{}}).exports,Ne),Ne.exports),Yt=Ae((ot,Ne)=>{var Se=function(Oe){return Oe&&Oe.Math==Math&&Oe};Ne.exports=Se(typeof globalThis=="object"&&globalThis)||Se(typeof window=="object"&&window)||Se(typeof self=="object"&&self)||Se(typeof global=="object"&&global)||function(){return this}()||Function("return this")()}),hr=Ae((ot,Ne)=>{Ne.exports=function(Se){try{return!!Se()}catch{return!0}}}),br=Ae((ot,Ne)=>{var Se=hr();Ne.exports=!Se(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7})}),Hr=Ae((ot,Ne)=>{var Se=hr();Ne.exports=!Se(function(){var Oe=(function(){}).bind();return typeof Oe!="function"||Oe.hasOwnProperty("prototype")})}),gr=Ae((ot,Ne)=>{var Se=Hr(),Oe=Function.prototype.call;Ne.exports=Se?Oe.bind(Oe):function(){return Oe.apply(Oe,arguments)}}),Dn=Ae(ot=>{var Ne={}.propertyIsEnumerable,Se=Object.getOwnPropertyDescriptor,Oe=Se&&!Ne.call({1:2},1);ot.f=Oe?function(ee){var V=Se(this,ee);return!!V&&V.enumerable}:Ne}),Lr=Ae((ot,Ne)=>{Ne.exports=function(Se,Oe){return{enumerable:!(Se&1),configurable:!(Se&2),writable:!(Se&4),value:Oe}}}),Dr=Ae((ot,Ne)=>{var Se=Hr(),Oe=Function.prototype,ee=Oe.call,V=Se&&Oe.bind.bind(ee,ee);Ne.exports=Se?V:function(W){return function(){return ee.apply(W,arguments)}}}),Br=Ae((ot,Ne)=>{var Se=Dr(),Oe=Se({}.toString),ee=Se("".slice);Ne.exports=function(V){return ee(Oe(V),8,-1)}}),Zr=Ae((ot,Ne)=>{var Se=Dr(),Oe=hr(),ee=Br(),V=Object,W=Se("".split);Ne.exports=Oe(function(){return!V("z").propertyIsEnumerable(0)})?function(Z){return ee(Z)=="String"?W(Z,""):V(Z)}:V}),nn=Ae((ot,Ne)=>{Ne.exports=function(Se){return Se==null}}),qn=Ae((ot,Ne)=>{var Se=nn(),Oe=TypeError;Ne.exports=function(ee){if(Se(ee))throw Oe("Can't call method on "+ee);return ee}}),dn=Ae((ot,Ne)=>{var Se=Zr(),Oe=qn();Ne.exports=function(ee){return Se(Oe(ee))}}),Vn=Ae((ot,Ne)=>{var Se=typeof document=="object"&&document.all,Oe=typeof Se>"u"&&Se!==void 0;Ne.exports={all:Se,IS_HTMLDDA:Oe}}),dr=Ae((ot,Ne)=>{var Se=Vn(),Oe=Se.all;Ne.exports=Se.IS_HTMLDDA?function(ee){return typeof ee=="function"||ee===Oe}:function(ee){return typeof ee=="function"}}),Or=Ae((ot,Ne)=>{var Se=dr(),Oe=Vn(),ee=Oe.all;Ne.exports=Oe.IS_HTMLDDA?function(V){return typeof V=="object"?V!==null:Se(V)||V===ee}:function(V){return typeof V=="object"?V!==null:Se(V)}}),un=Ae((ot,Ne)=>{var Se=Yt(),Oe=dr(),ee=function(V){return Oe(V)?V:void 0};Ne.exports=function(V,W){return arguments.length<2?ee(Se[V]):Se[V]&&Se[V][W]}}),Un=Ae((ot,Ne)=>{var Se=Dr();Ne.exports=Se({}.isPrototypeOf)}),ii=Ae((ot,Ne)=>{var Se=un();Ne.exports=Se("navigator","userAgent")||""}),si=Ae((ot,Ne)=>{var Se=Yt(),Oe=ii(),ee=Se.process,V=Se.Deno,W=ee&&ee.versions||V&&V.version,Z=W&&W.v8,Y,ne;Z&&(Y=Z.split("."),ne=Y[0]>0&&Y[0]<4?1:+(Y[0]+Y[1])),!ne&&Oe&&(Y=Oe.match(/Edge\/(\d+)/),(!Y||Y[1]>=74)&&(Y=Oe.match(/Chrome\/(\d+)/),Y&&(ne=+Y[1]))),Ne.exports=ne}),Gn=Ae((ot,Ne)=>{var Se=si(),Oe=hr();Ne.exports=!!Object.getOwnPropertySymbols&&!Oe(function(){var ee=Symbol();return!String(ee)||!(Object(ee)instanceof Symbol)||!Symbol.sham&&Se&&Se<41})}),Jn=Ae((ot,Ne)=>{var Se=Gn();Ne.exports=Se&&!Symbol.sham&&typeof Symbol.iterator=="symbol"}),Xn=Ae((ot,Ne)=>{var Se=un(),Oe=dr(),ee=Un(),V=Jn(),W=Object;Ne.exports=V?function(Z){return typeof Z=="symbol"}:function(Z){var Y=Se("Symbol");return Oe(Y)&&ee(Y.prototype,W(Z))}}),fn=Ae((ot,Ne)=>{var Se=String;Ne.exports=function(Oe){try{return Se(Oe)}catch{return"Object"}}}),sn=Ae((ot,Ne)=>{var Se=dr(),Oe=fn(),ee=TypeError;Ne.exports=function(V){if(Se(V))return V;throw ee(Oe(V)+" is not a function")}}),mn=Ae((ot,Ne)=>{var Se=sn(),Oe=nn();Ne.exports=function(ee,V){var W=ee[V];return Oe(W)?void 0:Se(W)}}),ai=Ae((ot,Ne)=>{var Se=gr(),Oe=dr(),ee=Or(),V=TypeError;Ne.exports=function(W,Z){var Y,ne;if(Z==="string"&&Oe(Y=W.toString)&&!ee(ne=Se(Y,W))||Oe(Y=W.valueOf)&&!ee(ne=Se(Y,W))||Z!=="string"&&Oe(Y=W.toString)&&!ee(ne=Se(Y,W)))return ne;throw V("Can't convert object to primitive value")}}),oi=Ae((ot,Ne)=>{Ne.exports=!1}),hn=Ae((ot,Ne)=>{var Se=Yt(),Oe=Object.defineProperty;Ne.exports=function(ee,V){try{Oe(Se,ee,{value:V,configurable:!0,writable:!0})}catch{Se[ee]=V}return V}}),gn=Ae((ot,Ne)=>{var Se=Yt(),Oe=hn(),ee="__core-js_shared__",V=Se[ee]||Oe(ee,{});Ne.exports=V}),Wn=Ae((ot,Ne)=>{var Se=oi(),Oe=gn();(Ne.exports=function(ee,V){return Oe[ee]||(Oe[ee]=V!==void 0?V:{})})("versions",[]).push({version:"3.26.1",mode:Se?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.1/LICENSE",source:"https://github.com/zloirock/core-js"})}),Sn=Ae((ot,Ne)=>{var Se=qn(),Oe=Object;Ne.exports=function(ee){return Oe(Se(ee))}}),kr=Ae((ot,Ne)=>{var Se=Dr(),Oe=Sn(),ee=Se({}.hasOwnProperty);Ne.exports=Object.hasOwn||function(V,W){return ee(Oe(V),W)}}),zn=Ae((ot,Ne)=>{var Se=Dr(),Oe=0,ee=Math.random(),V=Se(1 .toString);Ne.exports=function(W){return"Symbol("+(W===void 0?"":W)+")_"+V(++Oe+ee,36)}}),$r=Ae((ot,Ne)=>{var Se=Yt(),Oe=Wn(),ee=kr(),V=zn(),W=Gn(),Z=Jn(),Y=Oe("wks"),ne=Se.Symbol,Fe=ne&&ne.for,je=Z?ne:ne&&ne.withoutSetter||V;Ne.exports=function(he){if(!ee(Y,he)||!(W||typeof Y[he]=="string")){var qe="Symbol."+he;W&&ee(ne,he)?Y[he]=ne[he]:Z&&Fe?Y[he]=Fe(qe):Y[he]=je(qe)}return Y[he]}}),li=Ae((ot,Ne)=>{var Se=gr(),Oe=Or(),ee=Xn(),V=mn(),W=ai(),Z=$r(),Y=TypeError,ne=Z("toPrimitive");Ne.exports=function(Fe,je){if(!Oe(Fe)||ee(Fe))return Fe;var he=V(Fe,ne),qe;if(he){if(je===void 0&&(je="default"),qe=Se(he,Fe,je),!Oe(qe)||ee(qe))return qe;throw Y("Can't convert object to primitive value")}return je===void 0&&(je="number"),W(Fe,je)}}),yn=Ae((ot,Ne)=>{var Se=li(),Oe=Xn();Ne.exports=function(ee){var V=Se(ee,"string");return Oe(V)?V:V+""}}),pi=Ae((ot,Ne)=>{var Se=Yt(),Oe=Or(),ee=Se.document,V=Oe(ee)&&Oe(ee.createElement);Ne.exports=function(W){return V?ee.createElement(W):{}}}),Hn=Ae((ot,Ne)=>{var Se=br(),Oe=hr(),ee=pi();Ne.exports=!Se&&!Oe(function(){return Object.defineProperty(ee("div"),"a",{get:function(){return 7}}).a!=7})}),Yn=Ae(ot=>{var Ne=br(),Se=gr(),Oe=Dn(),ee=Lr(),V=dn(),W=yn(),Z=kr(),Y=Hn(),ne=Object.getOwnPropertyDescriptor;ot.f=Ne?ne:function(Fe,je){if(Fe=V(Fe),je=W(je),Y)try{return ne(Fe,je)}catch{}if(Z(Fe,je))return ee(!Se(Oe.f,Fe,je),Fe[je])}}),ci=Ae((ot,Ne)=>{var Se=br(),Oe=hr();Ne.exports=Se&&Oe(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!=42})}),Wr=Ae((ot,Ne)=>{var Se=Or(),Oe=String,ee=TypeError;Ne.exports=function(V){if(Se(V))return V;throw ee(Oe(V)+" is not an object")}}),en=Ae(ot=>{var Ne=br(),Se=Hn(),Oe=ci(),ee=Wr(),V=yn(),W=TypeError,Z=Object.defineProperty,Y=Object.getOwnPropertyDescriptor,ne="enumerable",Fe="configurable",je="writable";ot.f=Ne?Oe?function(he,qe,et){if(ee(he),qe=V(qe),ee(et),typeof he=="function"&&qe==="prototype"&&"value"in et&&je in et&&!et[je]){var Ze=Y(he,qe);Ze&&Ze[je]&&(he[qe]=et.value,et={configurable:Fe in et?et[Fe]:Ze[Fe],enumerable:ne in et?et[ne]:Ze[ne],writable:!1})}return Z(he,qe,et)}:Z:function(he,qe,et){if(ee(he),qe=V(qe),ee(et),Se)try{return Z(he,qe,et)}catch{}if("get"in et||"set"in et)throw W("Accessors not supported");return"value"in et&&(he[qe]=et.value),he}}),Kn=Ae((ot,Ne)=>{var Se=br(),Oe=en(),ee=Lr();Ne.exports=Se?function(V,W,Z){return Oe.f(V,W,ee(1,Z))}:function(V,W,Z){return V[W]=Z,V}}),Di=Ae((ot,Ne)=>{var Se=br(),Oe=kr(),ee=Function.prototype,V=Se&&Object.getOwnPropertyDescriptor,W=Oe(ee,"name"),Z=W&&(function(){}).name==="something",Y=W&&(!Se||Se&&V(ee,"name").configurable);Ne.exports={EXISTS:W,PROPER:Z,CONFIGURABLE:Y}}),Qn=Ae((ot,Ne)=>{var Se=Dr(),Oe=dr(),ee=gn(),V=Se(Function.toString);Oe(ee.inspectSource)||(ee.inspectSource=function(W){return V(W)}),Ne.exports=ee.inspectSource}),di=Ae((ot,Ne)=>{var Se=Yt(),Oe=dr(),ee=Se.WeakMap;Ne.exports=Oe(ee)&&/native code/.test(String(ee))}),fi=Ae((ot,Ne)=>{var Se=Wn(),Oe=zn(),ee=Se("keys");Ne.exports=function(V){return ee[V]||(ee[V]=Oe(V))}}),Zn=Ae((ot,Ne)=>{Ne.exports={}}),mi=Ae((ot,Ne)=>{var Se=di(),Oe=Yt(),ee=Or(),V=Kn(),W=kr(),Z=gn(),Y=fi(),ne=Zn(),Fe="Object already initialized",je=Oe.TypeError,he=Oe.WeakMap,qe,et,Ze,nt=function(At){return Ze(At)?et(At):qe(At,{})},rt=function(At){return function(Lt){var qt;if(!ee(Lt)||(qt=et(Lt)).type!==At)throw je("Incompatible receiver, "+At+" required");return qt}};Se||Z.state?($=Z.state||(Z.state=new he),$.get=$.get,$.has=$.has,$.set=$.set,qe=function(At,Lt){if($.has(At))throw je(Fe);return Lt.facade=At,$.set(At,Lt),Lt},et=function(At){return $.get(At)||{}},Ze=function(At){return $.has(At)}):(Ft=Y("state"),ne[Ft]=!0,qe=function(At,Lt){if(W(At,Ft))throw je(Fe);return Lt.facade=At,V(At,Ft,Lt),Lt},et=function(At){return W(At,Ft)?At[Ft]:{}},Ze=function(At){return W(At,Ft)});var $,Ft;Ne.exports={set:qe,get:et,has:Ze,enforce:nt,getterFor:rt}}),gu=Ae((ot,Ne)=>{var Se=hr(),Oe=dr(),ee=kr(),V=br(),W=Di().CONFIGURABLE,Z=Qn(),Y=mi(),ne=Y.enforce,Fe=Y.get,je=Object.defineProperty,he=V&&!Se(function(){return je(function(){},"length",{value:8}).length!==8}),qe=String(String).split("String"),et=Ne.exports=function(Ze,nt,rt){String(nt).slice(0,7)==="Symbol("&&(nt="["+String(nt).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),rt&&rt.getter&&(nt="get "+nt),rt&&rt.setter&&(nt="set "+nt),(!ee(Ze,"name")||W&&Ze.name!==nt)&&(V?je(Ze,"name",{value:nt,configurable:!0}):Ze.name=nt),he&&rt&&ee(rt,"arity")&&Ze.length!==rt.arity&&je(Ze,"length",{value:rt.arity});try{rt&&ee(rt,"constructor")&&rt.constructor?V&&je(Ze,"prototype",{writable:!1}):Ze.prototype&&(Ze.prototype=void 0)}catch{}var $=ne(Ze);return ee($,"source")||($.source=qe.join(typeof nt=="string"?nt:"")),Ze};Function.prototype.toString=et(function(){return Oe(this)&&Fe(this).source||Z(this)},"toString")}),hi=Ae((ot,Ne)=>{var Se=dr(),Oe=en(),ee=gu(),V=hn();Ne.exports=function(W,Z,Y,ne){ne||(ne={});var Fe=ne.enumerable,je=ne.name!==void 0?ne.name:Z;if(Se(Y)&&ee(Y,je,ne),ne.global)Fe?W[Z]=Y:V(Z,Y);else{try{ne.unsafe?W[Z]&&(Fe=!0):delete W[Z]}catch{}Fe?W[Z]=Y:Oe.f(W,Z,{value:Y,enumerable:!1,configurable:!ne.nonConfigurable,writable:!ne.nonWritable})}return W}}),gi=Ae((ot,Ne)=>{var Se=Math.ceil,Oe=Math.floor;Ne.exports=Math.trunc||function(ee){var V=+ee;return(V>0?Oe:Se)(V)}}),xn=Ae((ot,Ne)=>{var Se=gi();Ne.exports=function(Oe){var ee=+Oe;return ee!==ee||ee===0?0:Se(ee)}}),yi=Ae((ot,Ne)=>{var Se=xn(),Oe=Math.max,ee=Math.min;Ne.exports=function(V,W){var Z=Se(V);return Z<0?Oe(Z+W,0):ee(Z,W)}}),Ei=Ae((ot,Ne)=>{var Se=xn(),Oe=Math.min;Ne.exports=function(ee){return ee>0?Oe(Se(ee),9007199254740991):0}}),tn=Ae((ot,Ne)=>{var Se=Ei();Ne.exports=function(Oe){return Se(Oe.length)}}),Ci=Ae((ot,Ne)=>{var Se=dn(),Oe=yi(),ee=tn(),V=function(W){return function(Z,Y,ne){var Fe=Se(Z),je=ee(Fe),he=Oe(ne,je),qe;if(W&&Y!=Y){for(;je>he;)if(qe=Fe[he++],qe!=qe)return!0}else for(;je>he;he++)if((W||he in Fe)&&Fe[he]===Y)return W||he||0;return!W&&-1}};Ne.exports={includes:V(!0),indexOf:V(!1)}}),Fi=Ae((ot,Ne)=>{var Se=Dr(),Oe=kr(),ee=dn(),V=Ci().indexOf,W=Zn(),Z=Se([].push);Ne.exports=function(Y,ne){var Fe=ee(Y),je=0,he=[],qe;for(qe in Fe)!Oe(W,qe)&&Oe(Fe,qe)&&Z(he,qe);for(;ne.length>je;)Oe(Fe,qe=ne[je++])&&(~V(he,qe)||Z(he,qe));return he}}),Ai=Ae((ot,Ne)=>{Ne.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]}),vi=Ae(ot=>{var Ne=Fi(),Se=Ai(),Oe=Se.concat("length","prototype");ot.f=Object.getOwnPropertyNames||function(ee){return Ne(ee,Oe)}}),bi=Ae(ot=>{ot.f=Object.getOwnPropertySymbols}),Si=Ae((ot,Ne)=>{var Se=un(),Oe=Dr(),ee=vi(),V=bi(),W=Wr(),Z=Oe([].concat);Ne.exports=Se("Reflect","ownKeys")||function(Y){var ne=ee.f(W(Y)),Fe=V.f;return Fe?Z(ne,Fe(Y)):ne}}),xi=Ae((ot,Ne)=>{var Se=kr(),Oe=Si(),ee=Yn(),V=en();Ne.exports=function(W,Z,Y){for(var ne=Oe(Z),Fe=V.f,je=ee.f,he=0;he{var Se=hr(),Oe=dr(),ee=/#|\.prototype\./,V=function(Fe,je){var he=Z[W(Fe)];return he==ne?!0:he==Y?!1:Oe(je)?Se(je):!!je},W=V.normalize=function(Fe){return String(Fe).replace(ee,".").toLowerCase()},Z=V.data={},Y=V.NATIVE="N",ne=V.POLYFILL="P";Ne.exports=V}),an=Ae((ot,Ne)=>{var Se=Yt(),Oe=Yn().f,ee=Kn(),V=hi(),W=hn(),Z=xi(),Y=Ti();Ne.exports=function(ne,Fe){var je=ne.target,he=ne.global,qe=ne.stat,et,Ze,nt,rt,$,Ft;if(he?Ze=Se:qe?Ze=Se[je]||W(je,{}):Ze=(Se[je]||{}).prototype,Ze)for(nt in Fe){if($=Fe[nt],ne.dontCallGetSet?(Ft=Oe(Ze,nt),rt=Ft&&Ft.value):rt=Ze[nt],et=Y(he?nt:je+(qe?".":"#")+nt,ne.forced),!et&&rt!==void 0){if(typeof $==typeof rt)continue;Z($,rt)}(ne.sham||rt&&rt.sham)&&ee($,"sham",!0),V(Ze,nt,$,ne)}}}),yu=Ae(()=>{var ot=an(),Ne=Yt();ot({global:!0,forced:Ne.globalThis!==Ne},{globalThis:Ne})}),Bi=Ae(()=>{yu()}),Eu=Ae((ot,Ne)=>{var Se=Br();Ne.exports=Array.isArray||function(Oe){return Se(Oe)=="Array"}}),Cu=Ae((ot,Ne)=>{var Se=TypeError,Oe=9007199254740991;Ne.exports=function(ee){if(ee>Oe)throw Se("Maximum allowed index exceeded");return ee}}),Fu=Ae((ot,Ne)=>{var Se=Br(),Oe=Dr();Ne.exports=function(ee){if(Se(ee)==="Function")return Oe(ee)}}),Au=Ae((ot,Ne)=>{var Se=Fu(),Oe=sn(),ee=Hr(),V=Se(Se.bind);Ne.exports=function(W,Z){return Oe(W),Z===void 0?W:ee?V(W,Z):function(){return W.apply(Z,arguments)}}}),vu=Ae((ot,Ne)=>{var Se=Eu(),Oe=tn(),ee=Cu(),V=Au(),W=function(Z,Y,ne,Fe,je,he,qe,et){for(var Ze=je,nt=0,rt=qe?V(qe,et):!1,$,Ft;nt0&&Se($)?(Ft=Oe($),Ze=W(Z,Y,$,Ft,Ze,he-1)-1):(ee(Ze+1),Z[Ze]=$),Ze++),nt++;return Ze};Ne.exports=W}),wi=Ae((ot,Ne)=>{var Se=$r(),Oe=Se("toStringTag"),ee={};ee[Oe]="z",Ne.exports=String(ee)==="[object z]"}),bu=Ae((ot,Ne)=>{var Se=wi(),Oe=dr(),ee=Br(),V=$r(),W=V("toStringTag"),Z=Object,Y=ee(function(){return arguments}())=="Arguments",ne=function(Fe,je){try{return Fe[je]}catch{}};Ne.exports=Se?ee:function(Fe){var je,he,qe;return Fe===void 0?"Undefined":Fe===null?"Null":typeof(he=ne(je=Z(Fe),W))=="string"?he:Y?ee(je):(qe=ee(je))=="Object"&&Oe(je.callee)?"Arguments":qe}}),Su=Ae((ot,Ne)=>{var Se=Dr(),Oe=hr(),ee=dr(),V=bu(),W=un(),Z=Qn(),Y=function(){},ne=[],Fe=W("Reflect","construct"),je=/^\s*(?:class|function)\b/,he=Se(je.exec),qe=!je.exec(Y),et=function(nt){if(!ee(nt))return!1;try{return Fe(Y,ne,nt),!0}catch{return!1}},Ze=function(nt){if(!ee(nt))return!1;switch(V(nt)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return qe||!!he(je,Z(nt))}catch{return!0}};Ze.sham=!0,Ne.exports=!Fe||Oe(function(){var nt;return et(et.call)||!et(Object)||!et(function(){nt=!0})||nt})?Ze:et}),Ni=Ae((ot,Ne)=>{var Se=Eu(),Oe=Su(),ee=Or(),V=$r(),W=V("species"),Z=Array;Ne.exports=function(Y){var ne;return Se(Y)&&(ne=Y.constructor,Oe(ne)&&(ne===Z||Se(ne.prototype))?ne=void 0:ee(ne)&&(ne=ne[W],ne===null&&(ne=void 0))),ne===void 0?Z:ne}}),xu=Ae((ot,Ne)=>{var Se=Ni();Ne.exports=function(Oe,ee){return new(Se(Oe))(ee===0?0:ee)}}),_i=Ae(()=>{var ot=an(),Ne=vu(),Se=sn(),Oe=Sn(),ee=tn(),V=xu();ot({target:"Array",proto:!0},{flatMap:function(W){var Z=Oe(this),Y=ee(Z),ne;return Se(W),ne=V(Z,0),ne.length=Ne(ne,Z,Z,Y,0,1,W,arguments.length>1?arguments[1]:void 0),ne}})}),eu=Ae((ot,Ne)=>{Ne.exports={}}),ki=Ae((ot,Ne)=>{var Se=$r(),Oe=eu(),ee=Se("iterator"),V=Array.prototype;Ne.exports=function(W){return W!==void 0&&(Oe.Array===W||V[ee]===W)}}),Tu=Ae((ot,Ne)=>{var Se=bu(),Oe=mn(),ee=nn(),V=eu(),W=$r(),Z=W("iterator");Ne.exports=function(Y){if(!ee(Y))return Oe(Y,Z)||Oe(Y,"@@iterator")||V[Se(Y)]}}),Pi=Ae((ot,Ne)=>{var Se=gr(),Oe=sn(),ee=Wr(),V=fn(),W=Tu(),Z=TypeError;Ne.exports=function(Y,ne){var Fe=arguments.length<2?W(Y):ne;if(Oe(Fe))return ee(Se(Fe,Y));throw Z(V(Y)+" is not iterable")}}),Ii=Ae((ot,Ne)=>{var Se=gr(),Oe=Wr(),ee=mn();Ne.exports=function(V,W,Z){var Y,ne;Oe(V);try{if(Y=ee(V,"return"),!Y){if(W==="throw")throw Z;return Z}Y=Se(Y,V)}catch(Fe){ne=!0,Y=Fe}if(W==="throw")throw Z;if(ne)throw Y;return Oe(Y),Z}}),ji=Ae((ot,Ne)=>{var Se=Au(),Oe=gr(),ee=Wr(),V=fn(),W=ki(),Z=tn(),Y=Un(),ne=Pi(),Fe=Tu(),je=Ii(),he=TypeError,qe=function(Ze,nt){this.stopped=Ze,this.result=nt},et=qe.prototype;Ne.exports=function(Ze,nt,rt){var $=rt&&rt.that,Ft=!!(rt&&rt.AS_ENTRIES),At=!!(rt&&rt.IS_RECORD),Lt=!!(rt&&rt.IS_ITERATOR),qt=!!(rt&&rt.INTERRUPTED),Zt=Se(nt,$),ue,yr,Pr,zr,fr,Rr,mr,rn=function(Fr){return ue&&je(ue,"normal",Fr),new qe(!0,Fr)},wr=function(Fr){return Ft?(ee(Fr),qt?Zt(Fr[0],Fr[1],rn):Zt(Fr[0],Fr[1])):qt?Zt(Fr,rn):Zt(Fr)};if(At)ue=Ze.iterator;else if(Lt)ue=Ze;else{if(yr=Fe(Ze),!yr)throw he(V(Ze)+" is not iterable");if(W(yr)){for(Pr=0,zr=Z(Ze);zr>Pr;Pr++)if(fr=wr(Ze[Pr]),fr&&Y(et,fr))return fr;return new qe(!1)}ue=ne(Ze,yr)}for(Rr=At?Ze.next:ue.next;!(mr=Oe(Rr,ue)).done;){try{fr=wr(mr.value)}catch(Fr){je(ue,"throw",Fr)}if(typeof fr=="object"&&fr&&Y(et,fr))return fr}return new qe(!1)}}),Li=Ae((ot,Ne)=>{var Se=yn(),Oe=en(),ee=Lr();Ne.exports=function(V,W,Z){var Y=Se(W);Y in V?Oe.f(V,Y,ee(0,Z)):V[Y]=Z}}),Oi=Ae(()=>{var ot=an(),Ne=ji(),Se=Li();ot({target:"Object",stat:!0},{fromEntries:function(Oe){var ee={};return Ne(Oe,function(V,W){Se(ee,V,W)},{AS_ENTRIES:!0}),ee}})}),$i=Ae((ot,Ne)=>{var Se=["cliName","cliCategory","cliDescription"];function Oe(L,re){if(L==null)return{};var ge=ee(L,re),Ee,Pe;if(Object.getOwnPropertySymbols){var ie=Object.getOwnPropertySymbols(L);for(Pe=0;Pe=0)&&Object.prototype.propertyIsEnumerable.call(L,Ee)&&(ge[Ee]=L[Ee])}return ge}function ee(L,re){if(L==null)return{};var ge={},Ee=Object.keys(L),Pe,ie;for(ie=0;ie=0)&&(ge[Pe]=L[Pe]);return ge}Bi(),_i(),Oi();var V=Object.create,W=Object.defineProperty,Z=Object.getOwnPropertyDescriptor,Y=Object.getOwnPropertyNames,ne=Object.getPrototypeOf,Fe=Object.prototype.hasOwnProperty,je=(L,re)=>function(){return L&&(re=(0,L[Y(L)[0]])(L=0)),re},he=(L,re)=>function(){return re||(0,L[Y(L)[0]])((re={exports:{}}).exports,re),re.exports},qe=(L,re)=>{for(var ge in re)W(L,ge,{get:re[ge],enumerable:!0})},et=(L,re,ge,Ee)=>{if(re&&typeof re=="object"||typeof re=="function")for(let Pe of Y(re))!Fe.call(L,Pe)&&Pe!==ge&&W(L,Pe,{get:()=>re[Pe],enumerable:!(Ee=Z(re,Pe))||Ee.enumerable});return L},Ze=(L,re,ge)=>(ge=L!=null?V(ne(L)):{},et(re||!L||!L.__esModule?W(ge,"default",{value:L,enumerable:!0}):ge,L)),nt=L=>et(W({},"__esModule",{value:!0}),L),rt,$=je({""(){rt={env:{},argv:[]}}}),Ft=he({"node_modules/angular-html-parser/lib/compiler/src/chars.js"(L){$(),Object.defineProperty(L,"__esModule",{value:!0}),L.$EOF=0,L.$BSPACE=8,L.$TAB=9,L.$LF=10,L.$VTAB=11,L.$FF=12,L.$CR=13,L.$SPACE=32,L.$BANG=33,L.$DQ=34,L.$HASH=35,L.$$=36,L.$PERCENT=37,L.$AMPERSAND=38,L.$SQ=39,L.$LPAREN=40,L.$RPAREN=41,L.$STAR=42,L.$PLUS=43,L.$COMMA=44,L.$MINUS=45,L.$PERIOD=46,L.$SLASH=47,L.$COLON=58,L.$SEMICOLON=59,L.$LT=60,L.$EQ=61,L.$GT=62,L.$QUESTION=63,L.$0=48,L.$7=55,L.$9=57,L.$A=65,L.$E=69,L.$F=70,L.$X=88,L.$Z=90,L.$LBRACKET=91,L.$BACKSLASH=92,L.$RBRACKET=93,L.$CARET=94,L.$_=95,L.$a=97,L.$b=98,L.$e=101,L.$f=102,L.$n=110,L.$r=114,L.$t=116,L.$u=117,L.$v=118,L.$x=120,L.$z=122,L.$LBRACE=123,L.$BAR=124,L.$RBRACE=125,L.$NBSP=160,L.$PIPE=124,L.$TILDA=126,L.$AT=64,L.$BT=96;function re(Ue){return Ue>=L.$TAB&&Ue<=L.$SPACE||Ue==L.$NBSP}L.isWhitespace=re;function ge(Ue){return L.$0<=Ue&&Ue<=L.$9}L.isDigit=ge;function Ee(Ue){return Ue>=L.$a&&Ue<=L.$z||Ue>=L.$A&&Ue<=L.$Z}L.isAsciiLetter=Ee;function Pe(Ue){return Ue>=L.$a&&Ue<=L.$f||Ue>=L.$A&&Ue<=L.$F||ge(Ue)}L.isAsciiHexDigit=Pe;function ie(Ue){return Ue===L.$LF||Ue===L.$CR}L.isNewLine=ie;function de(Ue){return L.$0<=Ue&&Ue<=L.$7}L.isOctalDigit=de}}),At=he({"node_modules/angular-html-parser/lib/compiler/src/aot/static_symbol.js"(L){$(),Object.defineProperty(L,"__esModule",{value:!0});var re=class{constructor(Ee,Pe,ie){this.filePath=Ee,this.name=Pe,this.members=ie}assertNoMembers(){if(this.members.length)throw new Error(`Illegal state: symbol without members expected, but got ${JSON.stringify(this)}.`)}};L.StaticSymbol=re;var ge=class{constructor(){this.cache=new Map}get(Ee,Pe,ie){ie=ie||[];let de=ie.length?`.${ie.join(".")}`:"",Ue=`"${Ee}".${Pe}${de}`,Ge=this.cache.get(Ue);return Ge||(Ge=new re(Ee,Pe,ie),this.cache.set(Ue,Ge)),Ge}};L.StaticSymbolCache=ge}}),Lt=he({"node_modules/angular-html-parser/lib/compiler/src/util.js"(L){$(),Object.defineProperty(L,"__esModule",{value:!0});var re=/-+([a-z0-9])/g;function ge(le){return le.replace(re,function(){for(var We=arguments.length,Me=new Array(We),at=0;atde(Me,this,We))}visitStringMap(le,We){let Me={};return Object.keys(le).forEach(at=>{Me[at]=de(le[at],this,We)}),Me}visitPrimitive(le,We){return le}visitOther(le,We){return le}};L.ValueTransformer=gt,L.SyncAsync={assertSync:le=>{if(st(le))throw new Error("Illegal state: value cannot be a promise");return le},then:(le,We)=>st(le)?le.then(We):We(le),all:le=>le.some(st)?Promise.all(le):le};function ce(le){throw new Error(`Internal Error: ${le}`)}L.error=ce;function ve(le,We){let Me=Error(le);return Me[Ve]=!0,We&&(Me[He]=We),Me}L.syntaxError=ve;var Ve="ngSyntaxError",He="ngParseErrors";function Je(le){return le[Ve]}L.isSyntaxError=Je;function Qe(le){return le[He]||[]}L.getParseErrors=Qe;function yt(le){return le.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}L.escapeRegExp=yt;var _t=Object.getPrototypeOf({});function ct(le){return typeof le=="object"&&le!==null&&Object.getPrototypeOf(le)===_t}function kt(le){let We="";for(let Me=0;Me=55296&&at<=56319&&le.length>Me+1){let Jt=le.charCodeAt(Me+1);Jt>=56320&&Jt<=57343&&(Me++,at=(at-55296<<10)+Jt-56320+65536)}at<=127?We+=String.fromCharCode(at):at<=2047?We+=String.fromCharCode(at>>6&31|192,at&63|128):at<=65535?We+=String.fromCharCode(at>>12|224,at>>6&63|128,at&63|128):at<=2097151&&(We+=String.fromCharCode(at>>18&7|240,at>>12&63|128,at>>6&63|128,at&63|128))}return We}L.utf8Encode=kt;function $t(le){if(typeof le=="string")return le;if(le instanceof Array)return"["+le.map($t).join(", ")+"]";if(le==null)return""+le;if(le.overriddenName)return`${le.overriddenName}`;if(le.name)return`${le.name}`;if(!le.toString)return"object";let We=le.toString();if(We==null)return""+We;let Me=We.indexOf(` `);return Me===-1?We:We.substring(0,Me)}L.stringify=$t;function ir(le){return typeof le=="function"&&le.hasOwnProperty("__forward_ref__")?le():le}L.resolveForwardRef=ir;function st(le){return!!le&&typeof le.then=="function"}L.isPromise=st;var Ot=class{constructor(le){this.full=le;let We=le.split(".");this.major=We[0],this.minor=We[1],this.patch=We.slice(2).join(".")}};L.Version=Ot;var Vt=typeof window<"u"&&window,Ut=typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self,rr=typeof globalThis<"u"&&globalThis,z=rr||Vt||Ut;L.global=z}}),qt=he({"node_modules/angular-html-parser/lib/compiler/src/compile_metadata.js"(L){$(),Object.defineProperty(L,"__esModule",{value:!0});var re=At(),ge=Lt(),Ee=/^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\)))|(\@[-\w]+)$/;function Pe(Me){return Me.replace(/\W/g,"_")}L.sanitizeIdentifier=Pe;var ie=0;function de(Me){if(!Me||!Me.reference)return null;let at=Me.reference;if(at instanceof re.StaticSymbol)return at.name;if(at.__anonymousType)return at.__anonymousType;let Jt=ge.stringify(at);return Jt.indexOf("(")>=0?(Jt=`anonymous_${ie++}`,at.__anonymousType=Jt):Jt=Pe(Jt),Jt}L.identifierName=de;function Ue(Me){let at=Me.reference;return at instanceof re.StaticSymbol?at.filePath:`./${ge.stringify(at)}`}L.identifierModuleUrl=Ue;function Ge(Me,at){return`View_${de({reference:Me})}_${at}`}L.viewClassName=Ge;function gt(Me){return`RenderType_${de({reference:Me})}`}L.rendererTypeName=gt;function ce(Me){return`HostView_${de({reference:Me})}`}L.hostViewClassName=ce;function ve(Me){return`${de({reference:Me})}NgFactory`}L.componentFactoryName=ve;var Ve;(function(Me){Me[Me.Pipe=0]="Pipe",Me[Me.Directive=1]="Directive",Me[Me.NgModule=2]="NgModule",Me[Me.Injectable=3]="Injectable"})(Ve=L.CompileSummaryKind||(L.CompileSummaryKind={}));function He(Me){return Me.value!=null?Pe(Me.value):de(Me.identifier)}L.tokenName=He;function Je(Me){return Me.identifier!=null?Me.identifier.reference:Me.value}L.tokenReference=Je;var Qe=class{constructor(){let{moduleUrl:Me,styles:at,styleUrls:Jt}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.moduleUrl=Me||null,this.styles=st(at),this.styleUrls=st(Jt)}};L.CompileStylesheetMetadata=Qe;var yt=class{constructor(Me){let{encapsulation:at,template:Jt,templateUrl:er,htmlAst:Ar,styles:Er,styleUrls:_r,externalStylesheets:xr,animations:Ir,ngContentSelectors:Mr,interpolation:or,isInline:lt,preserveWhitespaces:mt}=Me;if(this.encapsulation=at,this.template=Jt,this.templateUrl=er,this.htmlAst=Ar,this.styles=st(Er),this.styleUrls=st(_r),this.externalStylesheets=st(xr),this.animations=Ir?Vt(Ir):[],this.ngContentSelectors=Mr||[],or&&or.length!=2)throw new Error("'interpolation' should have a start and an end symbol.");this.interpolation=or,this.isInline=lt,this.preserveWhitespaces=mt}toSummary(){return{ngContentSelectors:this.ngContentSelectors,encapsulation:this.encapsulation,styles:this.styles,animations:this.animations}}};L.CompileTemplateMetadata=yt;var _t=class{static create(Me){let{isHost:at,type:Jt,isComponent:er,selector:Ar,exportAs:Er,changeDetection:_r,inputs:xr,outputs:Ir,host:Mr,providers:or,viewProviders:lt,queries:mt,guards:St,viewQueries:xt,entryComponents:Kt,template:sr,componentViewType:lr,rendererType:Qt,componentFactory:Kr}=Me,Pn={},In={},Hu={};Mr!=null&&Object.keys(Mr).forEach(vr=>{let Qr=Mr[vr],cn=vr.match(Ee);cn===null?Hu[vr]=Qr:cn[1]!=null?In[cn[1]]=Qr:cn[2]!=null&&(Pn[cn[2]]=Qr)});let Yu={};xr==null||xr.forEach(vr=>{let Qr=ge.splitAtColon(vr,[vr,vr]);Yu[Qr[0]]=Qr[1]});let Ku={};return Ir==null||Ir.forEach(vr=>{let Qr=ge.splitAtColon(vr,[vr,vr]);Ku[Qr[0]]=Qr[1]}),new _t({isHost:at,type:Jt,isComponent:!!er,selector:Ar,exportAs:Er,changeDetection:_r,inputs:Yu,outputs:Ku,hostListeners:Pn,hostProperties:In,hostAttributes:Hu,providers:or,viewProviders:lt,queries:mt,guards:St,viewQueries:xt,entryComponents:Kt,template:sr,componentViewType:lr,rendererType:Qt,componentFactory:Kr})}constructor(Me){let{isHost:at,type:Jt,isComponent:er,selector:Ar,exportAs:Er,changeDetection:_r,inputs:xr,outputs:Ir,hostListeners:Mr,hostProperties:or,hostAttributes:lt,providers:mt,viewProviders:St,queries:xt,guards:Kt,viewQueries:sr,entryComponents:lr,template:Qt,componentViewType:Kr,rendererType:Pn,componentFactory:In}=Me;this.isHost=!!at,this.type=Jt,this.isComponent=er,this.selector=Ar,this.exportAs=Er,this.changeDetection=_r,this.inputs=xr,this.outputs=Ir,this.hostListeners=Mr,this.hostProperties=or,this.hostAttributes=lt,this.providers=st(mt),this.viewProviders=st(St),this.queries=st(xt),this.guards=Kt,this.viewQueries=st(sr),this.entryComponents=st(lr),this.template=Qt,this.componentViewType=Kr,this.rendererType=Pn,this.componentFactory=In}toSummary(){return{summaryKind:Ve.Directive,type:this.type,isComponent:this.isComponent,selector:this.selector,exportAs:this.exportAs,inputs:this.inputs,outputs:this.outputs,hostListeners:this.hostListeners,hostProperties:this.hostProperties,hostAttributes:this.hostAttributes,providers:this.providers,viewProviders:this.viewProviders,queries:this.queries,guards:this.guards,viewQueries:this.viewQueries,entryComponents:this.entryComponents,changeDetection:this.changeDetection,template:this.template&&this.template.toSummary(),componentViewType:this.componentViewType,rendererType:this.rendererType,componentFactory:this.componentFactory}}};L.CompileDirectiveMetadata=_t;var ct=class{constructor(Me){let{type:at,name:Jt,pure:er}=Me;this.type=at,this.name=Jt,this.pure=!!er}toSummary(){return{summaryKind:Ve.Pipe,type:this.type,name:this.name,pure:this.pure}}};L.CompilePipeMetadata=ct;var kt=class{};L.CompileShallowModuleMetadata=kt;var $t=class{constructor(Me){let{type:at,providers:Jt,declaredDirectives:er,exportedDirectives:Ar,declaredPipes:Er,exportedPipes:_r,entryComponents:xr,bootstrapComponents:Ir,importedModules:Mr,exportedModules:or,schemas:lt,transitiveModule:mt,id:St}=Me;this.type=at||null,this.declaredDirectives=st(er),this.exportedDirectives=st(Ar),this.declaredPipes=st(Er),this.exportedPipes=st(_r),this.providers=st(Jt),this.entryComponents=st(xr),this.bootstrapComponents=st(Ir),this.importedModules=st(Mr),this.exportedModules=st(or),this.schemas=st(lt),this.id=St||null,this.transitiveModule=mt||null}toSummary(){let Me=this.transitiveModule;return{summaryKind:Ve.NgModule,type:this.type,entryComponents:Me.entryComponents,providers:Me.providers,modules:Me.modules,exportedDirectives:Me.exportedDirectives,exportedPipes:Me.exportedPipes}}};L.CompileNgModuleMetadata=$t;var ir=class{constructor(){this.directivesSet=new Set,this.directives=[],this.exportedDirectivesSet=new Set,this.exportedDirectives=[],this.pipesSet=new Set,this.pipes=[],this.exportedPipesSet=new Set,this.exportedPipes=[],this.modulesSet=new Set,this.modules=[],this.entryComponentsSet=new Set,this.entryComponents=[],this.providers=[]}addProvider(Me,at){this.providers.push({provider:Me,module:at})}addDirective(Me){this.directivesSet.has(Me.reference)||(this.directivesSet.add(Me.reference),this.directives.push(Me))}addExportedDirective(Me){this.exportedDirectivesSet.has(Me.reference)||(this.exportedDirectivesSet.add(Me.reference),this.exportedDirectives.push(Me))}addPipe(Me){this.pipesSet.has(Me.reference)||(this.pipesSet.add(Me.reference),this.pipes.push(Me))}addExportedPipe(Me){this.exportedPipesSet.has(Me.reference)||(this.exportedPipesSet.add(Me.reference),this.exportedPipes.push(Me))}addModule(Me){this.modulesSet.has(Me.reference)||(this.modulesSet.add(Me.reference),this.modules.push(Me))}addEntryComponent(Me){this.entryComponentsSet.has(Me.componentType)||(this.entryComponentsSet.add(Me.componentType),this.entryComponents.push(Me))}};L.TransitiveCompileNgModuleMetadata=ir;function st(Me){return Me||[]}var Ot=class{constructor(Me,at){let{useClass:Jt,useValue:er,useExisting:Ar,useFactory:Er,deps:_r,multi:xr}=at;this.token=Me,this.useClass=Jt||null,this.useValue=er,this.useExisting=Ar,this.useFactory=Er||null,this.dependencies=_r||null,this.multi=!!xr}};L.ProviderMeta=Ot;function Vt(Me){return Me.reduce((at,Jt)=>{let er=Array.isArray(Jt)?Vt(Jt):Jt;return at.concat(er)},[])}L.flatten=Vt;function Ut(Me){return Me.replace(/(\w+:\/\/[\w:-]+)?(\/+)?/,"ng:///")}function rr(Me,at,Jt){let er;return Jt.isInline?at.type.reference instanceof re.StaticSymbol?er=`${at.type.reference.filePath}.${at.type.reference.name}.html`:er=`${de(Me)}/${de(at.type)}.html`:er=Jt.templateUrl,at.type.reference instanceof re.StaticSymbol?er:Ut(er)}L.templateSourceUrl=rr;function z(Me,at){let Jt=Me.moduleUrl.split(/\/\\/g),er=Jt[Jt.length-1];return Ut(`css/${at}${er}.ngstyle.js`)}L.sharedStylesheetJitUrl=z;function le(Me){return Ut(`${de(Me.type)}/module.ngfactory.js`)}L.ngModuleJitUrl=le;function We(Me,at){return Ut(`${de(Me)}/${de(at.type)}.ngfactory.js`)}L.templateJitUrl=We}}),Zt=he({"node_modules/angular-html-parser/lib/compiler/src/parse_util.js"(L){$(),Object.defineProperty(L,"__esModule",{value:!0});var re=Ft(),ge=qt(),Ee=class{constructor(ce,ve,Ve,He){this.file=ce,this.offset=ve,this.line=Ve,this.col=He}toString(){return this.offset!=null?`${this.file.url}@${this.line}:${this.col}`:this.file.url}moveBy(ce){let ve=this.file.content,Ve=ve.length,He=this.offset,Je=this.line,Qe=this.col;for(;He>0&&ce<0;)if(He--,ce++,ve.charCodeAt(He)==re.$LF){Je--;let yt=ve.substr(0,He-1).lastIndexOf(String.fromCharCode(re.$LF));Qe=yt>0?He-yt:He}else Qe--;for(;He0;){let yt=ve.charCodeAt(He);He++,ce--,yt==re.$LF?(Je++,Qe=0):Qe++}return new Ee(this.file,He,Je,Qe)}getContext(ce,ve){let Ve=this.file.content,He=this.offset;if(He!=null){He>Ve.length-1&&(He=Ve.length-1);let Je=He,Qe=0,yt=0;for(;Qe0&&(He--,Qe++,!(Ve[He]==` `&&++yt==ve)););for(Qe=0,yt=0;Qe2&&arguments[2]!==void 0?arguments[2]:null;this.start=ce,this.end=ve,this.details=Ve}toString(){return this.start.file.content.substring(this.start.offset,this.end.offset)}};L.ParseSourceSpan=ie,L.EMPTY_PARSE_LOCATION=new Ee(new Pe("",""),0,0,0),L.EMPTY_SOURCE_SPAN=new ie(L.EMPTY_PARSE_LOCATION,L.EMPTY_PARSE_LOCATION);var de;(function(ce){ce[ce.WARNING=0]="WARNING",ce[ce.ERROR=1]="ERROR"})(de=L.ParseErrorLevel||(L.ParseErrorLevel={}));var Ue=class{constructor(ce,ve){let Ve=arguments.length>2&&arguments[2]!==void 0?arguments[2]:de.ERROR;this.span=ce,this.msg=ve,this.level=Ve}contextualMessage(){let ce=this.span.start.getContext(100,3);return ce?`${this.msg} ("${ce.before}[${de[this.level]} ->]${ce.after}")`:this.msg}toString(){let ce=this.span.details?`, ${this.span.details}`:"";return`${this.contextualMessage()}: ${this.span.start}${ce}`}};L.ParseError=Ue;function Ge(ce,ve){let Ve=ge.identifierModuleUrl(ve),He=Ve!=null?`in ${ce} ${ge.identifierName(ve)} in ${Ve}`:`in ${ce} ${ge.identifierName(ve)}`,Je=new Pe("",He);return new ie(new Ee(Je,-1,-1,-1),new Ee(Je,-1,-1,-1))}L.typeSourceSpan=Ge;function gt(ce,ve,Ve){let He=`in ${ce} ${ve} in ${Ve}`,Je=new Pe("",He);return new ie(new Ee(Je,-1,-1,-1),new Ee(Je,-1,-1,-1))}L.r3JitTypeSourceSpan=gt}}),ue=he({"src/utils/front-matter/parse.js"(L,re){$();var ge=new RegExp("^(?-{3}|\\+{3})(?[^\\n]*)\\n(?:|(?.*?)\\n)(?\\k|\\.{3})[^\\S\\n]*(?:\\n|$)","s");function Ee(Pe){let ie=Pe.match(ge);if(!ie)return{content:Pe};let{startDelimiter:de,language:Ue,value:Ge="",endDelimiter:gt}=ie.groups,ce=Ue.trim()||"yaml";if(de==="+++"&&(ce="toml"),ce!=="yaml"&&de!==gt)return{content:Pe};let[ve]=ie;return{frontMatter:{type:"front-matter",lang:ce,value:Ge,startDelimiter:de,endDelimiter:gt,raw:ve.replace(/\n$/,"")},content:ve.replace(/[^\n]/g," ")+Pe.slice(ve.length)}}re.exports=Ee}}),yr=he({"src/utils/get-last.js"(L,re){$();var ge=Ee=>Ee[Ee.length-1];re.exports=ge}}),Pr=he({"src/common/parser-create-error.js"(L,re){$();function ge(Ee,Pe){let ie=new SyntaxError(Ee+" ("+Pe.start.line+":"+Pe.start.column+")");return ie.loc=Pe,ie}re.exports=ge}}),zr={};qe(zr,{default:()=>fr});function fr(L){if(typeof L!="string")throw new TypeError("Expected a string");return L.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}var Rr=je({"node_modules/escape-string-regexp/index.js"(){$()}}),mr=he({"node_modules/semver/internal/debug.js"(L,re){$();var ge=typeof rt=="object"&&rt.env&&rt.env.NODE_DEBUG&&/\bsemver\b/i.test(rt.env.NODE_DEBUG)?function(){for(var Ee=arguments.length,Pe=new Array(Ee),ie=0;ie{};re.exports=ge}}),rn=he({"node_modules/semver/internal/constants.js"(L,re){$();var ge="2.0.0",Ee=256,Pe=Number.MAX_SAFE_INTEGER||9007199254740991,ie=16;re.exports={SEMVER_SPEC_VERSION:ge,MAX_LENGTH:Ee,MAX_SAFE_INTEGER:Pe,MAX_SAFE_COMPONENT_LENGTH:ie}}}),wr=he({"node_modules/semver/internal/re.js"(L,re){$();var{MAX_SAFE_COMPONENT_LENGTH:ge}=rn(),Ee=mr();L=re.exports={};var Pe=L.re=[],ie=L.src=[],de=L.t={},Ue=0,Ge=(gt,ce,ve)=>{let Ve=Ue++;Ee(gt,Ve,ce),de[gt]=Ve,ie[Ve]=ce,Pe[Ve]=new RegExp(ce,ve?"g":void 0)};Ge("NUMERICIDENTIFIER","0|[1-9]\\d*"),Ge("NUMERICIDENTIFIERLOOSE","[0-9]+"),Ge("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*"),Ge("MAINVERSION",`(${ie[de.NUMERICIDENTIFIER]})\\.(${ie[de.NUMERICIDENTIFIER]})\\.(${ie[de.NUMERICIDENTIFIER]})`),Ge("MAINVERSIONLOOSE",`(${ie[de.NUMERICIDENTIFIERLOOSE]})\\.(${ie[de.NUMERICIDENTIFIERLOOSE]})\\.(${ie[de.NUMERICIDENTIFIERLOOSE]})`),Ge("PRERELEASEIDENTIFIER",`(?:${ie[de.NUMERICIDENTIFIER]}|${ie[de.NONNUMERICIDENTIFIER]})`),Ge("PRERELEASEIDENTIFIERLOOSE",`(?:${ie[de.NUMERICIDENTIFIERLOOSE]}|${ie[de.NONNUMERICIDENTIFIER]})`),Ge("PRERELEASE",`(?:-(${ie[de.PRERELEASEIDENTIFIER]}(?:\\.${ie[de.PRERELEASEIDENTIFIER]})*))`),Ge("PRERELEASELOOSE",`(?:-?(${ie[de.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${ie[de.PRERELEASEIDENTIFIERLOOSE]})*))`),Ge("BUILDIDENTIFIER","[0-9A-Za-z-]+"),Ge("BUILD",`(?:\\+(${ie[de.BUILDIDENTIFIER]}(?:\\.${ie[de.BUILDIDENTIFIER]})*))`),Ge("FULLPLAIN",`v?${ie[de.MAINVERSION]}${ie[de.PRERELEASE]}?${ie[de.BUILD]}?`),Ge("FULL",`^${ie[de.FULLPLAIN]}$`),Ge("LOOSEPLAIN",`[v=\\s]*${ie[de.MAINVERSIONLOOSE]}${ie[de.PRERELEASELOOSE]}?${ie[de.BUILD]}?`),Ge("LOOSE",`^${ie[de.LOOSEPLAIN]}$`),Ge("GTLT","((?:<|>)?=?)"),Ge("XRANGEIDENTIFIERLOOSE",`${ie[de.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),Ge("XRANGEIDENTIFIER",`${ie[de.NUMERICIDENTIFIER]}|x|X|\\*`),Ge("XRANGEPLAIN",`[v=\\s]*(${ie[de.XRANGEIDENTIFIER]})(?:\\.(${ie[de.XRANGEIDENTIFIER]})(?:\\.(${ie[de.XRANGEIDENTIFIER]})(?:${ie[de.PRERELEASE]})?${ie[de.BUILD]}?)?)?`),Ge("XRANGEPLAINLOOSE",`[v=\\s]*(${ie[de.XRANGEIDENTIFIERLOOSE]})(?:\\.(${ie[de.XRANGEIDENTIFIERLOOSE]})(?:\\.(${ie[de.XRANGEIDENTIFIERLOOSE]})(?:${ie[de.PRERELEASELOOSE]})?${ie[de.BUILD]}?)?)?`),Ge("XRANGE",`^${ie[de.GTLT]}\\s*${ie[de.XRANGEPLAIN]}$`),Ge("XRANGELOOSE",`^${ie[de.GTLT]}\\s*${ie[de.XRANGEPLAINLOOSE]}$`),Ge("COERCE",`(^|[^\\d])(\\d{1,${ge}})(?:\\.(\\d{1,${ge}}))?(?:\\.(\\d{1,${ge}}))?(?:$|[^\\d])`),Ge("COERCERTL",ie[de.COERCE],!0),Ge("LONETILDE","(?:~>?)"),Ge("TILDETRIM",`(\\s*)${ie[de.LONETILDE]}\\s+`,!0),L.tildeTrimReplace="$1~",Ge("TILDE",`^${ie[de.LONETILDE]}${ie[de.XRANGEPLAIN]}$`),Ge("TILDELOOSE",`^${ie[de.LONETILDE]}${ie[de.XRANGEPLAINLOOSE]}$`),Ge("LONECARET","(?:\\^)"),Ge("CARETTRIM",`(\\s*)${ie[de.LONECARET]}\\s+`,!0),L.caretTrimReplace="$1^",Ge("CARET",`^${ie[de.LONECARET]}${ie[de.XRANGEPLAIN]}$`),Ge("CARETLOOSE",`^${ie[de.LONECARET]}${ie[de.XRANGEPLAINLOOSE]}$`),Ge("COMPARATORLOOSE",`^${ie[de.GTLT]}\\s*(${ie[de.LOOSEPLAIN]})$|^$`),Ge("COMPARATOR",`^${ie[de.GTLT]}\\s*(${ie[de.FULLPLAIN]})$|^$`),Ge("COMPARATORTRIM",`(\\s*)${ie[de.GTLT]}\\s*(${ie[de.LOOSEPLAIN]}|${ie[de.XRANGEPLAIN]})`,!0),L.comparatorTrimReplace="$1$2$3",Ge("HYPHENRANGE",`^\\s*(${ie[de.XRANGEPLAIN]})\\s+-\\s+(${ie[de.XRANGEPLAIN]})\\s*$`),Ge("HYPHENRANGELOOSE",`^\\s*(${ie[de.XRANGEPLAINLOOSE]})\\s+-\\s+(${ie[de.XRANGEPLAINLOOSE]})\\s*$`),Ge("STAR","(<|>)?=?\\s*\\*"),Ge("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),Ge("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}}),Fr=he({"node_modules/semver/internal/parse-options.js"(L,re){$();var ge=["includePrerelease","loose","rtl"],Ee=Pe=>Pe?typeof Pe!="object"?{loose:!0}:ge.filter(ie=>Pe[ie]).reduce((ie,de)=>(ie[de]=!0,ie),{}):{};re.exports=Ee}}),Tn=he({"node_modules/semver/internal/identifiers.js"(L,re){$();var ge=/^[0-9]+$/,Ee=(ie,de)=>{let Ue=ge.test(ie),Ge=ge.test(de);return Ue&&Ge&&(ie=+ie,de=+de),ie===de?0:Ue&&!Ge?-1:Ge&&!Ue?1:ieEe(de,ie);re.exports={compareIdentifiers:Ee,rcompareIdentifiers:Pe}}}),Bn=he({"node_modules/semver/classes/semver.js"(L,re){$();var ge=mr(),{MAX_LENGTH:Ee,MAX_SAFE_INTEGER:Pe}=rn(),{re:ie,t:de}=wr(),Ue=Fr(),{compareIdentifiers:Ge}=Tn(),gt=class{constructor(ce,ve){if(ve=Ue(ve),ce instanceof gt){if(ce.loose===!!ve.loose&&ce.includePrerelease===!!ve.includePrerelease)return ce;ce=ce.version}else if(typeof ce!="string")throw new TypeError(`Invalid Version: ${ce}`);if(ce.length>Ee)throw new TypeError(`version is longer than ${Ee} characters`);ge("SemVer",ce,ve),this.options=ve,this.loose=!!ve.loose,this.includePrerelease=!!ve.includePrerelease;let Ve=ce.trim().match(ve.loose?ie[de.LOOSE]:ie[de.FULL]);if(!Ve)throw new TypeError(`Invalid Version: ${ce}`);if(this.raw=ce,this.major=+Ve[1],this.minor=+Ve[2],this.patch=+Ve[3],this.major>Pe||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Pe||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Pe||this.patch<0)throw new TypeError("Invalid patch version");Ve[4]?this.prerelease=Ve[4].split(".").map(He=>{if(/^[0-9]+$/.test(He)){let Je=+He;if(Je>=0&&Je=0;)typeof this.prerelease[Ve]=="number"&&(this.prerelease[Ve]++,Ve=-2);Ve===-1&&this.prerelease.push(0)}ve&&(Ge(this.prerelease[0],ve)===0?isNaN(this.prerelease[1])&&(this.prerelease=[ve,0]):this.prerelease=[ve,0]);break;default:throw new Error(`invalid increment argument: ${ce}`)}return this.format(),this.raw=this.version,this}};re.exports=gt}}),on=he({"node_modules/semver/functions/compare.js"(L,re){$();var ge=Bn(),Ee=(Pe,ie,de)=>new ge(Pe,de).compare(new ge(ie,de));re.exports=Ee}}),Nr=he({"node_modules/semver/functions/lt.js"(L,re){$();var ge=on(),Ee=(Pe,ie,de)=>ge(Pe,ie,de)<0;re.exports=Ee}}),Bu=he({"node_modules/semver/functions/gte.js"(L,re){$();var ge=on(),Ee=(Pe,ie,de)=>ge(Pe,ie,de)>=0;re.exports=Ee}}),Ri=he({"src/utils/arrayify.js"(L,re){$(),re.exports=(ge,Ee)=>Object.entries(ge).map(Pe=>{let[ie,de]=Pe;return Object.assign({[Ee]:ie},de)})}}),wu=he({"package.json"(L,re){re.exports={version:"2.8.8"}}}),Mi=he({"node_modules/outdent/lib/index.js"(L,re){$(),Object.defineProperty(L,"__esModule",{value:!0}),L.outdent=void 0;function ge(){for(var ct=[],kt=0;kt{},onAnalyticsEvent:async()=>{}},argTypes:{advancedRelations:{control:"boolean",table:{category:s}},basicRelations:{control:"boolean",table:{category:s}},divisionKey:{control:"boolean",table:{category:l}},logarithms:{control:"boolean",table:{category:s}},fractionsOnly:{control:"boolean",table:{category:I}},multiplicationDot:{control:"boolean",table:{category:l}},preAlgebra:{control:"boolean",table:{category:s}},trigonometry:{control:"boolean",table:{category:S}}}},e=w=>O(F,{...w,onClickKey:c("onClickKey"),onAnalyticsEvent:async D=>c("onAnalyticsEvent")(D)}),i=e.bind({}),a=e.bind({});a.args={preAlgebra:!0};const o=e.bind({});o.args={preAlgebra:!0,trigonometry:!0};const t=e.bind({});t.args={fractionsOnly:!0};const r=e.bind({});r.args={advancedRelations:!0,basicRelations:!0,divisionKey:!0,logarithms:!0,convertDotToTimes:!1,preAlgebra:!0,trigonometry:!0,expandedView:!0,showDismiss:!0,extraKeys:["a","b","c"]};const n=e.bind({});n.args={advancedRelations:!0,basicRelations:!0,divisionKey:!0,logarithms:!0,convertDotToTimes:!1,preAlgebra:!0,trigonometry:!0,expandedView:!1,showDismiss:!0,extraKeys:["a","b","c"]};var p,y,m;i.parameters={...i.parameters,docs:{...(p=i.parameters)==null?void 0:p.docs,source:{originalSource:'(args: PropsFor): React.ReactElement => action("onAnalyticsEvent")(e)} />',...(m=(y=i.parameters)==null?void 0:y.docs)==null?void 0:m.source}}};var g,d,u;a.parameters={...a.parameters,docs:{...(g=a.parameters)==null?void 0:g.docs,source:{originalSource:'(args: PropsFor): React.ReactElement => action("onAnalyticsEvent")(e)} />',...(u=(d=a.parameters)==null?void 0:d.docs)==null?void 0:u.source}}};var b,v,K;o.parameters={...o.parameters,docs:{...(b=o.parameters)==null?void 0:b.docs,source:{originalSource:'(args: PropsFor): React.ReactElement => action("onAnalyticsEvent")(e)} />',...(K=(v=o.parameters)==null?void 0:v.docs)==null?void 0:K.source}}};var f,E,A;t.parameters={...t.parameters,docs:{...(f=t.parameters)==null?void 0:f.docs,source:{originalSource:'(args: PropsFor): React.ReactElement => action("onAnalyticsEvent")(e)} />',...(A=(E=t.parameters)==null?void 0:E.docs)==null?void 0:A.source}}};var R,P,k;r.parameters={...r.parameters,docs:{...(R=r.parameters)==null?void 0:R.docs,source:{originalSource:'(args: PropsFor): React.ReactElement => action("onAnalyticsEvent")(e)} />',...(k=(P=r.parameters)==null?void 0:P.docs)==null?void 0:k.source}}};var h,C,T;n.parameters={...n.parameters,docs:{...(h=n.parameters)==null?void 0:h.docs,source:{originalSource:'(args: PropsFor): React.ReactElement => action("onAnalyticsEvent")(e)} />',...(T=(C=n.parameters)==null?void 0:C.docs)==null?void 0:T.source}}};const ne=["Default","PreAlgebra","Trigonometry","FractionsOnly","Everything","EverythingMinusNavigationPad"];export{i as Default,r as Everything,n as EverythingMinusNavigationPad,t as FractionsOnly,a as PreAlgebra,o as Trigonometry,ne as __namedExportsOrder,re as default}; +import{j as O}from"./jsx-runtime-FVsy8kgq.js";import{a as c}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{I as x}from"./index-VDi1Le_1.js";import{K as F}from"./mobile-keypad-hKjeQGNp.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";const s="Operators Page",l="Numbers Page",S="Geometry Page",I="Fractions Page",re={title:"math-input/Full Keypad",parameters:{backgrounds:{values:[{name:"light background",value:"white",default:!0}]},viewport:{defaultViewport:"iphone6",viewports:x}},component:F,args:{advancedRelations:!1,basicRelations:!1,divisionKey:!1,logarithms:!1,fractionsOnly:!1,convertDotToTimes:!1,preAlgebra:!1,trigonometry:!1,sendEvent:()=>{},onAnalyticsEvent:async()=>{}},argTypes:{advancedRelations:{control:"boolean",table:{category:s}},basicRelations:{control:"boolean",table:{category:s}},divisionKey:{control:"boolean",table:{category:l}},logarithms:{control:"boolean",table:{category:s}},fractionsOnly:{control:"boolean",table:{category:I}},multiplicationDot:{control:"boolean",table:{category:l}},preAlgebra:{control:"boolean",table:{category:s}},trigonometry:{control:"boolean",table:{category:S}}}},e=w=>O(F,{...w,onClickKey:c("onClickKey"),onAnalyticsEvent:async D=>c("onAnalyticsEvent")(D)}),i=e.bind({}),a=e.bind({});a.args={preAlgebra:!0};const o=e.bind({});o.args={preAlgebra:!0,trigonometry:!0};const t=e.bind({});t.args={fractionsOnly:!0};const r=e.bind({});r.args={advancedRelations:!0,basicRelations:!0,divisionKey:!0,logarithms:!0,convertDotToTimes:!1,preAlgebra:!0,trigonometry:!0,expandedView:!0,showDismiss:!0,extraKeys:["a","b","c"]};const n=e.bind({});n.args={advancedRelations:!0,basicRelations:!0,divisionKey:!0,logarithms:!0,convertDotToTimes:!1,preAlgebra:!0,trigonometry:!0,expandedView:!1,showDismiss:!0,extraKeys:["a","b","c"]};var p,y,m;i.parameters={...i.parameters,docs:{...(p=i.parameters)==null?void 0:p.docs,source:{originalSource:'(args: PropsFor): React.ReactElement => action("onAnalyticsEvent")(e)} />',...(m=(y=i.parameters)==null?void 0:y.docs)==null?void 0:m.source}}};var g,d,u;a.parameters={...a.parameters,docs:{...(g=a.parameters)==null?void 0:g.docs,source:{originalSource:'(args: PropsFor): React.ReactElement => action("onAnalyticsEvent")(e)} />',...(u=(d=a.parameters)==null?void 0:d.docs)==null?void 0:u.source}}};var b,v,K;o.parameters={...o.parameters,docs:{...(b=o.parameters)==null?void 0:b.docs,source:{originalSource:'(args: PropsFor): React.ReactElement => action("onAnalyticsEvent")(e)} />',...(K=(v=o.parameters)==null?void 0:v.docs)==null?void 0:K.source}}};var f,E,A;t.parameters={...t.parameters,docs:{...(f=t.parameters)==null?void 0:f.docs,source:{originalSource:'(args: PropsFor): React.ReactElement => action("onAnalyticsEvent")(e)} />',...(A=(E=t.parameters)==null?void 0:E.docs)==null?void 0:A.source}}};var R,P,k;r.parameters={...r.parameters,docs:{...(R=r.parameters)==null?void 0:R.docs,source:{originalSource:'(args: PropsFor): React.ReactElement => action("onAnalyticsEvent")(e)} />',...(k=(P=r.parameters)==null?void 0:P.docs)==null?void 0:k.source}}};var h,C,T;n.parameters={...n.parameters,docs:{...(h=n.parameters)==null?void 0:h.docs,source:{originalSource:'(args: PropsFor): React.ReactElement => action("onAnalyticsEvent")(e)} />',...(T=(C=n.parameters)==null?void 0:C.docs)==null?void 0:T.source}}};const ne=["Default","PreAlgebra","Trigonometry","FractionsOnly","Everything","EverythingMinusNavigationPad"];export{i as Default,r as Everything,n as EverythingMinusNavigationPad,t as FractionsOnly,a as PreAlgebra,o as Trigonometry,ne as __namedExportsOrder,re as default}; diff --git a/assets/full-mobile-input.stories-nmERbKsP.js b/assets/full-mobile-input.stories-nmERbKsP.js index 4b8f0462b9..107b9003e3 100644 --- a/assets/full-mobile-input.stories-nmERbKsP.js +++ b/assets/full-mobile-input.stories-nmERbKsP.js @@ -1,4 +1,4 @@ -import{j as e,a as u}from"./jsx-runtime-FVsy8kgq.js";import{S,a as M,M as T}from"./mobile-keypad-hKjeQGNp.js";import{a as I}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{r}from"./index-TT1qJ6UJ.js";import{M as b}from"./prop-types-3bOVFRDQ.js";import"./key-translator-IA-2V2LV.js";import"./button-assets-txIojR3b.js";import{K as d}from"./enums-x5qaTru7.js";import"./index-awljIyHI.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./version-akiLXZts.js";import"./invariant-bu5zBsRS.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";const ot={title:"math-input/Full Mobile MathInput",parameters:{backgrounds:{default:"light background",values:[{name:"light background",value:"lightgrey",default:!0}]}}},N=({keypadElement:t,setKeypadElement:a})=>{const[h,v]=r.useState(""),[i,g]=r.useState(!1),[n,y]=r.useState(!0),[m,K]=r.useState(!0),x=r.useRef(null),C=n?"CDOT":"TIMES";return r.useEffect(()=>{t==null||t.configure({keypadType:i?d.EXPRESSION:d.FRACTION,extraKeys:i?["x","y","PI","THETA"]:[],times:n},()=>{})},[t,i,n]),u("div",{style:{padding:"1rem 2rem"},children:[u("div",{children:[e("div",{children:"NOTE: To properly test the input interaction, you will need to simulate a device using the dev tools. MathInput requires touch events (not click events)."}),u("div",{style:{padding:"1rem 0"},children:[e("button",{onClick:()=>g(!i),children:`Use ${i?"Fraction":"Expression"} Keypad`}),e("button",{onClick:()=>K(!m),children:`Use ${m?"Legacy":"New"} Keypad`}),e("button",{onClick:()=>y(!n),children:"Toggle to "+C})]})]}),e(b,{value:h,ref:x,keypadElement:t,onChange:(o,p)=>{v(o),p==null||p()},onFocus:()=>{t==null||t.activate()},onBlur:()=>{t==null||t.dismiss()},ariaLabel:"Mobile input"}),e(T,{onElementMounted:o=>{o&&a(o)},onDismiss:()=>{},onAnalyticsEvent:async o=>I("onAnalyticsEvent")(o)})]})};function s(){return e(S,{children:e(M.Consumer,{children:({keypadElement:t,setKeypadElement:a})=>e(N,{keypadElement:t,setKeypadElement:a})})})}s.__docgenInfo={description:"",methods:[],displayName:"Wrapped"};var c,l,f;s.parameters={...s.parameters,docs:{...(c=s.parameters)==null?void 0:c.docs,source:{originalSource:`function Wrapped() { +import{j as e,a as u}from"./jsx-runtime-FVsy8kgq.js";import{S,a as M,M as T}from"./mobile-keypad-hKjeQGNp.js";import{a as I}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{r}from"./index-TT1qJ6UJ.js";import{M as b}from"./prop-types-3bOVFRDQ.js";import"./key-translator-IA-2V2LV.js";import"./button-assets-txIojR3b.js";import{K as d}from"./enums-x5qaTru7.js";import"./index-awljIyHI.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./version-akiLXZts.js";import"./invariant-bu5zBsRS.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";const ot={title:"math-input/Full Mobile MathInput",parameters:{backgrounds:{default:"light background",values:[{name:"light background",value:"lightgrey",default:!0}]}}},N=({keypadElement:t,setKeypadElement:a})=>{const[h,v]=r.useState(""),[i,g]=r.useState(!1),[n,y]=r.useState(!0),[m,K]=r.useState(!0),x=r.useRef(null),C=n?"CDOT":"TIMES";return r.useEffect(()=>{t==null||t.configure({keypadType:i?d.EXPRESSION:d.FRACTION,extraKeys:i?["x","y","PI","THETA"]:[],times:n},()=>{})},[t,i,n]),u("div",{style:{padding:"1rem 2rem"},children:[u("div",{children:[e("div",{children:"NOTE: To properly test the input interaction, you will need to simulate a device using the dev tools. MathInput requires touch events (not click events)."}),u("div",{style:{padding:"1rem 0"},children:[e("button",{onClick:()=>g(!i),children:`Use ${i?"Fraction":"Expression"} Keypad`}),e("button",{onClick:()=>K(!m),children:`Use ${m?"Legacy":"New"} Keypad`}),e("button",{onClick:()=>y(!n),children:"Toggle to "+C})]})]}),e(b,{value:h,ref:x,keypadElement:t,onChange:(o,p)=>{v(o),p==null||p()},onFocus:()=>{t==null||t.activate()},onBlur:()=>{t==null||t.dismiss()},ariaLabel:"Mobile input"}),e(T,{onElementMounted:o=>{o&&a(o)},onDismiss:()=>{},onAnalyticsEvent:async o=>I("onAnalyticsEvent")(o)})]})};function s(){return e(S,{children:e(M.Consumer,{children:({keypadElement:t,setKeypadElement:a})=>e(N,{keypadElement:t,setKeypadElement:a})})})}s.__docgenInfo={description:"",methods:[],displayName:"Wrapped"};var c,l,f;s.parameters={...s.parameters,docs:{...(c=s.parameters)==null?void 0:c.docs,source:{originalSource:`function Wrapped() { return {({ diff --git a/assets/graded-group-set.stories-mCi0tFhn.js b/assets/graded-group-set.stories-9FPLVzCM.js similarity index 87% rename from assets/graded-group-set.stories-mCi0tFhn.js rename to assets/graded-group-set.stories-9FPLVzCM.js index c8735681e7..7594b7e532 100644 --- a/assets/graded-group-set.stories-mCi0tFhn.js +++ b/assets/graded-group-set.stories-9FPLVzCM.js @@ -1,4 +1,4 @@ -import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{R as s}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const n={content:`#Section 1: Adding tenths less than one +import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{R as s}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const n={content:`#Section 1: Adding tenths less than one [[☃ graded-group-set 1]] diff --git a/assets/graded-group.stories-lS44KChW.js b/assets/graded-group.stories-0XPE2jTL.js similarity index 79% rename from assets/graded-group.stories-lS44KChW.js rename to assets/graded-group.stories-0XPE2jTL.js index 7284eba16c..b09985810a 100644 --- a/assets/graded-group.stories-lS44KChW.js +++ b/assets/graded-group.stories-0XPE2jTL.js @@ -1,4 +1,4 @@ -import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{R as m}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const a={content:`--- +import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{R as m}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const a={content:`--- ##Check your understanding! diff --git a/assets/graph-Y0iFaKoK.js b/assets/graph-myhk4Jua.js similarity index 98% rename from assets/graph-Y0iFaKoK.js rename to assets/graph-myhk4Jua.js index acbc18d737..d81ec4d8c8 100644 --- a/assets/graph-Y0iFaKoK.js +++ b/assets/graph-myhk4Jua.js @@ -1,4 +1,4 @@ -import{j as g,a as S}from"./jsx-runtime-FVsy8kgq.js";import{U as k}from"./util-XcxTwqb0.js";import{G as M,m as p,S as _}from"./svg-image-VUqtnnD6.js";import{_ as u,$ as d}from"./jquery-yG1GhClm.js";import{r as q}from"./index-TT1qJ6UJ.js";import{R as x}from"./index-7vsPyIck.js";import{c as C}from"./asset-context-I7yIqWki.js";import{i as G}from"./constants-I_nlPaPx.js";const D={url:null},N={fontStyle:"italic",fontWeight:"bold",fontSize:"32px",width:"100%",height:"100%",textAlign:"center",backgroundColor:"white",position:"absolute",zIndex:1,transition:"opacity .25s ease-in-out"},O={position:"relative",top:"25%"};function R(y,s){return Math.floor((y[1]-y[0])/s)}const v=class v extends q.Component{constructor(){super(...arguments),this.reset=()=>{this._setupGraphie(!1)},this.graphie=()=>this._graphie,this.pointsFromNormalized=(s,e)=>{const n=this;return u.map(s,function(a){return u.map(a,function(i,o){const l=n.props.range[o];if(e)return l[0]+(l[1]-l[0])*i;const m=n.props.step[o],t=R(l,m),h=Math.round(i*t);return l[0]+m*h})})},this._setupGraphie=s=>{if(this._hasSetupGraphieThisUpdate)return;const e=x.findDOMNode(this.refs.graphieDiv);d(e).empty();const n=this.props.labels.map(r=>k.unescapeMathMode(r)),a=this.props.range,i=this._graphie=M.createGraphie(e),o=this._getGridConfig();i.snap=this.props.snapStep,this.props.markings==="graph"?(i.graphInit({range:a,scale:p(o,r=>r.scale),axisArrows:"<->",labelFormat:function(r){return"\\small{"+r+"}"},gridStep:this.props.gridStep,tickStep:p(o,r=>r.tickStep),labelStep:1,unityLabels:p(o,r=>r.unityLabel),isMobile:this.props.isMobile}),i.label([0,a[1][1]],n[1],this.props.isMobile?"below right":"above"),i.label([a[0][1],0],n[0],this.props.isMobile?"above left":"right")):this.props.markings==="grid"?i.graphInit({range:a,scale:p(o,r=>r.scale),gridStep:this.props.gridStep,axes:!1,ticks:!1,labels:!1,isMobile:this.props.isMobile}):this.props.markings==="none"&&i.init({range:a,scale:p(o,r=>r.scale),isMobile:this.props.isMobile});const l=.5,m=0;let t;if(this.props.instructions){t=d("
"),u.each(N,function(c,f){t.css(f,c)}),t.css("opacity",l);const r=d("",{text:this.props.instructions});u.each(O,function(c,f){r.css(f,c)}),t.append(r),d(e).append(t)}else t=void 0;const h=t||this.props.onMouseDown?u.bind(function(r){t&&(t.remove(),t=null),this.props.onMouseDown(r)},this):void 0,w=t?function(){t&&t.css("opacity",m)}:void 0,T=t?function(){t&&t.css("opacity",l)}:void 0;i.addMouseLayer({onClick:this.props.onClick,onMouseDown:h,onMouseOver:w,onMouseOut:T,onMouseMove:this.props.onMouseMove,allowScratchpad:!0,setDrawingAreaAvailable:this.props.setDrawingAreaAvailable}),this._updateProtractor(),this._updateRuler(),this._hasSetupGraphieThisUpdate=!0,!s&&this.props.onGraphieUpdated&&this.props.onGraphieUpdated(i)},this._getGridConfig=()=>p(this.props.step,(s,e)=>k.gridDimensionConfig(s,this.props.range[e],this.props.box[e],this.props.gridStep[e])),this._updateProtractor=()=>{if(this.protractor&&this.protractor.remove(),this.props.showProtractor){const s=this.pointsFromNormalized([[.5,.05]])[0];this.protractor=this._graphie.protractor(s)}},this._updateRuler=()=>{if(this.ruler&&this.ruler.remove(),this.props.showRuler){const s=this.pointsFromNormalized([[.5,.25]])[0],e=this._graphie.range[0][1]-this._graphie.range[0][0];this.ruler=this._graphie.ruler({center:s,label:this.props.rulerLabel,pixelsPerUnit:this._graphie.scale[0],ticksPerUnit:this.props.rulerTicks,units:Math.round(.8*e)})}},this.toJSON=()=>u.pick(this.props,"range","step","markings","labels","backgroundImage","showProtractor","showRuler","rulerLabel","rulerTicks","gridStep","snapStep")}componentDidMount(){this._setupGraphie(!0)}UNSAFE_componentWillReceiveProps(s){const e=["labels","range","step","markings","showProtractor","showRuler","rulerLabel","rulerTicks","gridStep","snapStep"],n=this;u.each(e,function(a){u.isEqual(n.props[a],s[a])||(n._shouldSetupGraphie=!0)})}componentDidUpdate(){this._hasSetupGraphieThisUpdate=!1,this._shouldSetupGraphie&&(this._setupGraphie(!1),this._shouldSetupGraphie=!1)}render(){let s;const e=this.props.backgroundImage;if(e.url){const n=this.props.box[0]/G.defaultBoxSize;s=g(C.Consumer,{children:({setAssetStatus:a})=>g(_,{src:e.url,width:e.width,height:e.height,scale:n,responsive:!1,setAssetStatus:a})})}else s=null;return S("div",{className:"graphie-container above-scratchpad",style:{width:this.props.box[0],height:this.props.box[1]},onMouseOut:this.onMouseOut,onMouseOver:this.onMouseOver,onClick:this.onClick,children:[s,g("div",{className:"graphie",ref:"graphieDiv"})]})}};v.defaultProps={labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],gridStep:[1,1],snapStep:[.5,.5],markings:"graph",backgroundImage:D,showProtractor:!1,showRuler:!1,rulerLabel:"",rulerTicks:10,isMobile:!1};let b=v;b.__docgenInfo={description:"",methods:[{name:"reset",docblock:null,modifiers:[],params:[],returns:null},{name:"graphie",docblock:null,modifiers:[],params:[],returns:null},{name:"pointsFromNormalized",docblock:null,modifiers:[],params:[{name:"coordsList",optional:!1,type:null},{name:"noSnap",optional:!1,type:null}],returns:null},{name:"_setupGraphie",docblock:null,modifiers:[],params:[{name:"initialMount",optional:!1,type:null}],returns:null},{name:"_getGridConfig",docblock:null,modifiers:[],params:[],returns:null},{name:"_updateProtractor",docblock:null,modifiers:[],params:[],returns:null},{name:"_updateRuler",docblock:null,modifiers:[],params:[],returns:null},{name:"toJSON",docblock:null,modifiers:[],params:[],returns:null}],displayName:"Graph",props:{box:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},labels:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:'["x", "y"]',computed:!1}},range:{required:!1,tsType:{name:"tuple",raw:"[Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]}]},description:"",defaultValue:{value:`[ +import{j as g,a as S}from"./jsx-runtime-FVsy8kgq.js";import{U as k}from"./util-YrNvlCNO.js";import{G as M,m as p,S as _}from"./svg-image-RL9NlJEY.js";import{_ as u,$ as d}from"./jquery-yG1GhClm.js";import{r as q}from"./index-TT1qJ6UJ.js";import{R as x}from"./index-7vsPyIck.js";import{c as C}from"./asset-context-I7yIqWki.js";import{i as G}from"./constants-I_nlPaPx.js";const D={url:null},N={fontStyle:"italic",fontWeight:"bold",fontSize:"32px",width:"100%",height:"100%",textAlign:"center",backgroundColor:"white",position:"absolute",zIndex:1,transition:"opacity .25s ease-in-out"},O={position:"relative",top:"25%"};function R(y,s){return Math.floor((y[1]-y[0])/s)}const v=class v extends q.Component{constructor(){super(...arguments),this.reset=()=>{this._setupGraphie(!1)},this.graphie=()=>this._graphie,this.pointsFromNormalized=(s,e)=>{const n=this;return u.map(s,function(a){return u.map(a,function(i,o){const l=n.props.range[o];if(e)return l[0]+(l[1]-l[0])*i;const m=n.props.step[o],t=R(l,m),h=Math.round(i*t);return l[0]+m*h})})},this._setupGraphie=s=>{if(this._hasSetupGraphieThisUpdate)return;const e=x.findDOMNode(this.refs.graphieDiv);d(e).empty();const n=this.props.labels.map(r=>k.unescapeMathMode(r)),a=this.props.range,i=this._graphie=M.createGraphie(e),o=this._getGridConfig();i.snap=this.props.snapStep,this.props.markings==="graph"?(i.graphInit({range:a,scale:p(o,r=>r.scale),axisArrows:"<->",labelFormat:function(r){return"\\small{"+r+"}"},gridStep:this.props.gridStep,tickStep:p(o,r=>r.tickStep),labelStep:1,unityLabels:p(o,r=>r.unityLabel),isMobile:this.props.isMobile}),i.label([0,a[1][1]],n[1],this.props.isMobile?"below right":"above"),i.label([a[0][1],0],n[0],this.props.isMobile?"above left":"right")):this.props.markings==="grid"?i.graphInit({range:a,scale:p(o,r=>r.scale),gridStep:this.props.gridStep,axes:!1,ticks:!1,labels:!1,isMobile:this.props.isMobile}):this.props.markings==="none"&&i.init({range:a,scale:p(o,r=>r.scale),isMobile:this.props.isMobile});const l=.5,m=0;let t;if(this.props.instructions){t=d("
"),u.each(N,function(c,f){t.css(f,c)}),t.css("opacity",l);const r=d("",{text:this.props.instructions});u.each(O,function(c,f){r.css(f,c)}),t.append(r),d(e).append(t)}else t=void 0;const h=t||this.props.onMouseDown?u.bind(function(r){t&&(t.remove(),t=null),this.props.onMouseDown(r)},this):void 0,w=t?function(){t&&t.css("opacity",m)}:void 0,T=t?function(){t&&t.css("opacity",l)}:void 0;i.addMouseLayer({onClick:this.props.onClick,onMouseDown:h,onMouseOver:w,onMouseOut:T,onMouseMove:this.props.onMouseMove,allowScratchpad:!0,setDrawingAreaAvailable:this.props.setDrawingAreaAvailable}),this._updateProtractor(),this._updateRuler(),this._hasSetupGraphieThisUpdate=!0,!s&&this.props.onGraphieUpdated&&this.props.onGraphieUpdated(i)},this._getGridConfig=()=>p(this.props.step,(s,e)=>k.gridDimensionConfig(s,this.props.range[e],this.props.box[e],this.props.gridStep[e])),this._updateProtractor=()=>{if(this.protractor&&this.protractor.remove(),this.props.showProtractor){const s=this.pointsFromNormalized([[.5,.05]])[0];this.protractor=this._graphie.protractor(s)}},this._updateRuler=()=>{if(this.ruler&&this.ruler.remove(),this.props.showRuler){const s=this.pointsFromNormalized([[.5,.25]])[0],e=this._graphie.range[0][1]-this._graphie.range[0][0];this.ruler=this._graphie.ruler({center:s,label:this.props.rulerLabel,pixelsPerUnit:this._graphie.scale[0],ticksPerUnit:this.props.rulerTicks,units:Math.round(.8*e)})}},this.toJSON=()=>u.pick(this.props,"range","step","markings","labels","backgroundImage","showProtractor","showRuler","rulerLabel","rulerTicks","gridStep","snapStep")}componentDidMount(){this._setupGraphie(!0)}UNSAFE_componentWillReceiveProps(s){const e=["labels","range","step","markings","showProtractor","showRuler","rulerLabel","rulerTicks","gridStep","snapStep"],n=this;u.each(e,function(a){u.isEqual(n.props[a],s[a])||(n._shouldSetupGraphie=!0)})}componentDidUpdate(){this._hasSetupGraphieThisUpdate=!1,this._shouldSetupGraphie&&(this._setupGraphie(!1),this._shouldSetupGraphie=!1)}render(){let s;const e=this.props.backgroundImage;if(e.url){const n=this.props.box[0]/G.defaultBoxSize;s=g(C.Consumer,{children:({setAssetStatus:a})=>g(_,{src:e.url,width:e.width,height:e.height,scale:n,responsive:!1,setAssetStatus:a})})}else s=null;return S("div",{className:"graphie-container above-scratchpad",style:{width:this.props.box[0],height:this.props.box[1]},onMouseOut:this.onMouseOut,onMouseOver:this.onMouseOver,onClick:this.onClick,children:[s,g("div",{className:"graphie",ref:"graphieDiv"})]})}};v.defaultProps={labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],gridStep:[1,1],snapStep:[.5,.5],markings:"graph",backgroundImage:D,showProtractor:!1,showRuler:!1,rulerLabel:"",rulerTicks:10,isMobile:!1};let b=v;b.__docgenInfo={description:"",methods:[{name:"reset",docblock:null,modifiers:[],params:[],returns:null},{name:"graphie",docblock:null,modifiers:[],params:[],returns:null},{name:"pointsFromNormalized",docblock:null,modifiers:[],params:[{name:"coordsList",optional:!1,type:null},{name:"noSnap",optional:!1,type:null}],returns:null},{name:"_setupGraphie",docblock:null,modifiers:[],params:[{name:"initialMount",optional:!1,type:null}],returns:null},{name:"_getGridConfig",docblock:null,modifiers:[],params:[],returns:null},{name:"_updateProtractor",docblock:null,modifiers:[],params:[],returns:null},{name:"_updateRuler",docblock:null,modifiers:[],params:[],returns:null},{name:"toJSON",docblock:null,modifiers:[],params:[],returns:null}],displayName:"Graph",props:{box:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},labels:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:'["x", "y"]',computed:!1}},range:{required:!1,tsType:{name:"tuple",raw:"[Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]}]},description:"",defaultValue:{value:`[ [-10, 10], [-10, 10], ]`,computed:!1}},step:{required:!1,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:"",defaultValue:{value:"[1, 1]",computed:!1}},gridStep:{required:!1,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:"",defaultValue:{value:"[1, 1]",computed:!1}},snapStep:{required:!1,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:"",defaultValue:{value:"[0.5, 0.5]",computed:!1}},markings:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"graph"',computed:!1}},backgroundImage:{required:!1,tsType:{name:"signature",type:"object",raw:`{ diff --git a/assets/graph-settings-F_5lrkPp.js b/assets/graph-settings-F_5lrkPp.js deleted file mode 100644 index 0339774c47..0000000000 --- a/assets/graph-settings-F_5lrkPp.js +++ /dev/null @@ -1 +0,0 @@ -import{j as a,a as o}from"./jsx-runtime-FVsy8kgq.js";import{a as v,p as T,c as k}from"./article-renderer-6f7Dak4j.js";import{_ as i}from"./jquery-yG1GhClm.js";import{U as g,K as f}from"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import{g as w}from"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as y}from"./components-GHvuFaIn.js";import{i as x}from"./constants-I_nlPaPx.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{C as m}from"./index-QCAhLhLD.js";import{P as n}from"./index-0C4KXdeC.js";import{R as N}from"./index-7vsPyIck.js";const{ButtonGroup:R,InfoTip:G,RangeInput:u}=y,C={url:null,width:0,height:0};function I(e,s){return Math.floor((e[1]-e[0])/s)}const F=v({displayName:"GraphSettings",propTypes:{...T,editableSettings:n.arrayOf(n.oneOf(["canvas","graph","snap","image","measure"])),box:n.arrayOf(n.number),labels:n.arrayOf(n.string),range:n.arrayOf(n.arrayOf(n.number)),step:n.arrayOf(n.number),gridStep:n.arrayOf(n.number),snapStep:n.arrayOf(n.number),valid:n.oneOfType([n.bool,n.string]),backgroundImage:n.object,markings:n.oneOf(["graph","grid","none"]),showProtractor:n.bool,showRuler:n.bool,showTooltips:n.bool,rulerLabel:n.string,rulerTicks:n.number},getDefaultProps:function(){return{editableSettings:["graph","snap","image","measure"],box:[x.defaultBoxSizeSmall,x.defaultBoxSizeSmall],labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],gridStep:[1,1],snapStep:[1,1],valid:!0,backgroundImage:C,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=i.debounce(this.changeGraph,300)},UNSAFE_componentWillReceiveProps:function(e){(!i.isEqual(this.props.labels,e.labels)||!i.isEqual(this.props.gridStep,e.gridStep)||!i.isEqual(this.props.snapStep,e.snapStep)||!i.isEqual(this.props.step,e.step)||!i.isEqual(this.props.range,e.range)||!i.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:i.clone(e.backgroundImage)}},change(...e){return k.apply(this,e)},changeRulerLabel:function(e){this.change({rulerLabel:e.target.value})},changeRulerTicks:function(e){this.change({rulerTicks:+e.target.value})},changeBackgroundUrl:function(e){if(e.type==="keypress"&&e.key!=="Enter")return;const s=(l,c,h)=>{const r=i.clone(this.props.backgroundImage);r.url=l,r.width=c,r.height=h,this.setState({backgroundImage:r},this.changeGraph)},t=N.findDOMNode(this.refs["bg-url"]).value;t?g.getImageSize(t,(l,c)=>{this._isMounted&&s(t,l,c)}):s(null,0,0)},renderLabelChoices:function(e){return i.map(e,function([s,t]){return a("option",{value:t,children:s},t)})},validRange:function(e){return i.every(e,function(t){return i.isFinite(t)})?e[0]>=e[1]?"Range must have a higher number on the right":!0:"Range must be a valid number"},validateStepValue:function(e){const{step:s,range:t,name:l,minTicks:c,maxTicks:h}=e;if(!i.isFinite(s))return l+" must be a valid number";const r=I(t,s);return rh?l+" is too small, there can be at most "+h+" ticks.":!0},validSnapStep:function(e,s){return this.validateStepValue({step:e,range:s,name:"Snap step",minTicks:5,maxTicks:60})},validGridStep:function(e,s){return this.validateStepValue({step:e,range:s,name:"Grid step",minTicks:3,maxTicks:60})},validStep:function(e,s){return this.validateStepValue({step:e,range:s,name:"Step",minTicks:3,maxTicks:20})},validBackgroundImageSize:function(e){return e.url?e.width<=450&&e.height<=450?!0:"Image must be smaller than 450px x 450px.":!0},validateGraphSettings:function(e,s,t,l,c){const h=this;let r;if(!i.every(e,function(p){return r=h.validRange(p),r===!0})||!i.every(s,function(p,d){return r=h.validStep(p,e[d]),r===!0})||!i.every(t,function(p,d){return r=h.validGridStep(p,e[d]),r===!0})||!i.every(l,function(p,d){return r=h.validSnapStep(p,e[d]),r===!0}))return r;const S=this.validBackgroundImageSize(c);return S!==!0?(r=S,r):!0},changeLabel:function(e,s){const t=s.target.value,l=this.state.labelsTextbox.slice();l[e]=t,this.setState({labelsTextbox:l},this.changeGraph)},changeRange:function(e,s){const t=this.state.rangeTextbox.slice();t[e]=s;const l=this.state.stepTextbox.slice(),c=this.state.gridStepTextbox.slice(),h=this.state.snapStepTextbox.slice(),r=g.scaleFromExtent(t[e],this.props.box[e]);this.validRange(t[e])===!0&&(l[e]=g.tickStepFromExtent(t[e],this.props.box[e]),c[e]=g.gridStepFromTickStep(l[e],r),h[e]=c[e]/2),this.setState({stepTextbox:l,gridStepTextbox:c,snapStepTextbox:h,rangeTextbox:t},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:i.map(e,function(s){return s/2})},this.changeGraph)},changeGraph:function(){const e=this.state.labelsTextbox,s=i.map(this.state.rangeTextbox,function(b){return i.map(b,Number)}),t=i.map(this.state.stepTextbox,Number),l=this.state.gridStepTextbox,c=this.state.snapStepTextbox,h=this.state.backgroundImage,r=this.validateGraphSettings(s,t,l,c,h);r===!0?this.change({valid:!0,labels:e,range:s,step:t,gridStep:l,snapStep:c,backgroundImage:h}):this.change({valid:r})},render:function(){const e=[f.roundTo(2,g.scaleFromExtent(this.props.range[0],this.props.box[0])),f.roundTo(2,g.scaleFromExtent(this.props.range[1],this.props.box[1]))],{TeX:s}=w();return o("div",{children:[i.contains(this.props.editableSettings,"canvas")&&o("div",{className:"graph-settings",children:[o("div",{className:"perseus-widget-row",children:[a("label",{htmlFor:"canvas-size",children:"Canvas size (x,y pixels)"}),a(u,{id:"canvas-size",value:this.props.box,onChange:t=>{this.change({box:t})}})]}),o("div",{className:"perseus-widget-row",children:["Scale (px per div):"," ",a(s,{children:"("+e[0]+", "+e[1]+")"})]})]}),i.contains(this.props.editableSettings,"graph")&&o("div",{className:"graph-settings",children:[o("div",{className:"perseus-widget-row",children:[o("div",{className:"perseus-widget-left-col",children:[a("label",{htmlFor:"labels-x",children:"x Label"}),a("input",{id:"labels-x",type:"text",className:"graph-settings-axis-label",ref:"labels-0",onChange:t=>this.changeLabel(0,t),value:this.state.labelsTextbox[0]||""})]}),o("div",{className:"perseus-widget-right-col",children:[a("label",{htmlFor:"labels-y",children:"y Label"}),a("input",{id:"labels-y",type:"text",className:"graph-settings-axis-label",ref:"labels-1",onChange:t=>this.changeLabel(1,t),value:this.state.labelsTextbox[1]||""})]})]}),o("div",{className:"perseus-widget-row",children:[o("div",{className:"perseus-widget-left-col",children:[a("label",{htmlFor:"range-x",children:"x Range"}),a(u,{id:"range-x",value:this.state.rangeTextbox[0],onChange:t=>this.changeRange(0,t)})]}),o("div",{className:"perseus-widget-right-col",children:[a("label",{htmlFor:"range-y",children:"y Range"}),a(u,{id:"range-y",value:this.state.rangeTextbox[1],onChange:t=>this.changeRange(1,t)})]})]}),o("div",{className:"perseus-widget-row",children:[o("div",{className:"perseus-widget-left-col",children:[a("label",{htmlFor:"tick-step",children:"Tick Step"}),a(u,{id:"tick-step",value:this.state.stepTextbox,onChange:this.changeStep})]}),o("div",{className:"perseus-widget-right-col",children:[a("label",{htmlFor:"grid-step",children:"Grid Step"}),a(u,{id:"grid-step",value:this.state.gridStepTextbox,onChange:this.changeGridStep})]})]}),i.contains(this.props.editableSettings,"snap")&&a("div",{className:"perseus-widget-row",children:o("div",{className:"perseus-widget-left-col",children:[a("label",{htmlFor:"snap-step",children:"Snap Step"}),a(u,{id:"snap-step",value:this.state.snapStepTextbox,onChange:this.changeSnapStep})]})}),o("div",{className:"perseus-widget-row",children:[a("label",{children:"Markings: "}),a(R,{value:this.props.markings,allowEmpty:!1,buttons:[{value:"graph",content:"Graph"},{value:"grid",content:"Grid"},{value:"none",content:"None"}],onChange:this.change("markings")})]}),a("div",{className:"perseus-widget-left-col",children:a(m,{label:"Show tooltips",checked:this.props.showTooltips,onChange:t=>{this.change({showTooltips:t})}})})]}),i.contains(this.props.editableSettings,"image")&&o("div",{className:"image-settings",children:[a("div",{children:"Background image:"}),o("div",{children:[a("label",{htmlFor:"bg-url",children:"Url:"}),a("input",{id:"bg-url",type:"text",className:"graph-settings-background-url",ref:"bg-url",value:this.state.backgroundImage.url||"",onChange:t=>{const l=i.clone(this.props.backgroundImage);l.url=t.target.value,this.setState({backgroundImage:l})},onKeyPress:this.changeBackgroundUrl,onBlur:this.changeBackgroundUrl}),a(G,{children:a("p",{children:'Create an image in graphie, or use the "Add image" function to create a background.'})})]})]}),i.contains(this.props.editableSettings,"measure")&&o("div",{className:"misc-settings",children:[o("div",{className:"perseus-widget-row",children:[a("div",{className:"perseus-widget-left-col",children:a(m,{label:"Show ruler",checked:this.props.showRuler,onChange:t=>{this.change({showRuler:t})}})}),a("div",{className:"perseus-widget-right-col",children:a(m,{label:"Show protractor",checked:this.props.showProtractor,onChange:t=>{this.change({showProtractor:t})}})})]}),this.props.showRuler&&o("div",{children:[a("div",{children:o("label",{children:[" ","Ruler label:"," ",o("select",{onChange:this.changeRulerLabel,value:this.props.rulerLabel,children:[a("option",{value:"",children:"None"}),a("optgroup",{label:"Metric",children:this.renderLabelChoices([["milimeters","mm"],["centimeters","cm"],["meters","m"],["kilometers","km"]])}),a("optgroup",{label:"Imperial",children:this.renderLabelChoices([["inches","in"],["feet","ft"],["yards","yd"],["miles","mi"]])})]})]})}),a("div",{children:o("label",{children:[" ","Ruler ticks:"," ",a("select",{onChange:this.changeRulerTicks,value:this.props.rulerTicks,children:i.map([1,2,4,8,10,16],function(t){return a("option",{value:t,children:t},t)})})]})})]})]})]})}}),te=F;export{te as G}; diff --git a/assets/graph-settings-_umr9_il.js b/assets/graph-settings-_umr9_il.js new file mode 100644 index 0000000000..b46193d394 --- /dev/null +++ b/assets/graph-settings-_umr9_il.js @@ -0,0 +1 @@ +import{j as a,a as o}from"./jsx-runtime-FVsy8kgq.js";import{p as v,c as T}from"./article-renderer-TMdCDA85.js";import{_ as i}from"./jquery-yG1GhClm.js";import{U as g,K as f}from"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import{g as k}from"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as w}from"./components-h6HHhmoA.js";import{i as x}from"./constants-I_nlPaPx.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{C as m}from"./index-QCAhLhLD.js";import{c as y}from"./index-fuycm_QE.js";import{P as n}from"./index-k-0mNqHS.js";import{R as N}from"./index-7vsPyIck.js";const{ButtonGroup:R,InfoTip:G,RangeInput:u}=w,C={url:null,width:0,height:0};function I(e,s){return Math.floor((e[1]-e[0])/s)}const F=y({displayName:"GraphSettings",propTypes:{...v,editableSettings:n.arrayOf(n.oneOf(["canvas","graph","snap","image","measure"])),box:n.arrayOf(n.number),labels:n.arrayOf(n.string),range:n.arrayOf(n.arrayOf(n.number)),step:n.arrayOf(n.number),gridStep:n.arrayOf(n.number),snapStep:n.arrayOf(n.number),valid:n.oneOfType([n.bool,n.string]),backgroundImage:n.object,markings:n.oneOf(["graph","grid","none"]),showProtractor:n.bool,showRuler:n.bool,showTooltips:n.bool,rulerLabel:n.string,rulerTicks:n.number},getDefaultProps:function(){return{editableSettings:["graph","snap","image","measure"],box:[x.defaultBoxSizeSmall,x.defaultBoxSizeSmall],labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],gridStep:[1,1],snapStep:[1,1],valid:!0,backgroundImage:C,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=i.debounce(this.changeGraph,300)},UNSAFE_componentWillReceiveProps:function(e){(!i.isEqual(this.props.labels,e.labels)||!i.isEqual(this.props.gridStep,e.gridStep)||!i.isEqual(this.props.snapStep,e.snapStep)||!i.isEqual(this.props.step,e.step)||!i.isEqual(this.props.range,e.range)||!i.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:i.clone(e.backgroundImage)}},change(...e){return T.apply(this,e)},changeRulerLabel:function(e){this.change({rulerLabel:e.target.value})},changeRulerTicks:function(e){this.change({rulerTicks:+e.target.value})},changeBackgroundUrl:function(e){if(e.type==="keypress"&&e.key!=="Enter")return;const s=(l,c,h)=>{const r=i.clone(this.props.backgroundImage);r.url=l,r.width=c,r.height=h,this.setState({backgroundImage:r},this.changeGraph)},t=N.findDOMNode(this.refs["bg-url"]).value;t?g.getImageSize(t,(l,c)=>{this._isMounted&&s(t,l,c)}):s(null,0,0)},renderLabelChoices:function(e){return i.map(e,function([s,t]){return a("option",{value:t,children:s},t)})},validRange:function(e){return i.every(e,function(t){return i.isFinite(t)})?e[0]>=e[1]?"Range must have a higher number on the right":!0:"Range must be a valid number"},validateStepValue:function(e){const{step:s,range:t,name:l,minTicks:c,maxTicks:h}=e;if(!i.isFinite(s))return l+" must be a valid number";const r=I(t,s);return rh?l+" is too small, there can be at most "+h+" ticks.":!0},validSnapStep:function(e,s){return this.validateStepValue({step:e,range:s,name:"Snap step",minTicks:5,maxTicks:60})},validGridStep:function(e,s){return this.validateStepValue({step:e,range:s,name:"Grid step",minTicks:3,maxTicks:60})},validStep:function(e,s){return this.validateStepValue({step:e,range:s,name:"Step",minTicks:3,maxTicks:20})},validBackgroundImageSize:function(e){return e.url?e.width<=450&&e.height<=450?!0:"Image must be smaller than 450px x 450px.":!0},validateGraphSettings:function(e,s,t,l,c){const h=this;let r;if(!i.every(e,function(p){return r=h.validRange(p),r===!0})||!i.every(s,function(p,d){return r=h.validStep(p,e[d]),r===!0})||!i.every(t,function(p,d){return r=h.validGridStep(p,e[d]),r===!0})||!i.every(l,function(p,d){return r=h.validSnapStep(p,e[d]),r===!0}))return r;const S=this.validBackgroundImageSize(c);return S!==!0?(r=S,r):!0},changeLabel:function(e,s){const t=s.target.value,l=this.state.labelsTextbox.slice();l[e]=t,this.setState({labelsTextbox:l},this.changeGraph)},changeRange:function(e,s){const t=this.state.rangeTextbox.slice();t[e]=s;const l=this.state.stepTextbox.slice(),c=this.state.gridStepTextbox.slice(),h=this.state.snapStepTextbox.slice(),r=g.scaleFromExtent(t[e],this.props.box[e]);this.validRange(t[e])===!0&&(l[e]=g.tickStepFromExtent(t[e],this.props.box[e]),c[e]=g.gridStepFromTickStep(l[e],r),h[e]=c[e]/2),this.setState({stepTextbox:l,gridStepTextbox:c,snapStepTextbox:h,rangeTextbox:t},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:i.map(e,function(s){return s/2})},this.changeGraph)},changeGraph:function(){const e=this.state.labelsTextbox,s=i.map(this.state.rangeTextbox,function(b){return i.map(b,Number)}),t=i.map(this.state.stepTextbox,Number),l=this.state.gridStepTextbox,c=this.state.snapStepTextbox,h=this.state.backgroundImage,r=this.validateGraphSettings(s,t,l,c,h);r===!0?this.change({valid:!0,labels:e,range:s,step:t,gridStep:l,snapStep:c,backgroundImage:h}):this.change({valid:r})},render:function(){const e=[f.roundTo(2,g.scaleFromExtent(this.props.range[0],this.props.box[0])),f.roundTo(2,g.scaleFromExtent(this.props.range[1],this.props.box[1]))],{TeX:s}=k();return o("div",{children:[i.contains(this.props.editableSettings,"canvas")&&o("div",{className:"graph-settings",children:[o("div",{className:"perseus-widget-row",children:[a("label",{htmlFor:"canvas-size",children:"Canvas size (x,y pixels)"}),a(u,{id:"canvas-size",value:this.props.box,onChange:t=>{this.change({box:t})}})]}),o("div",{className:"perseus-widget-row",children:["Scale (px per div):"," ",a(s,{children:"("+e[0]+", "+e[1]+")"})]})]}),i.contains(this.props.editableSettings,"graph")&&o("div",{className:"graph-settings",children:[o("div",{className:"perseus-widget-row",children:[o("div",{className:"perseus-widget-left-col",children:[a("label",{htmlFor:"labels-x",children:"x Label"}),a("input",{id:"labels-x",type:"text",className:"graph-settings-axis-label",ref:"labels-0",onChange:t=>this.changeLabel(0,t),value:this.state.labelsTextbox[0]||""})]}),o("div",{className:"perseus-widget-right-col",children:[a("label",{htmlFor:"labels-y",children:"y Label"}),a("input",{id:"labels-y",type:"text",className:"graph-settings-axis-label",ref:"labels-1",onChange:t=>this.changeLabel(1,t),value:this.state.labelsTextbox[1]||""})]})]}),o("div",{className:"perseus-widget-row",children:[o("div",{className:"perseus-widget-left-col",children:[a("label",{htmlFor:"range-x",children:"x Range"}),a(u,{id:"range-x",value:this.state.rangeTextbox[0],onChange:t=>this.changeRange(0,t)})]}),o("div",{className:"perseus-widget-right-col",children:[a("label",{htmlFor:"range-y",children:"y Range"}),a(u,{id:"range-y",value:this.state.rangeTextbox[1],onChange:t=>this.changeRange(1,t)})]})]}),o("div",{className:"perseus-widget-row",children:[o("div",{className:"perseus-widget-left-col",children:[a("label",{htmlFor:"tick-step",children:"Tick Step"}),a(u,{id:"tick-step",value:this.state.stepTextbox,onChange:this.changeStep})]}),o("div",{className:"perseus-widget-right-col",children:[a("label",{htmlFor:"grid-step",children:"Grid Step"}),a(u,{id:"grid-step",value:this.state.gridStepTextbox,onChange:this.changeGridStep})]})]}),i.contains(this.props.editableSettings,"snap")&&a("div",{className:"perseus-widget-row",children:o("div",{className:"perseus-widget-left-col",children:[a("label",{htmlFor:"snap-step",children:"Snap Step"}),a(u,{id:"snap-step",value:this.state.snapStepTextbox,onChange:this.changeSnapStep})]})}),o("div",{className:"perseus-widget-row",children:[a("label",{children:"Markings: "}),a(R,{value:this.props.markings,allowEmpty:!1,buttons:[{value:"graph",content:"Graph"},{value:"grid",content:"Grid"},{value:"none",content:"None"}],onChange:this.change("markings")})]}),a("div",{className:"perseus-widget-left-col",children:a(m,{label:"Show tooltips",checked:this.props.showTooltips,onChange:t=>{this.change({showTooltips:t})}})})]}),i.contains(this.props.editableSettings,"image")&&o("div",{className:"image-settings",children:[a("div",{children:"Background image:"}),o("div",{children:[a("label",{htmlFor:"bg-url",children:"Url:"}),a("input",{id:"bg-url",type:"text",className:"graph-settings-background-url",ref:"bg-url",value:this.state.backgroundImage.url||"",onChange:t=>{const l=i.clone(this.props.backgroundImage);l.url=t.target.value,this.setState({backgroundImage:l})},onKeyPress:this.changeBackgroundUrl,onBlur:this.changeBackgroundUrl}),a(G,{children:a("p",{children:'Create an image in graphie, or use the "Add image" function to create a background.'})})]})]}),i.contains(this.props.editableSettings,"measure")&&o("div",{className:"misc-settings",children:[o("div",{className:"perseus-widget-row",children:[a("div",{className:"perseus-widget-left-col",children:a(m,{label:"Show ruler",checked:this.props.showRuler,onChange:t=>{this.change({showRuler:t})}})}),a("div",{className:"perseus-widget-right-col",children:a(m,{label:"Show protractor",checked:this.props.showProtractor,onChange:t=>{this.change({showProtractor:t})}})})]}),this.props.showRuler&&o("div",{children:[a("div",{children:o("label",{children:[" ","Ruler label:"," ",o("select",{onChange:this.changeRulerLabel,value:this.props.rulerLabel,children:[a("option",{value:"",children:"None"}),a("optgroup",{label:"Metric",children:this.renderLabelChoices([["milimeters","mm"],["centimeters","cm"],["meters","m"],["kilometers","km"]])}),a("optgroup",{label:"Imperial",children:this.renderLabelChoices([["inches","in"],["feet","ft"],["yards","yd"],["miles","mi"]])})]})]})}),a("div",{children:o("label",{children:[" ","Ruler ticks:"," ",a("select",{onChange:this.changeRulerTicks,value:this.props.rulerTicks,children:i.map([1,2,4,8,10,16],function(t){return a("option",{value:t,children:t},t)})})]})})]})]})]})}}),ae=F;export{ae as G}; diff --git a/assets/graph-settings.stories-bA3xZ_VF.js b/assets/graph-settings.stories-bA3xZ_VF.js deleted file mode 100644 index 233cf3348c..0000000000 --- a/assets/graph-settings.stories-bA3xZ_VF.js +++ /dev/null @@ -1,3 +0,0 @@ -import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{G as i}from"./graph-settings-F_5lrkPp.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./index-0C4KXdeC.js";const a={editableSettings:{control:{type:"array",options:["canvas","graph","snap","image","measure"]}},box:{control:{type:"array"}},range:{control:{type:"object"}},labels:{control:{type:"object"}},step:{control:{type:"object"}},gridStep:{control:{type:"object"}},snapStep:{control:{type:"object"}},valid:{control:{type:"text"}},backgroundImage:{control:{type:"object"}},markings:{control:{type:"select"},table:{type:{summary:'"graph" | "grid" | "none"'}},type:{name:"enum",value:["graph","grid","none"],required:!1}},rulerLabel:{control:{type:"text"}},rulerTicks:{control:{type:"number"}},showTooltips:{control:{type:"boolean"}},onChange:{control:{type:"function"}}},Yt={title:"PerseusEditor/Components/Graph Settings",component:i,argTypes:a},t=m=>e(i,{...m});t.args={range:[[-10,10],[-10,10]]};t.__docgenInfo={description:"",methods:[],displayName:"Default"};var r,o,p;t.parameters={...t.parameters,docs:{...(r=t.parameters)==null?void 0:r.docs,source:{originalSource:`(args): React.ReactElement => { - return ; -}`,...(p=(o=t.parameters)==null?void 0:o.docs)==null?void 0:p.source}}};const Zt=["Default"];export{t as Default,Zt as __namedExportsOrder,Yt as default}; diff --git a/assets/graph-settings.stories-lycMsxII.js b/assets/graph-settings.stories-lycMsxII.js new file mode 100644 index 0000000000..e824482ceb --- /dev/null +++ b/assets/graph-settings.stories-lycMsxII.js @@ -0,0 +1,3 @@ +import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{G as i}from"./graph-settings-_umr9_il.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./index-fuycm_QE.js";import"./index-k-0mNqHS.js";const a={editableSettings:{control:{type:"array",options:["canvas","graph","snap","image","measure"]}},box:{control:{type:"array"}},range:{control:{type:"object"}},labels:{control:{type:"object"}},step:{control:{type:"object"}},gridStep:{control:{type:"object"}},snapStep:{control:{type:"object"}},valid:{control:{type:"text"}},backgroundImage:{control:{type:"object"}},markings:{control:{type:"select"},table:{type:{summary:'"graph" | "grid" | "none"'}},type:{name:"enum",value:["graph","grid","none"],required:!1}},rulerLabel:{control:{type:"text"}},rulerTicks:{control:{type:"number"}},showTooltips:{control:{type:"boolean"}},onChange:{control:{type:"function"}}},Zt={title:"PerseusEditor/Components/Graph Settings",component:i,argTypes:a},t=m=>e(i,{...m});t.args={range:[[-10,10],[-10,10]]};t.__docgenInfo={description:"",methods:[],displayName:"Default"};var r,o,p;t.parameters={...t.parameters,docs:{...(r=t.parameters)==null?void 0:r.docs,source:{originalSource:`(args): React.ReactElement => { + return ; +}`,...(p=(o=t.parameters)==null?void 0:o.docs)==null?void 0:p.source}}};const $t=["Default"];export{t as Default,$t as __namedExportsOrder,Zt as default}; diff --git a/assets/graph.stories-ElA7ajAW.js b/assets/graph.stories-36_eShqh.js similarity index 89% rename from assets/graph.stories-ElA7ajAW.js rename to assets/graph.stories-36_eShqh.js index 86e8a0aa44..c1b8372a06 100644 --- a/assets/graph.stories-ElA7ajAW.js +++ b/assets/graph.stories-36_eShqh.js @@ -1,4 +1,4 @@ -import{j as n}from"./jsx-runtime-FVsy8kgq.js";import{G as d}from"./graph-Y0iFaKoK.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./svg-image-VUqtnnD6.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./index-dnMhQZ-1.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./index-7vsPyIck.js";import"./index-J2t_5nK1.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./asset-context-I7yIqWki.js";const o=200,I={title:"Perseus/Components/Graph"},r=c=>n(d,{box:[o,o]}),e=c=>n(d,{box:[o,o],labels:["First label","Second label"]});r.__docgenInfo={description:"",methods:[],displayName:"SquareBoxSizeAndOtherwiseEmpty"};e.__docgenInfo={description:"",methods:[],displayName:"LabeledSquaredBox"};var t,s,a;r.parameters={...r.parameters,docs:{...(t=r.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as n}from"./jsx-runtime-FVsy8kgq.js";import{G as d}from"./graph-myhk4Jua.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./svg-image-RL9NlJEY.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./index-dnMhQZ-1.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./index-7vsPyIck.js";import"./index-J2t_5nK1.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./asset-context-I7yIqWki.js";const o=200,I={title:"Perseus/Components/Graph"},r=c=>n(d,{box:[o,o]}),e=c=>n(d,{box:[o,o],labels:["First label","Second label"]});r.__docgenInfo={description:"",methods:[],displayName:"SquareBoxSizeAndOtherwiseEmpty"};e.__docgenInfo={description:"",methods:[],displayName:"LabeledSquaredBox"};var t,s,a;r.parameters={...r.parameters,docs:{...(t=r.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(a=(s=r.parameters)==null?void 0:s.docs)==null?void 0:a.source}}};var i,p,m;e.parameters={...e.parameters,docs:{...(i=e.parameters)==null?void 0:i.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/grapher.stories-cfIxkRMn.js b/assets/grapher.stories-iuL1rjgb.js similarity index 88% rename from assets/grapher.stories-cfIxkRMn.js rename to assets/grapher.stories-iuL1rjgb.js index 401799b79b..e2bc8f5596 100644 --- a/assets/grapher.stories-cfIxkRMn.js +++ b/assets/grapher.stories-iuL1rjgb.js @@ -1,4 +1,4 @@ -import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{R as r}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const A={content:`The graph of the function $h(x)=2|x|$ is shown on the grid below. +import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{R as r}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const A={content:`The graph of the function $h(x)=2|x|$ is shown on the grid below. **Graph the function $f(x)=2|x-8|+1$ in the interactive graph. ** diff --git a/assets/graphie.stories-X9A6xGB6.js b/assets/graphie.stories-6IO_TX8p.js similarity index 77% rename from assets/graphie.stories-X9A6xGB6.js rename to assets/graphie.stories-6IO_TX8p.js index 6affd2d51d..3041891bdb 100644 --- a/assets/graphie.stories-X9A6xGB6.js +++ b/assets/graphie.stories-6IO_TX8p.js @@ -1,4 +1,4 @@ -import{j as c}from"./jsx-runtime-FVsy8kgq.js";import{S as d}from"./server-item-renderer-with-debug-ui-rx6QaX-9.js";import{I as u}from"./article-renderer-6f7Dak4j.js";import{a as g}from"./svg-image-VUqtnnD6.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./dependencies-8XILypbq.js";import"./multi-renderer-PglzmXdY.js";import"./renderer-vBOYiNCS.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./hints-renderer-zKC46_AN.js";import"./shared-3pf9YZIg.js";import"./base-radio-ffaiqOwN.js";import"./choice-none-above-tmJoP6pY.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./hud-FI3E3dT_.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./ke-score-ui-xy7p6xf5.js";import"./side-by-side-kpK-8vW0.js";import"./test-dependencies-UUeUFXqw.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";import"./enums-x5qaTru7.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./answer-choices-uB4giKvU.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";const h={answerArea:Object.fromEntries(u.map(i=>[i,!1])),hints:[],itemDataVersion:{major:0,minor:1},question:{content:"[[☃ image 1]]",images:{},widgets:{"image 1":{alignment:"block",graded:!0,options:{alt:"This chart presents a pie graph divided into 2 sectors: 28 percent are unsuccessful and 72 percent are successful.",backgroundImage:{height:210,url:"web+graphie://cdn.kastatic.org/ka-perseus-graphie/7c0a5afb8670fad738df800ffe16c5e516b48777",width:210},box:[210,210],caption:"Source: NASA “Current and Past Missions”",labels:[],range:[[0,10],[0,10]],static:!1,title:"Percentage of Successful Cometary Missions (1978-2014)"},static:!1,type:"image",version:{major:0,minor:0}}}},answer:null},o=200,pt={title:"Perseus/Components/Graphie"},r=i=>c(g,{box:[o,o],setDrawingAreaAvailable:()=>{},setup:()=>{}}),t=i=>c(d,{item:h});r.__docgenInfo={description:"",methods:[],displayName:"SquareBoxSizeAndOtherwiseEmpty"};t.__docgenInfo={description:"",methods:[],displayName:"PieChartGraphieLabels"};var e,m,p;r.parameters={...r.parameters,docs:{...(e=r.parameters)==null?void 0:e.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as c}from"./jsx-runtime-FVsy8kgq.js";import{S as d}from"./server-item-renderer-with-debug-ui-xomgDBO_.js";import{I as u}from"./article-renderer-TMdCDA85.js";import{a as g}from"./svg-image-RL9NlJEY.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./dependencies-8XILypbq.js";import"./multi-renderer-vtdVtdWv.js";import"./renderer-hPmI_Chp.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./hints-renderer-sA0Ao_qa.js";import"./shared-3pf9YZIg.js";import"./base-radio-TdBv-OLd.js";import"./choice-none-above-HXEAXx7K.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./hud-FI3E3dT_.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./ke-score-ui-xy7p6xf5.js";import"./side-by-side-kpK-8vW0.js";import"./test-dependencies-OZugV_HD.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";import"./enums-x5qaTru7.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./answer-choices-xSqM961S.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";const h={answerArea:Object.fromEntries(u.map(i=>[i,!1])),hints:[],itemDataVersion:{major:0,minor:1},question:{content:"[[☃ image 1]]",images:{},widgets:{"image 1":{alignment:"block",graded:!0,options:{alt:"This chart presents a pie graph divided into 2 sectors: 28 percent are unsuccessful and 72 percent are successful.",backgroundImage:{height:210,url:"web+graphie://cdn.kastatic.org/ka-perseus-graphie/7c0a5afb8670fad738df800ffe16c5e516b48777",width:210},box:[210,210],caption:"Source: NASA “Current and Past Missions”",labels:[],range:[[0,10],[0,10]],static:!1,title:"Percentage of Successful Cometary Missions (1978-2014)"},static:!1,type:"image",version:{major:0,minor:0}}}},answer:null},o=200,pt={title:"Perseus/Components/Graphie"},r=i=>c(g,{box:[o,o],setDrawingAreaAvailable:()=>{},setup:()=>{}}),t=i=>c(d,{item:h});r.__docgenInfo={description:"",methods:[],displayName:"SquareBoxSizeAndOtherwiseEmpty"};t.__docgenInfo={description:"",methods:[],displayName:"PieChartGraphieLabels"};var e,m,p;r.parameters={...r.parameters,docs:{...(e=r.parameters)==null?void 0:e.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return {}} setup={() => {}} />; }`,...(p=(m=r.parameters)==null?void 0:m.docs)==null?void 0:p.source}}};var a,s,n;t.parameters={...t.parameters,docs:{...(a=t.parameters)==null?void 0:a.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/group.stories-pp-2RwGN.js b/assets/group.stories-0jgycKKF.js similarity index 79% rename from assets/group.stories-pp-2RwGN.js rename to assets/group.stories-0jgycKKF.js index 4baac72ad8..40e18ea197 100644 --- a/assets/group.stories-pp-2RwGN.js +++ b/assets/group.stories-0jgycKKF.js @@ -1,4 +1,4 @@ -import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{R as n}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const a={content:`![](https://ka-perseus-graphie.s3.amazonaws.com/3e6d0981127dea205c2becc0ead24702fbe862a1.png) +import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{R as n}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const a={content:`![](https://ka-perseus-graphie.s3.amazonaws.com/3e6d0981127dea205c2becc0ead24702fbe862a1.png) ===== diff --git a/assets/hints-renderer-zKC46_AN.js b/assets/hints-renderer-sA0Ao_qa.js similarity index 99% rename from assets/hints-renderer-zKC46_AN.js rename to assets/hints-renderer-sA0Ao_qa.js index 3e9305a92e..0856f5e1a4 100644 --- a/assets/hints-renderer-zKC46_AN.js +++ b/assets/hints-renderer-sA0Ao_qa.js @@ -1,4 +1,4 @@ -import{a as c,j as g}from"./jsx-runtime-FVsy8kgq.js";import{l as R,R as N,p as A}from"./renderer-vBOYiNCS.js";import{l as i}from"./index-awljIyHI.js";import{c as O}from"./index-dnMhQZ-1.js";import{r as x}from"./index-TT1qJ6UJ.js";import{R as E}from"./index-7vsPyIck.js";import{_ as p}from"./jquery-yG1GhClm.js";import{P as W}from"./i18n-context-hxuRe8oU.js";import{l as d,m as L,o as j,k as I,q as _,h as P}from"./constants-I_nlPaPx.js";import{m as u}from"./media-queries-MaBBbpNq.js";import{A as $}from"./perseus-api-mOiZT07d.js";import{s as F}from"./shared-3pf9YZIg.js";import{U as S}from"./util-XcxTwqb0.js";const v=class v extends x.Component{constructor(){super(...arguments),this.getSerializedState=()=>this.refs.renderer.getSerializedState(),this.restoreSerializedState=(e,t)=>{this.refs.renderer.restoreSerializedState(e,t)}}render(){const{apiOptions:e,className:t,hint:r,lastHint:n,lastRendered:a,pos:y,totalHints:m}=this.props,{isMobile:h}=e,s=O("hint",!h&&"perseus-hint-renderer",h&&i.css(T.newHint),h&&a&&i.css(T.lastRenderedNewHint),n&&"last-hint",a&&"last-rendered",t),o={...e,customKeypad:!1};return c("div",{className:s,tabIndex:"-1",children:[!e.isMobile&&g("span",{className:"perseus-sr-only",children:this.context.strings.hintPos({pos:y+1})}),!e.isMobile&&m!=null&&y!=null&&g("span",{className:"perseus-hint-label",style:{display:"block",color:e.hintProgressColor},children:`${y+1} / ${m}`}),g(N,{ref:"renderer",widgets:r.widgets,content:r.content||"",images:r.images,apiOptions:o,findExternalWidgets:this.props.findExternalWidgets,linterContext:A(this.props.linterContext,"hint"),strings:this.context.strings})]})}};v.contextType=W,v.defaultProps={linterContext:R};let b=v;const T=i.StyleSheet.create({newHint:{marginBottom:1.5*d,borderLeftColor:L,borderLeftStyle:"solid",borderLeftWidth:j,[u.lgOrSmaller]:{paddingLeft:d},[u.smOrSmaller]:{paddingLeft:0},":focus":{outline:"none"}},lastRenderedNewHint:{marginBottom:0,borderLeftColor:I}});b.__docgenInfo={description:"",methods:[{name:"getSerializedState",docblock:null,modifiers:[],params:[],returns:null},{name:"restoreSerializedState",docblock:null,modifiers:[],params:[{name:"state",optional:!1,type:null},{name:"callback",optional:!1,type:null}],returns:null}],displayName:"HintRenderer",props:{apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ +import{a as c,j as g}from"./jsx-runtime-FVsy8kgq.js";import{l as R,R as N,p as A}from"./renderer-hPmI_Chp.js";import{l as i}from"./index-awljIyHI.js";import{c as O}from"./index-dnMhQZ-1.js";import{r as x}from"./index-TT1qJ6UJ.js";import{R as E}from"./index-7vsPyIck.js";import{_ as p}from"./jquery-yG1GhClm.js";import{P as W}from"./i18n-context-hxuRe8oU.js";import{l as d,m as L,o as j,k as I,q as _,h as P}from"./constants-I_nlPaPx.js";import{m as u}from"./media-queries-MaBBbpNq.js";import{A as $}from"./perseus-api-mOiZT07d.js";import{s as F}from"./shared-3pf9YZIg.js";import{U as S}from"./util-YrNvlCNO.js";const v=class v extends x.Component{constructor(){super(...arguments),this.getSerializedState=()=>this.refs.renderer.getSerializedState(),this.restoreSerializedState=(e,t)=>{this.refs.renderer.restoreSerializedState(e,t)}}render(){const{apiOptions:e,className:t,hint:r,lastHint:n,lastRendered:a,pos:y,totalHints:m}=this.props,{isMobile:h}=e,s=O("hint",!h&&"perseus-hint-renderer",h&&i.css(T.newHint),h&&a&&i.css(T.lastRenderedNewHint),n&&"last-hint",a&&"last-rendered",t),o={...e,customKeypad:!1};return c("div",{className:s,tabIndex:"-1",children:[!e.isMobile&&g("span",{className:"perseus-sr-only",children:this.context.strings.hintPos({pos:y+1})}),!e.isMobile&&m!=null&&y!=null&&g("span",{className:"perseus-hint-label",style:{display:"block",color:e.hintProgressColor},children:`${y+1} / ${m}`}),g(N,{ref:"renderer",widgets:r.widgets,content:r.content||"",images:r.images,apiOptions:o,findExternalWidgets:this.props.findExternalWidgets,linterContext:A(this.props.linterContext,"hint"),strings:this.context.strings})]})}};v.contextType=W,v.defaultProps={linterContext:R};let b=v;const T=i.StyleSheet.create({newHint:{marginBottom:1.5*d,borderLeftColor:L,borderLeftStyle:"solid",borderLeftWidth:j,[u.lgOrSmaller]:{paddingLeft:d},[u.smOrSmaller]:{paddingLeft:0},":focus":{outline:"none"}},lastRenderedNewHint:{marginBottom:0,borderLeftColor:I}});b.__docgenInfo={description:"",methods:[{name:"getSerializedState",docblock:null,modifiers:[],params:[],returns:null},{name:"restoreSerializedState",docblock:null,modifiers:[],params:[{name:"state",optional:!1,type:null},{name:"callback",optional:!1,type:null}],returns:null}],displayName:"HintRenderer",props:{apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ isArticle?: boolean; onFocusChange?: ( newFocusPath: FocusPath, diff --git a/assets/hints-renderer.stories-MxAEecxE.js b/assets/hints-renderer.stories-y0rKANuv.js similarity index 96% rename from assets/hints-renderer.stories-MxAEecxE.js rename to assets/hints-renderer.stories-y0rKANuv.js index 649a3dcd89..bc9d07428e 100644 --- a/assets/hints-renderer.stories-MxAEecxE.js +++ b/assets/hints-renderer.stories-y0rKANuv.js @@ -1,4 +1,4 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{V as Y}from"./index-6h5t6F0w.js";import{H as Z}from"./hints-renderer-zKC46_AN.js";import{i as e}from"./interactive-graph-question-builder-Mh2lh4tI.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./renderer-vBOYiNCS.js";import"./version-akiLXZts.js";import"./util-XcxTwqb0.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./index-deFLJwr4.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";const Ee={title:"Perseus/Renderers/Hints Renderer",component:Z,decorators:[X=>m(Y,{style:{left:80},children:m(X,{})})],argTypes:{hintsVisible:{control:{min:0},defaultValue:3}}},r={args:{hints:[{content:"this is hint 1",images:{},replace:!1,widgets:{}},{content:"this is hint 2",images:{},replace:!1,widgets:{}},{content:"this is hint 3",images:{},replace:!1,widgets:{}}]}},i={args:{apiOptions:{flags:{mafs:{angle:!0,circle:!0,linear:!0,"linear-system":!0,point:!0,polygon:!0,ray:!0,segment:!0,quadratic:!0,sinusoid:!0}}},hints:[{...e().withAngle().build(),replace:!1},{...e().withCircle().build(),replace:!1},{...e().withLinear().build(),replace:!1},{...e().withLinearSystem().build(),replace:!1},{...e().withPoints(3).build(),replace:!1},{...e().withPolygon().build(),replace:!1},{...e().withRay().build(),replace:!1},{...e().withSegments().build(),replace:!1},{...e().withQuadratic().build(),replace:!1},{...e().withSinusoid().build(),replace:!1}]}},a={args:{apiOptions:{flags:{mafs:{segment:!0}}},hints:[{...e().build(),replace:!1}]}},n={args:{apiOptions:{flags:{mafs:{linear:!0}}},hints:[{...e().withLinear().build(),replace:!1}]}},t={args:{apiOptions:{flags:{mafs:{"linear-system":!0}}},hints:[{...e().withLinearSystem().build(),replace:!1}]}},s={args:{apiOptions:{flags:{mafs:{ray:!0}}},hints:[{...e().withRay().build(),replace:!1}]}},l={args:{apiOptions:{flags:{mafs:{circle:!0}}},hints:[{...e().withCircle().build(),replace:!1}]}},o={args:{apiOptions:{flags:{mafs:{quadratic:!0}}},hints:[{...e().withQuadratic().build(),replace:!1}]}},p={args:{apiOptions:{flags:{mafs:{circle:!0}}},hints:[{...e().withSinusoid().build(),replace:!1}]}},c={args:{apiOptions:{flags:{mafs:{polygon:!0}}},hints:[{...e().withPolygon().build(),replace:!1},{...e().withPolygon("angles").build(),replace:!1},{...e().withPolygon("sides").build(),replace:!1}]}},u={args:{apiOptions:{flags:{mafs:{point:!0}}},hints:[{...e().withPoints(3).build(),replace:!1}]}},h={args:{apiOptions:{flags:{mafs:{angle:!0}}},hints:[{...e().withAngle().build(),replace:!1}]}};var d,g,f;r.parameters={...r.parameters,docs:{...(d=r.parameters)==null?void 0:d.docs,source:{originalSource:`{ +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{V as Y}from"./index-6h5t6F0w.js";import{H as Z}from"./hints-renderer-sA0Ao_qa.js";import{i as e}from"./interactive-graph-question-builder-Mh2lh4tI.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./renderer-hPmI_Chp.js";import"./version-akiLXZts.js";import"./util-YrNvlCNO.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./index-deFLJwr4.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";const Ee={title:"Perseus/Renderers/Hints Renderer",component:Z,decorators:[X=>m(Y,{style:{left:80},children:m(X,{})})],argTypes:{hintsVisible:{control:{min:0},defaultValue:3}}},r={args:{hints:[{content:"this is hint 1",images:{},replace:!1,widgets:{}},{content:"this is hint 2",images:{},replace:!1,widgets:{}},{content:"this is hint 3",images:{},replace:!1,widgets:{}}]}},i={args:{apiOptions:{flags:{mafs:{angle:!0,circle:!0,linear:!0,"linear-system":!0,point:!0,polygon:!0,ray:!0,segment:!0,quadratic:!0,sinusoid:!0}}},hints:[{...e().withAngle().build(),replace:!1},{...e().withCircle().build(),replace:!1},{...e().withLinear().build(),replace:!1},{...e().withLinearSystem().build(),replace:!1},{...e().withPoints(3).build(),replace:!1},{...e().withPolygon().build(),replace:!1},{...e().withRay().build(),replace:!1},{...e().withSegments().build(),replace:!1},{...e().withQuadratic().build(),replace:!1},{...e().withSinusoid().build(),replace:!1}]}},a={args:{apiOptions:{flags:{mafs:{segment:!0}}},hints:[{...e().build(),replace:!1}]}},n={args:{apiOptions:{flags:{mafs:{linear:!0}}},hints:[{...e().withLinear().build(),replace:!1}]}},t={args:{apiOptions:{flags:{mafs:{"linear-system":!0}}},hints:[{...e().withLinearSystem().build(),replace:!1}]}},s={args:{apiOptions:{flags:{mafs:{ray:!0}}},hints:[{...e().withRay().build(),replace:!1}]}},l={args:{apiOptions:{flags:{mafs:{circle:!0}}},hints:[{...e().withCircle().build(),replace:!1}]}},o={args:{apiOptions:{flags:{mafs:{quadratic:!0}}},hints:[{...e().withQuadratic().build(),replace:!1}]}},p={args:{apiOptions:{flags:{mafs:{circle:!0}}},hints:[{...e().withSinusoid().build(),replace:!1}]}},c={args:{apiOptions:{flags:{mafs:{polygon:!0}}},hints:[{...e().withPolygon().build(),replace:!1},{...e().withPolygon("angles").build(),replace:!1},{...e().withPolygon("sides").build(),replace:!1}]}},u={args:{apiOptions:{flags:{mafs:{point:!0}}},hints:[{...e().withPoints(3).build(),replace:!1}]}},h={args:{apiOptions:{flags:{mafs:{angle:!0}}},hints:[{...e().withAngle().build(),replace:!1}]}};var d,g,f;r.parameters={...r.parameters,docs:{...(d=r.parameters)==null?void 0:d.docs,source:{originalSource:`{ args: { hints: [{ content: "this is hint 1", diff --git a/assets/iframe-sjDFBNDn.js b/assets/iframe-sjDFBNDn.js deleted file mode 100644 index 9f963a4bba..0000000000 --- a/assets/iframe-sjDFBNDn.js +++ /dev/null @@ -1,7 +0,0 @@ -import"../sb-preview/runtime.js";(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))p(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const r of t.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&p(r)}).observe(document,{childList:!0,subtree:!0});function a(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function p(e){if(e.ep)return;e.ep=!0;const t=a(e);fetch(e.href,t)}})();const l="modulepreload",g=function(_,i){return new URL(_,i).href},d={},s=function(i,a,p){let e=Promise.resolve();if(a&&a.length>0){const t=document.getElementsByTagName("link");e=Promise.all(a.map(r=>{if(r=g(r,p),r in d)return;d[r]=!0;const c=r.endsWith(".css"),E=c?'[rel="stylesheet"]':"";if(!!p)for(let m=t.length-1;m>=0;m--){const u=t[m];if(u.href===r&&(!c||u.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${r}"]${E}`))return;const o=document.createElement("link");if(o.rel=c?"stylesheet":l,c||(o.as="script",o.crossOrigin=""),o.href=r,document.head.appendChild(o),c)return new Promise((m,u)=>{o.addEventListener("load",m),o.addEventListener("error",()=>u(new Error(`Unable to preload CSS for ${r}`)))})}))}return e.then(()=>i()).catch(t=>{const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=t,window.dispatchEvent(r),!r.defaultPrevented)throw t})},{createBrowserChannel:O}=__STORYBOOK_MODULE_CHANNELS__,{addons:v}=__STORYBOOK_MODULE_PREVIEW_API__,n=O({page:"preview"});v.setChannel(n);window.__STORYBOOK_ADDONS_CHANNEL__=n;window.CONFIG_TYPE==="DEVELOPMENT"&&(window.__STORYBOOK_SERVER_CHANNEL__=n);const R={"./packages/math-input/src/components/keypad/keypad-button.stories.tsx":async()=>s(()=>import("./keypad-button.stories-tDGMB8WS.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]),import.meta.url),"./packages/math-input/src/components/keypad/keypad-mathquill.stories.tsx":async()=>s(()=>import("./keypad-mathquill.stories-f3PwEzb7.js"),__vite__mapDeps([15,1,2,3,16,10,11,17,18,19,12,13,20,14,21,22,23,7,24,25,26,27,9,8,28,29,30,31]),import.meta.url),"./packages/math-input/src/components/keypad/keypad-pages/keypad-pages.stories.tsx":async()=>s(()=>import("./keypad-pages.stories-UYZo0hoJ.js"),__vite__mapDeps([32,1,2,3,4,5,6,33,28,7,8,9,10,11,12,13,14]),import.meta.url),"./packages/math-input/src/components/keypad/navigation-pad.stories.tsx":async()=>s(()=>import("./navigation-pad.stories-qTnieBG4.js"),__vite__mapDeps([34,1,2,3,4,5,6,29,10,11,14,7,9,12,13]),import.meta.url),"./packages/math-input/src/components/tabbar/tabbar.stories.tsx":async()=>s(()=>import("./tabbar.stories-XOe59aSK.js"),__vite__mapDeps([35,1,2,3,26,10,11,27,9,12,13,14]),import.meta.url),"./packages/math-input/src/components/tabbar/tabbaritem.stories.tsx":async()=>s(()=>import("./tabbaritem.stories-mdibAqRo.js"),__vite__mapDeps([36,27,1,2,3,9,10,11,12,13,14]),import.meta.url),"./packages/math-input/src/full-keypad.stories.tsx":async()=>s(()=>import("./full-keypad.stories-GPmJXYWw.js"),__vite__mapDeps([37,1,2,3,4,5,6,33,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29]),import.meta.url),"./packages/math-input/src/full-mobile-input.stories.tsx":async()=>s(()=>import("./full-mobile-input.stories-nmERbKsP.js"),__vite__mapDeps([38,1,2,3,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,4,5,6,39,40,30,31,41,42,43]),import.meta.url),"./packages/perseus-editor/src/__stories__/article-editor.stories.tsx":async()=>s(()=>import("./article-editor.stories-QkGhUW5J.js"),__vite__mapDeps([44,1,2,3,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165]),import.meta.url),"./packages/perseus-editor/src/__stories__/content-preview.stories.tsx":async()=>s(()=>import("./content-preview.stories-Z9HLruzU.js"),__vite__mapDeps([166,1,2,3,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,167,168,112,113,169,111,170]),import.meta.url),"./packages/perseus-editor/src/__stories__/editor-page.stories.tsx":async()=>s(()=>import("./editor-page.stories-FwV0GRrD.js"),__vite__mapDeps([171,1,2,3,114,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,115,111,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,172,4,5,6,173,169,113,112,174,175]),import.meta.url),"./packages/perseus-editor/src/__stories__/editor.stories.tsx":async()=>s(()=>import("./editor.stories-6ciPhGip.js"),__vite__mapDeps([176,1,2,3,10,11,4,5,6,177,40,110,45,46,47,39,24,17,21,25,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,169,178,179,180,173,174,181,170,182,175]),import.meta.url),"./packages/perseus-editor/src/__stories__/interactive-graph-editor.stories.tsx":async()=>s(()=>import("./interactive-graph-editor.stories-FPTo0uHv.js"),__vite__mapDeps([183,1,2,3,10,11,85,14,23,4,5,6,177,40,110,45,46,47,39,24,17,21,25,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,169,178,179,180,173,174,181,170,184,185,172,175]),import.meta.url),"./packages/perseus-editor/src/__stories__/item-editor.stories.tsx":async()=>s(()=>import("./item-editor.stories-9IrCZRhE.js"),__vite__mapDeps([186,1,2,3,174,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,170]),import.meta.url),"./packages/perseus-editor/src/__stories__/tex-error-view.stories.tsx":async()=>s(()=>import("./tex-error-view.stories-vwGgGZvn.js"),__vite__mapDeps([187,124,1,2,3,10,11,125,69]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/blur-input.stories.tsx":async()=>s(()=>import("./blur-input.stories-6PTTWtP8.js"),__vite__mapDeps([188,1,2,3,4,5,6,118]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/color-select.stories.tsx":async()=>s(()=>import("./color-select.stories-J0t3yMA_.js"),__vite__mapDeps([189,1,2,3,142,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,143]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/color-swatch.stories.tsx":async()=>s(()=>import("./color-swatch.stories-ygHiMCQC.js"),__vite__mapDeps([190,1,2,3,143,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/device-framer.stories.tsx":async()=>s(()=>import("./device-framer.stories-q7yy_9TI.js"),__vite__mapDeps([191,1,2,3,121,14,112,45,46,40,47,39,24,11,17,21,25,10,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,113]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/graph-settings.stories.tsx":async()=>s(()=>import("./graph-settings.stories-bA3xZ_VF.js"),__vite__mapDeps([192,1,2,3,129,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,117]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/interactive-graph-settings.stories.tsx":async()=>s(()=>import("./interactive-graph-settings.stories-4qH2dugu.js"),__vite__mapDeps([193,1,2,3,135,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,134,123,125,194]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-ellipse-settings.stories.tsx":async()=>s(()=>import("./locked-ellipse-settings.stories-WfNLgvVC.js"),__vite__mapDeps([195,1,2,3,137,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,138,139,140,141,142,143,144]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-figures-section.stories.tsx":async()=>s(()=>import("./locked-figures-section.stories-pFsuMu6d.js"),__vite__mapDeps([196,1,2,3,10,11,14,136,83,12,13,20,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,134,123,125,93,77,48,40,46,25,50,51,52,53,55,58,59,60,61,66,67,137,45,39,24,26,27,9,7,8,28,29,30,31,42,43,68,72,74,75,76,78,79,80,82,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,138,139,140,141,142,143,144,145,146,147,148,149,150,151]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-function-settings.stories.tsx":async()=>s(()=>import("./locked-function-settings.stories-pknes1m1.js"),__vite__mapDeps([197,1,2,3,145,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,93,77,48,40,46,25,50,51,52,53,55,58,59,60,61,66,67,76,141,45,39,24,26,27,9,7,8,28,29,30,31,42,43,68,72,74,75,78,79,80,82,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,139,142,143,138,111,144,146]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-label-settings.stories.tsx":async()=>s(()=>import("./locked-label-settings.stories-GcIwtppq.js"),__vite__mapDeps([198,1,2,3,141,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,139,142,143]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-line-settings.stories.tsx":async()=>s(()=>import("./locked-line-settings.stories-afsLhcYP.js"),__vite__mapDeps([199,1,2,3,147,46,40,47,51,11,10,14,49,52,53,54,17,25,55,56,57,58,83,12,13,20,23,84,19,69,73,85,16,18,21,22,70,71,86,62,63,41,64,65,81,87,88,89,93,77,48,50,59,60,61,66,67,138,45,39,24,26,27,9,7,8,28,29,30,31,42,43,68,72,74,75,76,78,79,80,82,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,141,139,142,143,144,146,148,149]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-point-settings.stories.tsx":async()=>s(()=>import("./locked-point-settings.stories-xXz7_RBE.js"),__vite__mapDeps([200,1,2,3,148,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,138,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,141,139,142,143,149]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-polygon-settings.stories.tsx":async()=>s(()=>import("./locked-polygon-settings.stories-9APa6903.js"),__vite__mapDeps([201,1,2,3,150,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,141,139,142,143,138,111,149,144]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-vector-settings.stories.tsx":async()=>s(()=>import("./locked-vector-settings.stories-udVxWXO2.js"),__vite__mapDeps([202,1,2,3,151,46,40,47,51,11,10,14,49,52,53,54,17,25,55,56,57,58,83,12,13,20,23,84,19,69,73,85,16,18,21,22,70,71,86,62,63,41,64,65,81,87,88,89,138,45,39,24,26,27,9,7,8,28,29,30,31,42,43,48,50,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,141,139,142,143,146]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/scrollless-number-text-field.stories.tsx":async()=>s(()=>import("./scrollless-number-text-field.stories-nOE7CJ-i.js"),__vite__mapDeps([203,1,2,3,10,11,23,139,76,14,69,77]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/section-control-button.stories.tsx":async()=>s(()=>import("./section-control-button.stories-rjqemyDY.js"),__vite__mapDeps([204,1,2,3,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,122,111,123]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/toggleable-caret.stories.tsx":async()=>s(()=>import("./toggleable-caret.stories-nhN-z0SF.js"),__vite__mapDeps([205,1,2,3,21,125,69,10,11]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/viewport-resizer.stories.tsx":async()=>s(()=>import("./viewport-resizer.stories-bxCH8kbX.js"),__vite__mapDeps([206,1,2,3,4,5,6,169,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,113]),import.meta.url),"./packages/perseus-editor/src/diffs/__stories__/structured-item-diff.stories.tsx":async()=>s(()=>import("./structured-item-diff.stories-mVax7sIn.js"),__vite__mapDeps([207,1,2,3,178,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,179,111,117,180,208]),import.meta.url),"./packages/perseus-editor/src/diffs/__stories__/tags-diff.stories.tsx":async()=>s(()=>import("./tags-diff.stories-IJbiGITL.js"),__vite__mapDeps([209,1,2,3,180,179,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,117,208]),import.meta.url),"./packages/perseus-editor/src/diffs/__stories__/text-diff.stories.tsx":async()=>s(()=>import("./text-diff.stories-n9pYIS3A.js"),__vite__mapDeps([210,1,2,3,179,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,117,208]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/categorizer-editor.stories.tsx":async()=>s(()=>import("./categorizer-editor.stories-uPdGtW4L.js"),__vite__mapDeps([211,1,2,3,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,4,5,6,115,111,116,117]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/definition-editor.stories.tsx":async()=>s(()=>import("./definition-editor.stories-dj4JMG2e.js"),__vite__mapDeps([212,1,2,3,4,5,6,119,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,116,117,120,121,122,123,124,125]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/dropdown-editor.stories.tsx":async()=>s(()=>import("./dropdown-editor.stories-ReLil4hd.js"),__vite__mapDeps([213,1,2,3,4,5,6,126,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,116,117]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/explanation-editor.stories.tsx":async()=>s(()=>import("./explanation-editor.stories-s1DaRjsi.js"),__vite__mapDeps([214,1,2,3,4,5,6,127,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,116,117,120,121,122,123,124,125]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/expression-editor.stories.tsx":async()=>s(()=>import("./expression-editor.stories-bX7eLN_p.js"),__vite__mapDeps([215,1,2,3,11,216,83,10,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217,128,111,117]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/image-editor.stories.tsx":async()=>s(()=>import("./image-editor.stories-eJ2oFMJF.js"),__vite__mapDeps([218,1,2,3,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,4,5,6,130,111,116,118,120,117,121,122,123,124,125]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/input-number-editor.stories.tsx":async()=>s(()=>import("./input-number-editor.stories-jpbE69jO.js"),__vite__mapDeps([219,1,2,3,4,5,6,131,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,118]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/interaction-editor.stories.tsx":async()=>s(()=>import("./interaction-editor.stories-0GCwKMr4.js"),__vite__mapDeps([220,1,2,3,132,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,116,129,111,117]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/interactive-graph-editor.stories.tsx":async()=>s(()=>import("./interactive-graph-editor.stories-_kYMxH2Y.js"),__vite__mapDeps([221,1,2,3,175,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,133,111,134,123,125,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,194]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/label-image-editor.stories.tsx":async()=>s(()=>import("./label-image-editor.stories-uSv6gsx4.js"),__vite__mapDeps([222,1,2,3,11,152,45,46,40,47,39,24,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,116,153,154,111,155,156,157,140,158]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/matcher-editor.stories.tsx":async()=>s(()=>import("./matcher-editor.stories-crM94-Mu.js"),__vite__mapDeps([223,1,2,3,4,5,6,159,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,117]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/number-line-editor.stories.tsx":async()=>s(()=>import("./number-line-editor.stories-rmnn8J8W.js"),__vite__mapDeps([224,1,2,3,4,5,6,160,46,40,47,45,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,116,117]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/numeric-input-editor.stories.tsx":async()=>s(()=>import("./numeric-input-editor.stories-8JKpa6PE.js"),__vite__mapDeps([225,1,2,3,4,5,6,161,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,116,120,117,121,122,123,124,125]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/phet-simulation-editor.stories.tsx":async()=>s(()=>import("./phet-simulation-editor.stories-HA2gTg8K.js"),__vite__mapDeps([226,4,5,6,162,1,2,3,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/python-program-editor.stories.tsx":async()=>s(()=>import("./python-program-editor.stories-Hi5tomDI.js"),__vite__mapDeps([227,1,2,3,4,5,6,163,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/radio-editor.stories.tsx":async()=>s(()=>import("./radio-editor.stories-fbsTIdy5.js"),__vite__mapDeps([228,1,2,3,11,164,45,46,40,47,39,24,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,117,120,121,122,123,124,125]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/sorter-editor.stories.tsx":async()=>s(()=>import("./sorter-editor.stories-sdFaYK7b.js"),__vite__mapDeps([229,1,2,3,4,5,6,165,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,117]),import.meta.url),"./packages/perseus-editor/src/widgets/label-image/__stories__/answer-choices.stories.tsx":async()=>s(()=>import("./answer-choices.stories-1uyTphLo.js"),__vite__mapDeps([230,1,2,3,4,5,6,11,154,45,46,40,47,39,24,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,153]),import.meta.url),"./packages/perseus-editor/src/widgets/label-image/__stories__/behavior.stories.tsx":async()=>s(()=>import("./behavior.stories-CrtW_WGC.js"),__vite__mapDeps([231,1,2,3,4,5,6,155,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109]),import.meta.url),"./packages/perseus-editor/src/widgets/label-image/__stories__/marker.stories.tsx":async()=>s(()=>import("./marker.stories-t5e_DMOa.js"),__vite__mapDeps([232,1,2,3,4,5,6,11,157,45,46,40,47,39,24,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,140,153]),import.meta.url),"./packages/perseus-editor/src/widgets/label-image/__stories__/question-markers.stories.tsx":async()=>s(()=>import("./question-markers.stories-eRXo7rrw.js"),__vite__mapDeps([233,1,2,3,11,156,45,46,40,47,39,24,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,157,111,140,153]),import.meta.url),"./packages/perseus-editor/src/widgets/label-image/__stories__/select-image.stories.tsx":async()=>s(()=>import("./select-image.stories-1gYN3jcx.js"),__vite__mapDeps([234,1,2,3,11,158,45,46,40,47,39,24,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,153]),import.meta.url),"./packages/perseus/src/__stories__/article-renderer.stories.tsx":async()=>s(()=>import("./article-renderer.stories-qJVrh-Ez.js"),__vite__mapDeps([235,1,2,3,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,4,5,6,236,217,45,46,40,47,39,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,237,167,238]),import.meta.url),"./packages/perseus/src/__stories__/hints-renderer.stories.tsx":async()=>s(()=>import("./hints-renderer.stories-MxAEecxE.js"),__vite__mapDeps([239,1,2,3,10,11,109,48,40,46,47,41,25,49,17,50,51,14,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,81,82,184,96,97,98]),import.meta.url),"./packages/perseus/src/__stories__/server-item-renderer.stories.tsx":async()=>s(()=>import("./server-item-renderer.stories-tNcJTbEd.js"),__vite__mapDeps([240,1,2,3,241,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,242,182,236,217,237]),import.meta.url),"./packages/perseus/src/components/__stories__/button-group.stories.tsx":async()=>s(()=>import("./button-group.stories-Jd2GkQu3.js"),__vite__mapDeps([243,1,2,3,94,11]),import.meta.url),"./packages/perseus/src/components/__stories__/fixed-to-responsive.stories.tsx":async()=>s(()=>import("./fixed-to-responsive.stories-5lHeA-vn.js"),__vite__mapDeps([244,1,2,3,52,53,49,54]),import.meta.url),"./packages/perseus/src/components/__stories__/graph.stories.tsx":async()=>s(()=>import("./graph.stories-ElA7ajAW.js"),__vite__mapDeps([245,1,2,3,95,46,40,47,51,11,10,14,49,52,53,54,17,25,55,56,57,58,50]),import.meta.url),"./packages/perseus/src/components/__stories__/graphie.stories.tsx":async()=>s(()=>import("./graphie.stories-X9A6xGB6.js"),__vite__mapDeps([246,1,2,3,241,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,242,182,236,217,237]),import.meta.url),"./packages/perseus/src/components/__stories__/hud.stories.tsx":async()=>s(()=>import("./hud.stories-uFVe3Cbh.js"),__vite__mapDeps([247,1,2,3,99,11,54]),import.meta.url),"./packages/perseus/src/components/__stories__/icon.stories.tsx":async()=>s(()=>import("./icon.stories-XuV9p1XS.js"),__vite__mapDeps([248,1,2,3,57,86]),import.meta.url),"./packages/perseus/src/components/__stories__/image-loader.stories.tsx":async()=>s(()=>import("./image-loader.stories-EA1-XT2A.js"),__vite__mapDeps([249,1,2,3,58,52]),import.meta.url),"./packages/perseus/src/components/__stories__/info-tip.stories.tsx":async()=>s(()=>import("./info-tip.stories-EgkjpDRN.js"),__vite__mapDeps([250,1,2,3,68,69,10,11,14,17,18,19,12,13,20,21,23,22]),import.meta.url),"./packages/perseus/src/components/__stories__/inline-icon.stories.tsx":async()=>s(()=>import("./inline-icon.stories-7-dBjnI0.js"),__vite__mapDeps([251,1,2,3,56]),import.meta.url),"./packages/perseus/src/components/__stories__/input-with-examples.stories.tsx":async()=>s(()=>import("./input-with-examples.stories-sWnNtSAK.js"),__vite__mapDeps([252,1,2,3,74,48,40,46,47,41,25,49,17,50,51,11,10,14,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,75,76,23,69,77,78]),import.meta.url),"./packages/perseus/src/components/__stories__/lint.stories.tsx":async()=>s(()=>import("./lint.stories-nJ_Oxwzz.js"),__vite__mapDeps([253,1,2,3,66,11,17,54,56]),import.meta.url),"./packages/perseus/src/components/__stories__/math-input.stories.tsx":async()=>s(()=>import("./math-input.stories-6v1Hp3Uf.js"),__vite__mapDeps([254,1,2,3,72,39,40,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,73,16,18,19,20,22,23,49,47,70,71]),import.meta.url),"./packages/perseus/src/components/__stories__/multi-button-group.stories.tsx":async()=>s(()=>import("./multi-button-group.stories-Cjx9YjZ1.js"),__vite__mapDeps([255,1,2,3,100,11,17]),import.meta.url),"./packages/perseus/src/components/__stories__/number-input.stories.tsx":async()=>s(()=>import("./number-input.stories-upCNzoBF.js"),__vite__mapDeps([256,1,2,3,101,46,40,47,49,63,41,17,70,71]),import.meta.url),"./packages/perseus/src/components/__stories__/range-input.stories.tsx":async()=>s(()=>import("./range-input.stories-LiUT95hU.js"),__vite__mapDeps([257,1,2,3,102,63,41,101,46,40,47,49,17,70,71]),import.meta.url),"./packages/perseus/src/components/__stories__/simple-keypad-input.stories.tsx":async()=>s(()=>import("./simple-keypad-input.stories-tZsmCiIG.js"),__vite__mapDeps([258,1,2,3,79,39,40,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,63]),import.meta.url),"./packages/perseus/src/components/__stories__/sortable.stories.tsx":async()=>s(()=>import("./sortable.stories-QYY7vNb_.js"),__vite__mapDeps([259,1,2,3,105,48,40,46,47,41,25,49,17,50,51,11,10,14,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71]),import.meta.url),"./packages/perseus/src/components/__stories__/stub-tag-editor.stories.tsx":async()=>s(()=>import("./stub-tag-editor.stories-L-kojrKS.js"),__vite__mapDeps([260,1,2,3,64,63,41,65,47,17]),import.meta.url),"./packages/perseus/src/components/__stories__/svg-image.stories.tsx":async()=>s(()=>import("./svg-image.stories-_f-lKvGI.js"),__vite__mapDeps([261,1,2,3,51,40,46,47,11,10,14,49,52,53,54,17,25,55,56,57,58]),import.meta.url),"./packages/perseus/src/components/__stories__/tex.stories.tsx":async()=>s(()=>import("./tex.stories-EbmgsjH-.js"),__vite__mapDeps([262,1,2,3,59,52]),import.meta.url),"./packages/perseus/src/components/__stories__/text-input.stories.tsx":async()=>s(()=>import("./text-input.stories-4UlPFEkn.js"),__vite__mapDeps([263,1,2,3,75,76,10,11,14,23,69,77,17]),import.meta.url),"./packages/perseus/src/components/__stories__/text-list-editor.stories.tsx":async()=>s(()=>import("./text-list-editor.stories-IcrK9bTU.js"),__vite__mapDeps([264,1,2,3,4,5,6,65,47,63,41,17]),import.meta.url),"./packages/perseus/src/components/__stories__/tooltip.stories.tsx":async()=>s(()=>import("./tooltip.stories-oMVPbUSS.js"),__vite__mapDeps([265,1,2,3,10,11,78,17]),import.meta.url),"./packages/perseus/src/components/__stories__/zoomable-tex.stories.tsx":async()=>s(()=>import("./zoomable-tex.stories-3wtGigPF.js"),__vite__mapDeps([266,1,2,3,61,50,59,52,60,17]),import.meta.url),"./packages/perseus/src/components/__stories__/zoomable.stories.tsx":async()=>s(()=>import("./zoomable.stories-i6qkT2VG.js"),__vite__mapDeps([267,1,2,3,60,17]),import.meta.url),"./packages/perseus/src/components/visibility-observer/__stories__/visibility-observer.stories.tsx":async()=>s(()=>import("./visibility-observer.stories-pidMot5o.js"),__vite__mapDeps([268,1,2,3,17]),import.meta.url),"./packages/perseus/src/multi-items/__stories__/multi-renderer.stories.tsx":async()=>s(()=>import("./multi-renderer.stories-mfyjGc4B.js"),__vite__mapDeps([269,1,2,3,10,11,23,83,12,13,20,14,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,181,242,182,236,217,237]),import.meta.url),"./packages/perseus/src/widgets/categorizer/categorizer.stories.tsx":async()=>s(()=>import("./categorizer.stories-DqVSQ-gQ.js"),__vite__mapDeps([270,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/cs-program/cs-program.stories.tsx":async()=>s(()=>import("./cs-program.stories-qaNPw6Pu.js"),__vite__mapDeps([271,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/definition/definition.stories.tsx":async()=>s(()=>import("./definition.stories-itXLw16s.js"),__vite__mapDeps([272,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217,236,237]),import.meta.url),"./packages/perseus/src/widgets/deprecated-standin/__stories__/deprecated-standin.stories.tsx":async()=>s(()=>import("./deprecated-standin.stories-owg1iPBd.js"),__vite__mapDeps([273,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/dropdown/dropdown.stories.tsx":async()=>s(()=>import("./dropdown.stories-fsJ_RKEi.js"),__vite__mapDeps([274,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/explanation/explanation.stories.tsx":async()=>s(()=>import("./explanation.stories-ipVYxuOT.js"),__vite__mapDeps([275,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/expression/expression.stories.tsx":async()=>s(()=>import("./expression.stories-d1DbWABc.js"),__vite__mapDeps([276,1,2,3,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,39,40,30,31,41,42,43,4,5,6,241,83,20,23,84,19,69,73,85,16,18,22,49,70,71,86,62,63,64,65,47,81,54,87,56,57,88,89,45,46,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,242,182,236,217,237,238]),import.meta.url),"./packages/perseus/src/widgets/graded-group-set/graded-group-set.stories.tsx":async()=>s(()=>import("./graded-group-set.stories-mCi0tFhn.js"),__vite__mapDeps([277,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/graded-group/graded-group.stories.tsx":async()=>s(()=>import("./graded-group.stories-lS44KChW.js"),__vite__mapDeps([278,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/grapher/grapher.stories.tsx":async()=>s(()=>import("./grapher.stories-cfIxkRMn.js"),__vite__mapDeps([279,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/group/group.stories.tsx":async()=>s(()=>import("./group.stories-pp-2RwGN.js"),__vite__mapDeps([280,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/iframe/iframe.stories.tsx":async()=>s(()=>import("./iframe.stories-quHRXFEI.js"),__vite__mapDeps([281,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/image/image.stories.tsx":async()=>s(()=>import("./image.stories-rckXI6mh.js"),__vite__mapDeps([282,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/input-number/input-number.stories.tsx":async()=>s(()=>import("./input-number.stories-NEZe-YPw.js"),__vite__mapDeps([283,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/interaction/interaction.stories.tsx":async()=>s(()=>import("./interaction.stories-iwlmyocz.js"),__vite__mapDeps([284,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/interactive-graphs/interactive-graph-regression.stories.tsx":async()=>s(()=>import("./interactive-graph-regression.stories-JcREPvIA.js"),__vite__mapDeps([285,1,2,3,48,40,46,47,41,25,49,17,50,51,11,10,14,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,184,96,97,98]),import.meta.url),"./packages/perseus/src/widgets/interactive-graphs/interactive-graph.stories.tsx":async()=>s(()=>import("./interactive-graph.stories-fGiKvBZS.js"),__vite__mapDeps([286,1,2,3,91,11,19,10,12,13,20,14,84,69,92,23,70,71,52,54,83,73,85,16,17,18,21,22,49,86,62,63,41,64,65,47,81,87,56,57,88,89,106,68,25,45,46,40,39,24,26,27,9,7,8,28,29,30,31,42,43,48,50,51,53,55,58,59,60,61,66,67,72,74,75,76,77,78,79,80,82,90,93,94,95,96,97,98,99,100,101,102,103,104,105,107,108,109,216,182,217,185,184]),import.meta.url),"./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-functions.stories.tsx":async()=>s(()=>import("./locked-functions.stories-DiYpkFbz.js"),__vite__mapDeps([287,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217,185,184]),import.meta.url),"./packages/perseus/src/widgets/label-image/__stories__/answer-choices.stories.tsx":async()=>s(()=>import("./answer-choices.stories-yHzR0jgj.js"),__vite__mapDeps([288,1,2,3,23,10,11,93,20,12,13,14,69,77,17,19,21,22,18,70,71,48,40,46,47,41,25,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67]),import.meta.url),"./packages/perseus/src/widgets/label-image/__stories__/answer-pill.stories.tsx":async()=>s(()=>import("./answer-pill.stories-VkLpBIz9.js"),__vite__mapDeps([289,1,2,3,104,10,11,20,12,13,14,23,22,17,70,71,48,40,46,47,41,25,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67]),import.meta.url),"./packages/perseus/src/widgets/label-image/__stories__/label-image.stories.tsx":async()=>s(()=>import("./label-image.stories-N_VL3eUK.js"),__vite__mapDeps([290,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/label-image/__stories__/marker.stories.tsx":async()=>s(()=>import("./marker.stories-DOVdrW59.js"),__vite__mapDeps([291,1,2,3,11,103,10,14,70,71,86,57,104,20,12,13,23,22,17,48,40,46,47,41,25,49,50,51,52,53,54,55,56,58,59,60,61,62,63,64,65,66,67]),import.meta.url),"./packages/perseus/src/widgets/matcher/matcher.stories.tsx":async()=>s(()=>import("./matcher.stories-EUShu0d6.js"),__vite__mapDeps([292,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/matrix/matrix.stories.tsx":async()=>s(()=>import("./matrix.stories-jxKAaBOe.js"),__vite__mapDeps([293,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/number-line/number-line.stories.tsx":async()=>s(()=>import("./number-line.stories-T0jmTY2_.js"),__vite__mapDeps([294,1,2,3,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,216,83,20,23,84,19,69,73,85,16,18,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217,241,242,236,237,238,4,5,6]),import.meta.url),"./packages/perseus/src/widgets/numeric-input/numeric-input.stories.tsx":async()=>s(()=>import("./numeric-input.stories-iXupslkj.js"),__vite__mapDeps([295,1,2,3,4,5,6,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/orderer/orderer.stories.tsx":async()=>s(()=>import("./orderer.stories-X3e5f_od.js"),__vite__mapDeps([296,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/passage-ref/passage-ref.stories.tsx":async()=>s(()=>import("./passage-ref.stories-SR_UfM-e.js"),__vite__mapDeps([297,1,2,3,10,11,216,83,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/passage/passage.stories.tsx":async()=>s(()=>import("./passage.stories-md5VTRVQ.js"),__vite__mapDeps([298,1,2,3,10,11,216,83,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/phet-simulation/phet-simulation.stories.tsx":async()=>s(()=>import("./phet-simulation.stories-mBHmgFdo.js"),__vite__mapDeps([299,91,1,2,3,11,19,10,12,13,20,14,84,69,92,23,70,71,52,54]),import.meta.url),"./packages/perseus/src/widgets/plotter/plotter.stories.tsx":async()=>s(()=>import("./plotter.stories-dU2cwLGA.js"),__vite__mapDeps([300,1,2,3,10,11,216,83,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/python-program/python-program.stories.tsx":async()=>s(()=>import("./python-program.stories-rIntdjhO.js"),__vite__mapDeps([301,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/base-radio.stories.tsx":async()=>s(()=>import("./base-radio.stories-FR_3w-BQ.js"),__vite__mapDeps([302,1,2,3,4,5,6,80,11,49,17,47,70,71,62,63,41,64,65,54,81,82,46,40,83,10,12,13,20,14,23,84,19,69,73,85,16,18,21,22,86,87,56,57,88,89,90,48,25,50,51,52,53,55,58,59,60,61,66,67]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/choice-icon.stories.tsx":async()=>s(()=>import("./choice-icon.stories-A9BIRyST.js"),__vite__mapDeps([303,1,2,3,87,14,11,70,71,56,57,54,88]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/choice-none-above.stories.tsx":async()=>s(()=>import("./choice-none-above.stories-uiVXuZMI.js"),__vite__mapDeps([304,1,2,3,4,5,6,90,70,71,48,40,46,47,41,25,49,17,50,51,11,10,14,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,83,12,13,20,23,84,19,69,73,85,16,18,21,22,86,81,87,88,89]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/choice.stories.tsx":async()=>s(()=>import("./choice.stories-CaPa6g2I.js"),__vite__mapDeps([305,1,2,3,4,5,6,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/focus-ring.stories.tsx":async()=>s(()=>import("./focus-ring.stories-K51oxFam.js"),__vite__mapDeps([306,1,2,3,54,88,11]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/option-status.stories.tsx":async()=>s(()=>import("./option-status.stories-fqNu8JNa.js"),__vite__mapDeps([307,1,2,3,89,14,11,70,71]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/radio.stories.tsx":async()=>s(()=>import("./radio.stories-4ItdbQNa.js"),__vite__mapDeps([308,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217,168]),import.meta.url),"./packages/perseus/src/widgets/sorter/sorter.stories.tsx":async()=>s(()=>import("./sorter.stories-5TQM9e08.js"),__vite__mapDeps([309,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url),"./packages/perseus/src/widgets/video/video-transcript-link.stories.tsx":async()=>s(()=>import("./video-transcript-link.stories-LWRoilbr.js"),__vite__mapDeps([310,1,2,3,106,10,11,85,14,92,12,13,20,69,70,71,52]),import.meta.url),"./packages/perseus/src/widgets/video/video.stories.tsx":async()=>s(()=>import("./video.stories-XyqqlZXc.js"),__vite__mapDeps([311,1,2,3,216,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,182,108,109,217]),import.meta.url)};async function y(_){return R[_]()}const{composeConfigs:P,PreviewWeb:T,ClientApi:L}=__STORYBOOK_MODULE_PREVIEW_API__,I=async()=>{const _=await Promise.all([s(()=>import("./entry-preview-X1b_vaBy.js"),__vite__mapDeps([312,2,3,313,55,17]),import.meta.url),s(()=>import("./entry-preview-docs-9fNegKGE.js"),__vite__mapDeps([314,315,3,13,6,2]),import.meta.url),s(()=>import("./preview-VI2eoWmp.js"),__vite__mapDeps([316,317]),import.meta.url),s(()=>import("./preview--4xedfSa.js"),__vite__mapDeps([]),import.meta.url),s(()=>import("./preview-98732p1V.js"),__vite__mapDeps([318,5,6]),import.meta.url),s(()=>import("./preview-FekBEZxm.js"),__vite__mapDeps([319,6]),import.meta.url),s(()=>import("./preview-1MSgikpN.js"),__vite__mapDeps([320,97]),import.meta.url),s(()=>import("./preview-u8M_OEO2.js"),__vite__mapDeps([321,6]),import.meta.url),s(()=>import("./preview-bEa2SesL.js"),__vite__mapDeps([]),import.meta.url),s(()=>import("./preview-Rg3KxM6d.js"),__vite__mapDeps([]),import.meta.url),s(()=>import("./preview-XBooDLpI.js"),__vite__mapDeps([322,1,2,3,14,10,11,45,46,40,47,39,24,17,21,25,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,236,217,237]),import.meta.url)]);return P(_)};window.__STORYBOOK_PREVIEW__=window.__STORYBOOK_PREVIEW__||new T;window.__STORYBOOK_STORY_STORE__=window.__STORYBOOK_STORY_STORE__||window.__STORYBOOK_PREVIEW__.storyStore;window.__STORYBOOK_CLIENT_API__=window.__STORYBOOK_CLIENT_API__||new L({storyStore:window.__STORYBOOK_PREVIEW__.storyStore});window.__STORYBOOK_PREVIEW__.initialize({importFn:y,getProjectAnnotations:I});export{s as _}; -function __vite__mapDeps(indexes) { - if (!__vite__mapDeps.viteFileDeps) { - __vite__mapDeps.viteFileDeps = ["./keypad-button.stories-tDGMB8WS.js","./jsx-runtime-FVsy8kgq.js","./index-TT1qJ6UJ.js","./_commonjsHelpers-4gQjN7DL.js","./chunk-WFFRPTHA-zlNDxfrq.js","./preview-errors-7FWlPnjy.js","./index-PPLHz8o0.js","./button-assets-txIojR3b.js","./keypad-button-rKskH7oM.js","./index-WNT3sUKf.js","./index-6h5t6F0w.js","./index-awljIyHI.js","./react-router-dom-W_e8xVUu.js","./index-tvtfaFq4.js","./index-deFLJwr4.js","./keypad-mathquill.stories-f3PwEzb7.js","./index-BPSWBbj5.js","./index-7vsPyIck.js","./index-YCTzZMik.js","./index-rfN0X25E.js","./index-o3wWn3Y5.js","./index-CkAxGj88.js","./Popper-kGnKOid7.js","./index-h_CiYGGb.js","./mobile-keypad-hKjeQGNp.js","./index-J2t_5nK1.js","./tabbar-WYCYDof0.js","./item-X9tjzx12.js","./operators-page-C_EsmjPW.js","./navigation-pad-ss7r0FKW.js","./key-translator-IA-2V2LV.js","./_commonjs-dynamic-modules-h-SxKiO4.js","./keypad-pages.stories-UYZo0hoJ.js","./index-VDi1Le_1.js","./navigation-pad.stories-qTnieBG4.js","./tabbar.stories-XOe59aSK.js","./tabbaritem.stories-mdibAqRo.js","./full-keypad.stories-GPmJXYWw.js","./full-mobile-input.stories-nmERbKsP.js","./prop-types-3bOVFRDQ.js","./version-akiLXZts.js","./invariant-bu5zBsRS.js","./prop-types-mRar-0kQ.css","./enums-x5qaTru7.js","./article-editor.stories-QkGhUW5J.js","./article-renderer-6f7Dak4j.js","./util-XcxTwqb0.js","./jquery-yG1GhClm.js","./renderer-vBOYiNCS.js","./index-dnMhQZ-1.js","./asset-context-I7yIqWki.js","./svg-image-VUqtnnD6.js","./dependencies-8XILypbq.js","./fixed-to-responsive-1fSZ1n--.js","./constants-I_nlPaPx.js","./client-rbWgHzHN.js","./inline-icon-tKY1iMkH.js","./icon-paths-AuJwhOz7.js","./image-loader-mgyZcN0j.js","./tex-VP4hirbI.js","./zoomable-CA1NzpZD.js","./zoomable-tex-MZi7Hqbp.js","./perseus-api-mOiZT07d.js","./index-k-0mNqHS.js","./stub-tag-editor-Hmby24Jq.js","./text-list-editor-pe7AGDAl.js","./lint-I_5mQeXl.js","./renderer-qr6V1vrR.css","./index-K9BSJPWl.js","./index-xuPsLuPk.js","./i18n-context-hxuRe8oU.js","./strings-OAjNfY6D.js","./math-input-b6JdL4xR.js","./index-2dmvOE3q.js","./input-with-examples-x87iVHoc.js","./text-input-15gEhfDF.js","./index-QCAhLhLD.js","./minus-bold-ONmDo3Ve.js","./tooltip-S_hcgkAT.js","./simple-keypad-input-zNNuoI83.js","./base-radio-ffaiqOwN.js","./media-queries-MaBBbpNq.js","./shared-3pf9YZIg.js","./choice-E4eyMygy.js","./index-ngddCaVG.js","./index-qUyqkRvh.js","./icon-YuYiVxsK.js","./choice-icon-LAaL9HdM.js","./focus-ring-sgSTt4fM.js","./option-status-6glEGOB8.js","./choice-none-above-tmJoP6pY.js","./phet-simulation-fZpYIOCA.js","./arrow-square-out-bold-090vdhrx.js","./answer-choices-uB4giKvU.js","./button-group-nsoLlHtM.js","./graph-Y0iFaKoK.js","./index-IIMKO4_x.js","./tiny-invariant-bHgPayXn.js","./bundle.esm-7jAAHVxW.js","./hud-FI3E3dT_.js","./multi-button-group-a0iIfrwx.js","./number-input-dpusjjfa.js","./range-input-R0Q6JH86.js","./marker-bfDDVuIS.js","./answer-pill-YUUkj-ih.js","./sortable-MNMZ70x0.js","./video-transcript-link-WVgIZGhp.js","./article-renderer-bsRD8PfZ.css","./multi-renderer-PglzmXdY.js","./hints-renderer-zKC46_AN.js","./article-editor-bhN33pAO.js","./components-GHvuFaIn.js","./device-framer-YjfQ5GqB.js","./constants-hQyjCzwz.js","./register-all-widgets-and-editors-for-testing-EmJZ0mCF.js","./categorizer-editor-am_KbYeJ.js","./editor-jsonify-iuVqcZSO.js","./index-0C4KXdeC.js","./blur-input-hjJsfoK9.js","./definition-editor-U6nI8Sor.js","./editor-HVcPyY4Q.js","./index-SM3muJE2.js","./section-control-button-c-G3Veu9.js","./index-tFzzSRL2.js","./tex-error-view-Y2BSLjwB.js","./toggleable-caret-lFiCktzo.js","./dropdown-editor-YwuHUUGx.js","./explanation-editor-mOtE1dCr.js","./expression-editor-QP0tq_O5.js","./graph-settings-F_5lrkPp.js","./image-editor-vUFdKz9N.js","./input-number-editor-kZK8JIcV.js","./index-qwL3MFQI.js","./interactive-graph-editor-mWYDsmAp.js","./heading-8aCiuWUg.js","./interactive-graph-settings-aG03uuTu.js","./locked-figures-section-K5V7atp-.js","./locked-ellipse-settings-kWVnJxri.js","./locked-figure-aria-RWwSDIb0.js","./scrollless-number-text-field-U5Bx_xXb.js","./util-qk2aeK8X.js","./locked-label-settings-X4RKk04F.js","./color-select-G-xDxP7-.js","./util-3pmDu6r6.js","./line-stroke-select-CC0fFBuz.js","./locked-function-settings-ARS0ni8Z.js","./line-swatch-xLt6fclZ.js","./locked-line-settings-APCIPT7n.js","./locked-point-settings-KDnxNHJ0.js","./labeled-switch--NF5de2V.js","./locked-polygon-settings-oPik-nhx.js","./locked-vector-settings-JVpVhbIu.js","./label-image-editor-mryVz6qt.js","./form-wrapped-text-field-DtGz9PJ5.js","./answer-choices-SJhxKMzc.js","./behavior-X6OD0iDh.js","./question-markers-WvVDMwno.js","./marker-ika3cQ1R.js","./select-image-cimnxdnG.js","./matcher-editor-Aey-GH6J.js","./number-line-editor-qZz0HHTk.js","./numeric-input-editor-qJT3lp_E.js","./phet-simulation-editor-h1woLwi3.js","./python-program-editor-2Q8IzVky.js","./editor-bnXHS4_2.js","./sorter-editor-5DYvFg1M.js","./content-preview.stories-Z9HLruzU.js","./article-renderer.testdata-spwNviYy.js","./radio.testdata-sITJ8lxE.js","./viewport-resizer-2eJF63Xv.js","./perseus-editor-1P1vlgv9.css","./editor-page.stories-FwV0GRrD.js","./editor-page-with-storybook-preview-TaVLOU-C.js","./editor-page-whMlClJx.js","./item-extras-editor-2WxH27E_.js","./flags-for-api-options-oZTvm2lx.js","./editor.stories-6ciPhGip.js","./index-nm6u35aB.js","./structured-item-diff-cBK7G-UD.js","./text-diff-2XL6ZGXE.js","./tags-diff-2P1jpY0i.js","./multi-items-SYXQQaEF.js","./side-by-side-kpK-8vW0.js","./interactive-graph-editor.stories-FPTo0uHv.js","./interactive-graph-question-builder-Mh2lh4tI.js","./interactive-graph.testdata-QKEIR03d.js","./item-editor.stories-9IrCZRhE.js","./tex-error-view.stories-vwGgGZvn.js","./blur-input.stories-6PTTWtP8.js","./color-select.stories-J0t3yMA_.js","./color-swatch.stories-ygHiMCQC.js","./device-framer.stories-q7yy_9TI.js","./graph-settings.stories-bA3xZ_VF.js","./interactive-graph-settings.stories-4qH2dugu.js","./interactive-graph-settings.argtypes-6T40gg9D.js","./locked-ellipse-settings.stories-WfNLgvVC.js","./locked-figures-section.stories-pFsuMu6d.js","./locked-function-settings.stories-pknes1m1.js","./locked-label-settings.stories-GcIwtppq.js","./locked-line-settings.stories-afsLhcYP.js","./locked-point-settings.stories-xXz7_RBE.js","./locked-polygon-settings.stories-9APa6903.js","./locked-vector-settings.stories-udVxWXO2.js","./scrollless-number-text-field.stories-nOE7CJ-i.js","./section-control-button.stories-rjqemyDY.js","./toggleable-caret.stories-nhN-z0SF.js","./viewport-resizer.stories-bxCH8kbX.js","./structured-item-diff.stories-mVax7sIn.js","./perseus-diff-wrapper-dJxBlkDd.js","./tags-diff.stories-IJbiGITL.js","./text-diff.stories-n9pYIS3A.js","./categorizer-editor.stories-uPdGtW4L.js","./definition-editor.stories-dj4JMG2e.js","./dropdown-editor.stories-ReLil4hd.js","./explanation-editor.stories-s1DaRjsi.js","./expression-editor.stories-bX7eLN_p.js","./renderer-with-debug-ui-fbym8U_I.js","./register-all-widgets-for-testing-qzjCjLVo.js","./image-editor.stories-eJ2oFMJF.js","./input-number-editor.stories-jpbE69jO.js","./interaction-editor.stories-0GCwKMr4.js","./interactive-graph-editor.stories-_kYMxH2Y.js","./label-image-editor.stories-uSv6gsx4.js","./matcher-editor.stories-crM94-Mu.js","./number-line-editor.stories-rmnn8J8W.js","./numeric-input-editor.stories-8JKpa6PE.js","./phet-simulation-editor.stories-HA2gTg8K.js","./python-program-editor.stories-Hi5tomDI.js","./radio-editor.stories-fbsTIdy5.js","./sorter-editor.stories-sdFaYK7b.js","./answer-choices.stories-1uyTphLo.js","./behavior.stories-CrtW_WGC.js","./marker.stories-t5e_DMOa.js","./question-markers.stories-eRXo7rrw.js","./select-image.stories-1gYN3jcx.js","./article-renderer.stories-qJVrh-Ez.js","./test-dependencies-UUeUFXqw.js","./test-dependencies-vi99l57r.css","./test-keypad-context-wrapper-UieRILfg.js","./hints-renderer.stories-MxAEecxE.js","./server-item-renderer.stories-tNcJTbEd.js","./server-item-renderer-with-debug-ui-rx6QaX-9.js","./ke-score-ui-xy7p6xf5.js","./button-group.stories-Jd2GkQu3.js","./fixed-to-responsive.stories-5lHeA-vn.js","./graph.stories-ElA7ajAW.js","./graphie.stories-X9A6xGB6.js","./hud.stories-uFVe3Cbh.js","./icon.stories-XuV9p1XS.js","./image-loader.stories-EA1-XT2A.js","./info-tip.stories-EgkjpDRN.js","./inline-icon.stories-7-dBjnI0.js","./input-with-examples.stories-sWnNtSAK.js","./lint.stories-nJ_Oxwzz.js","./math-input.stories-6v1Hp3Uf.js","./multi-button-group.stories-Cjx9YjZ1.js","./number-input.stories-upCNzoBF.js","./range-input.stories-LiUT95hU.js","./simple-keypad-input.stories-tZsmCiIG.js","./sortable.stories-QYY7vNb_.js","./stub-tag-editor.stories-L-kojrKS.js","./svg-image.stories-_f-lKvGI.js","./tex.stories-EbmgsjH-.js","./text-input.stories-4UlPFEkn.js","./text-list-editor.stories-IcrK9bTU.js","./tooltip.stories-oMVPbUSS.js","./zoomable-tex.stories-3wtGigPF.js","./zoomable.stories-i6qkT2VG.js","./visibility-observer.stories-pidMot5o.js","./multi-renderer.stories-mfyjGc4B.js","./categorizer.stories-DqVSQ-gQ.js","./cs-program.stories-qaNPw6Pu.js","./definition.stories-itXLw16s.js","./deprecated-standin.stories-owg1iPBd.js","./dropdown.stories-fsJ_RKEi.js","./explanation.stories-ipVYxuOT.js","./expression.stories-d1DbWABc.js","./graded-group-set.stories-mCi0tFhn.js","./graded-group.stories-lS44KChW.js","./grapher.stories-cfIxkRMn.js","./group.stories-pp-2RwGN.js","./iframe.stories-quHRXFEI.js","./image.stories-rckXI6mh.js","./input-number.stories-NEZe-YPw.js","./interaction.stories-iwlmyocz.js","./interactive-graph-regression.stories-JcREPvIA.js","./interactive-graph.stories-fGiKvBZS.js","./locked-functions.stories-DiYpkFbz.js","./answer-choices.stories-yHzR0jgj.js","./answer-pill.stories-VkLpBIz9.js","./label-image.stories-N_VL3eUK.js","./marker.stories-DOVdrW59.js","./matcher.stories-EUShu0d6.js","./matrix.stories-jxKAaBOe.js","./number-line.stories-T0jmTY2_.js","./numeric-input.stories-iXupslkj.js","./orderer.stories-X3e5f_od.js","./passage-ref.stories-SR_UfM-e.js","./passage.stories-md5VTRVQ.js","./phet-simulation.stories-mBHmgFdo.js","./plotter.stories-dU2cwLGA.js","./python-program.stories-rIntdjhO.js","./base-radio.stories-FR_3w-BQ.js","./choice-icon.stories-A9BIRyST.js","./choice-none-above.stories-uiVXuZMI.js","./choice.stories-CaPa6g2I.js","./focus-ring.stories-K51oxFam.js","./option-status.stories-fqNu8JNa.js","./radio.stories-4ItdbQNa.js","./sorter.stories-5TQM9e08.js","./video-transcript-link.stories-LWRoilbr.js","./video.stories-XyqqlZXc.js","./entry-preview-X1b_vaBy.js","./react-18-N0svEjlN.js","./entry-preview-docs-9fNegKGE.js","./_getPrototype-bjD8Yebc.js","./preview-VI2eoWmp.js","./index-ogXoivrg.js","./preview-98732p1V.js","./preview-FekBEZxm.js","./preview-1MSgikpN.js","./preview-u8M_OEO2.js","./preview-XBooDLpI.js"] - } - return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) -} diff --git a/assets/iframe-uulHRm1N.js b/assets/iframe-uulHRm1N.js new file mode 100644 index 0000000000..d7eb98027a --- /dev/null +++ b/assets/iframe-uulHRm1N.js @@ -0,0 +1,7 @@ +import"../sb-preview/runtime.js";(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))p(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const r of t.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&p(r)}).observe(document,{childList:!0,subtree:!0});function a(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function p(e){if(e.ep)return;e.ep=!0;const t=a(e);fetch(e.href,t)}})();const l="modulepreload",g=function(_,i){return new URL(_,i).href},d={},s=function(i,a,p){let e=Promise.resolve();if(a&&a.length>0){const t=document.getElementsByTagName("link");e=Promise.all(a.map(r=>{if(r=g(r,p),r in d)return;d[r]=!0;const c=r.endsWith(".css"),E=c?'[rel="stylesheet"]':"";if(!!p)for(let m=t.length-1;m>=0;m--){const u=t[m];if(u.href===r&&(!c||u.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${r}"]${E}`))return;const o=document.createElement("link");if(o.rel=c?"stylesheet":l,c||(o.as="script",o.crossOrigin=""),o.href=r,document.head.appendChild(o),c)return new Promise((m,u)=>{o.addEventListener("load",m),o.addEventListener("error",()=>u(new Error(`Unable to preload CSS for ${r}`)))})}))}return e.then(()=>i()).catch(t=>{const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=t,window.dispatchEvent(r),!r.defaultPrevented)throw t})},{createBrowserChannel:O}=__STORYBOOK_MODULE_CHANNELS__,{addons:v}=__STORYBOOK_MODULE_PREVIEW_API__,n=O({page:"preview"});v.setChannel(n);window.__STORYBOOK_ADDONS_CHANNEL__=n;window.CONFIG_TYPE==="DEVELOPMENT"&&(window.__STORYBOOK_SERVER_CHANNEL__=n);const R={"./packages/math-input/src/components/keypad/keypad-button.stories.tsx":async()=>s(()=>import("./keypad-button.stories-tDGMB8WS.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]),import.meta.url),"./packages/math-input/src/components/keypad/keypad-mathquill.stories.tsx":async()=>s(()=>import("./keypad-mathquill.stories-f3PwEzb7.js"),__vite__mapDeps([15,1,2,3,16,10,11,17,18,19,12,13,20,14,21,22,23,7,24,25,26,27,9,8,28,29,30,31]),import.meta.url),"./packages/math-input/src/components/keypad/keypad-pages/keypad-pages.stories.tsx":async()=>s(()=>import("./keypad-pages.stories-UYZo0hoJ.js"),__vite__mapDeps([32,1,2,3,4,5,6,33,28,7,8,9,10,11,12,13,14]),import.meta.url),"./packages/math-input/src/components/keypad/navigation-pad.stories.tsx":async()=>s(()=>import("./navigation-pad.stories-qTnieBG4.js"),__vite__mapDeps([34,1,2,3,4,5,6,29,10,11,14,7,9,12,13]),import.meta.url),"./packages/math-input/src/components/tabbar/tabbar.stories.tsx":async()=>s(()=>import("./tabbar.stories-XOe59aSK.js"),__vite__mapDeps([35,1,2,3,26,10,11,27,9,12,13,14]),import.meta.url),"./packages/math-input/src/components/tabbar/tabbaritem.stories.tsx":async()=>s(()=>import("./tabbaritem.stories-mdibAqRo.js"),__vite__mapDeps([36,27,1,2,3,9,10,11,12,13,14]),import.meta.url),"./packages/math-input/src/full-keypad.stories.tsx":async()=>s(()=>import("./full-keypad.stories-GPmJXYWw.js"),__vite__mapDeps([37,1,2,3,4,5,6,33,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29]),import.meta.url),"./packages/math-input/src/full-mobile-input.stories.tsx":async()=>s(()=>import("./full-mobile-input.stories-nmERbKsP.js"),__vite__mapDeps([38,1,2,3,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,4,5,6,39,40,30,31,41,42,43]),import.meta.url),"./packages/perseus-editor/src/__stories__/article-editor.stories.tsx":async()=>s(()=>import("./article-editor.stories-7MCUP7Fj.js"),__vite__mapDeps([44,1,2,3,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166]),import.meta.url),"./packages/perseus-editor/src/__stories__/content-preview.stories.tsx":async()=>s(()=>import("./content-preview.stories-pTiS9guE.js"),__vite__mapDeps([167,1,2,3,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,168,169,112,113,170,111,171]),import.meta.url),"./packages/perseus-editor/src/__stories__/editor-page.stories.tsx":async()=>s(()=>import("./editor-page.stories-j1G48zbC.js"),__vite__mapDeps([172,1,2,3,114,115,41,47,45,46,40,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,116,111,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,173,4,5,6,174,170,113,112,175,176]),import.meta.url),"./packages/perseus-editor/src/__stories__/editor.stories.tsx":async()=>s(()=>import("./editor.stories-TMqEcRb8.js"),__vite__mapDeps([177,1,2,3,10,11,4,5,6,178,40,110,45,46,47,39,24,17,21,25,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,170,179,180,181,174,175,182,171,183,176]),import.meta.url),"./packages/perseus-editor/src/__stories__/interactive-graph-editor.stories.tsx":async()=>s(()=>import("./interactive-graph-editor.stories-fj3E5U9k.js"),__vite__mapDeps([184,1,2,3,10,11,85,14,23,4,5,6,178,40,110,45,46,47,39,24,17,21,25,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,170,179,180,181,174,175,182,171,185,186,173,176]),import.meta.url),"./packages/perseus-editor/src/__stories__/item-editor.stories.tsx":async()=>s(()=>import("./item-editor.stories-JVhhip1k.js"),__vite__mapDeps([187,1,2,3,175,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,171]),import.meta.url),"./packages/perseus-editor/src/__stories__/tex-error-view.stories.tsx":async()=>s(()=>import("./tex-error-view.stories-vwGgGZvn.js"),__vite__mapDeps([188,125,1,2,3,10,11,126,69]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/blur-input.stories.tsx":async()=>s(()=>import("./blur-input.stories-6PTTWtP8.js"),__vite__mapDeps([189,1,2,3,4,5,6,119]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/color-select.stories.tsx":async()=>s(()=>import("./color-select.stories-ImdmYgVA.js"),__vite__mapDeps([190,1,2,3,143,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,144]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/color-swatch.stories.tsx":async()=>s(()=>import("./color-swatch.stories-NpasFnHF.js"),__vite__mapDeps([191,1,2,3,144,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/device-framer.stories.tsx":async()=>s(()=>import("./device-framer.stories-QCUXbMUG.js"),__vite__mapDeps([192,1,2,3,122,14,112,45,46,40,47,39,24,11,17,21,25,10,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,113]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/graph-settings.stories.tsx":async()=>s(()=>import("./graph-settings.stories-lycMsxII.js"),__vite__mapDeps([193,1,2,3,130,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,115,118]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/interactive-graph-settings.stories.tsx":async()=>s(()=>import("./interactive-graph-settings.stories-gK43P-JE.js"),__vite__mapDeps([194,1,2,3,136,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,135,124,126,195]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-ellipse-settings.stories.tsx":async()=>s(()=>import("./locked-ellipse-settings.stories-cgdX0Erx.js"),__vite__mapDeps([196,1,2,3,138,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,139,140,141,142,143,144,145]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-figures-section.stories.tsx":async()=>s(()=>import("./locked-figures-section.stories-_4J2pjid.js"),__vite__mapDeps([197,1,2,3,10,11,14,137,83,12,13,20,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,135,124,126,93,77,48,40,46,25,50,51,52,53,55,58,59,60,61,66,67,138,45,39,24,26,27,9,7,8,28,29,30,31,42,43,68,72,74,75,76,78,79,80,82,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,139,140,141,142,143,144,145,146,147,148,149,150,151,152]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-function-settings.stories.tsx":async()=>s(()=>import("./locked-function-settings.stories-pcc9LEW7.js"),__vite__mapDeps([198,1,2,3,146,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,93,77,48,40,46,25,50,51,52,53,55,58,59,60,61,66,67,76,142,45,39,24,26,27,9,7,8,28,29,30,31,42,43,68,72,74,75,78,79,80,82,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,140,143,144,139,111,145,147]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-label-settings.stories.tsx":async()=>s(()=>import("./locked-label-settings.stories-vzRgYliy.js"),__vite__mapDeps([199,1,2,3,142,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,140,143,144]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-line-settings.stories.tsx":async()=>s(()=>import("./locked-line-settings.stories-Zbmsi_Al.js"),__vite__mapDeps([200,1,2,3,148,46,40,47,51,11,10,14,49,52,53,54,17,25,55,56,57,58,83,12,13,20,23,84,19,69,73,85,16,18,21,22,70,71,86,62,63,41,64,65,81,87,88,89,93,77,48,50,59,60,61,66,67,139,45,39,24,26,27,9,7,8,28,29,30,31,42,43,68,72,74,75,76,78,79,80,82,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,142,140,143,144,145,147,149,150]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-point-settings.stories.tsx":async()=>s(()=>import("./locked-point-settings.stories-x0Mslyqr.js"),__vite__mapDeps([201,1,2,3,149,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,139,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,142,140,143,144,150]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-polygon-settings.stories.tsx":async()=>s(()=>import("./locked-polygon-settings.stories-GMwCKcfK.js"),__vite__mapDeps([202,1,2,3,151,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,142,140,143,144,139,111,150,145]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/locked-vector-settings.stories.tsx":async()=>s(()=>import("./locked-vector-settings.stories-jtlx9nip.js"),__vite__mapDeps([203,1,2,3,152,46,40,47,51,11,10,14,49,52,53,54,17,25,55,56,57,58,83,12,13,20,23,84,19,69,73,85,16,18,21,22,70,71,86,62,63,41,64,65,81,87,88,89,139,45,39,24,26,27,9,7,8,28,29,30,31,42,43,48,50,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,142,140,143,144,147]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/scrollless-number-text-field.stories.tsx":async()=>s(()=>import("./scrollless-number-text-field.stories-nOE7CJ-i.js"),__vite__mapDeps([204,1,2,3,10,11,23,140,76,14,69,77]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/section-control-button.stories.tsx":async()=>s(()=>import("./section-control-button.stories-hTGUQWig.js"),__vite__mapDeps([205,1,2,3,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,123,111,124]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/toggleable-caret.stories.tsx":async()=>s(()=>import("./toggleable-caret.stories-nhN-z0SF.js"),__vite__mapDeps([206,1,2,3,21,126,69,10,11]),import.meta.url),"./packages/perseus-editor/src/components/__stories__/viewport-resizer.stories.tsx":async()=>s(()=>import("./viewport-resizer.stories-aXdKKKs0.js"),__vite__mapDeps([207,1,2,3,4,5,6,170,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,113]),import.meta.url),"./packages/perseus-editor/src/diffs/__stories__/structured-item-diff.stories.tsx":async()=>s(()=>import("./structured-item-diff.stories--rCdXtlp.js"),__vite__mapDeps([208,1,2,3,179,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,180,111,118,181,209]),import.meta.url),"./packages/perseus-editor/src/diffs/__stories__/tags-diff.stories.tsx":async()=>s(()=>import("./tags-diff.stories-B5Hjkrkm.js"),__vite__mapDeps([210,1,2,3,181,180,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,118,209]),import.meta.url),"./packages/perseus-editor/src/diffs/__stories__/text-diff.stories.tsx":async()=>s(()=>import("./text-diff.stories-9mvJuhjn.js"),__vite__mapDeps([211,1,2,3,180,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,118,209]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/categorizer-editor.stories.tsx":async()=>s(()=>import("./categorizer-editor.stories-smKQGz1C.js"),__vite__mapDeps([212,1,2,3,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,4,5,6,116,111,117,118]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/definition-editor.stories.tsx":async()=>s(()=>import("./definition-editor.stories-EpH8ra8q.js"),__vite__mapDeps([213,1,2,3,4,5,6,120,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,117,118,121,115,122,123,124,125,126]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/dropdown-editor.stories.tsx":async()=>s(()=>import("./dropdown-editor.stories-6WjiMTKJ.js"),__vite__mapDeps([214,1,2,3,4,5,6,127,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,117,118]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/explanation-editor.stories.tsx":async()=>s(()=>import("./explanation-editor.stories-KH-w38bl.js"),__vite__mapDeps([215,1,2,3,4,5,6,128,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,117,118,121,115,122,123,124,125,126]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/expression-editor.stories.tsx":async()=>s(()=>import("./expression-editor.stories-5tmUGox7.js"),__vite__mapDeps([216,1,2,3,11,217,83,10,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218,129,111,115,118]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/image-editor.stories.tsx":async()=>s(()=>import("./image-editor.stories-iKWOZsLx.js"),__vite__mapDeps([219,1,2,3,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,4,5,6,131,111,117,119,121,115,118,122,123,124,125,126]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/input-number-editor.stories.tsx":async()=>s(()=>import("./input-number-editor.stories-jAMwMDCX.js"),__vite__mapDeps([220,1,2,3,4,5,6,132,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,119]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/interaction-editor.stories.tsx":async()=>s(()=>import("./interaction-editor.stories-eXk1HBXu.js"),__vite__mapDeps([221,1,2,3,133,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,117,130,111,115,118]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/interactive-graph-editor.stories.tsx":async()=>s(()=>import("./interactive-graph-editor.stories-b0kfd7ih.js"),__vite__mapDeps([222,1,2,3,176,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,134,111,135,124,126,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,195]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/label-image-editor.stories.tsx":async()=>s(()=>import("./label-image-editor.stories-riY_AgOu.js"),__vite__mapDeps([223,1,2,3,11,153,45,46,40,47,39,24,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,117,154,155,111,156,157,158,141,159]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/matcher-editor.stories.tsx":async()=>s(()=>import("./matcher-editor.stories-mQhhvJt8.js"),__vite__mapDeps([224,1,2,3,4,5,6,160,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,118]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/number-line-editor.stories.tsx":async()=>s(()=>import("./number-line-editor.stories-jKILPdN5.js"),__vite__mapDeps([225,1,2,3,4,5,6,161,46,40,47,45,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,117,118]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/numeric-input-editor.stories.tsx":async()=>s(()=>import("./numeric-input-editor.stories-_Cl_Up33.js"),__vite__mapDeps([226,1,2,3,4,5,6,162,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,117,121,115,118,122,123,124,125,126]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/phet-simulation-editor.stories.tsx":async()=>s(()=>import("./phet-simulation-editor.stories-82lEfkft.js"),__vite__mapDeps([227,4,5,6,163,1,2,3,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/python-program-editor.stories.tsx":async()=>s(()=>import("./python-program-editor.stories-2vnEEV8K.js"),__vite__mapDeps([228,1,2,3,4,5,6,164,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/radio-editor.stories.tsx":async()=>s(()=>import("./radio-editor.stories-08i5Mm_7.js"),__vite__mapDeps([229,1,2,3,11,165,45,46,40,47,39,24,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,118,121,115,122,123,124,125,126]),import.meta.url),"./packages/perseus-editor/src/widgets/__stories__/sorter-editor.stories.tsx":async()=>s(()=>import("./sorter-editor.stories-DTCULt_I.js"),__vite__mapDeps([230,1,2,3,4,5,6,166,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,118]),import.meta.url),"./packages/perseus-editor/src/widgets/label-image/__stories__/answer-choices.stories.tsx":async()=>s(()=>import("./answer-choices.stories-O3Q8nORE.js"),__vite__mapDeps([231,1,2,3,4,5,6,11,155,45,46,40,47,39,24,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,154]),import.meta.url),"./packages/perseus-editor/src/widgets/label-image/__stories__/behavior.stories.tsx":async()=>s(()=>import("./behavior.stories-eKeCO3Mp.js"),__vite__mapDeps([232,1,2,3,4,5,6,156,45,46,40,47,39,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109]),import.meta.url),"./packages/perseus-editor/src/widgets/label-image/__stories__/marker.stories.tsx":async()=>s(()=>import("./marker.stories-LdIoBqfp.js"),__vite__mapDeps([233,1,2,3,4,5,6,11,158,45,46,40,47,39,24,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,141,154]),import.meta.url),"./packages/perseus-editor/src/widgets/label-image/__stories__/question-markers.stories.tsx":async()=>s(()=>import("./question-markers.stories-ho5wNmN2.js"),__vite__mapDeps([234,1,2,3,11,157,45,46,40,47,39,24,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,158,111,141,154]),import.meta.url),"./packages/perseus-editor/src/widgets/label-image/__stories__/select-image.stories.tsx":async()=>s(()=>import("./select-image.stories-FuwCWNv6.js"),__vite__mapDeps([235,1,2,3,11,159,45,46,40,47,39,24,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,154]),import.meta.url),"./packages/perseus/src/__stories__/article-renderer.stories.tsx":async()=>s(()=>import("./article-renderer.stories-7DyugAbN.js"),__vite__mapDeps([236,1,2,3,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,4,5,6,237,218,45,46,40,47,39,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,238,168,239]),import.meta.url),"./packages/perseus/src/__stories__/hints-renderer.stories.tsx":async()=>s(()=>import("./hints-renderer.stories-y0rKANuv.js"),__vite__mapDeps([240,1,2,3,10,11,109,48,40,46,47,41,25,49,17,50,51,14,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,81,82,185,96,97,98]),import.meta.url),"./packages/perseus/src/__stories__/server-item-renderer.stories.tsx":async()=>s(()=>import("./server-item-renderer.stories-g8W47qak.js"),__vite__mapDeps([241,1,2,3,242,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,243,183,237,218,238]),import.meta.url),"./packages/perseus/src/components/__stories__/button-group.stories.tsx":async()=>s(()=>import("./button-group.stories-Jd2GkQu3.js"),__vite__mapDeps([244,1,2,3,94,11]),import.meta.url),"./packages/perseus/src/components/__stories__/fixed-to-responsive.stories.tsx":async()=>s(()=>import("./fixed-to-responsive.stories-5lHeA-vn.js"),__vite__mapDeps([245,1,2,3,52,53,49,54]),import.meta.url),"./packages/perseus/src/components/__stories__/graph.stories.tsx":async()=>s(()=>import("./graph.stories-36_eShqh.js"),__vite__mapDeps([246,1,2,3,95,46,40,47,51,11,10,14,49,52,53,54,17,25,55,56,57,58,50]),import.meta.url),"./packages/perseus/src/components/__stories__/graphie.stories.tsx":async()=>s(()=>import("./graphie.stories-6IO_TX8p.js"),__vite__mapDeps([247,1,2,3,242,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,243,183,237,218,238]),import.meta.url),"./packages/perseus/src/components/__stories__/hud.stories.tsx":async()=>s(()=>import("./hud.stories-uFVe3Cbh.js"),__vite__mapDeps([248,1,2,3,99,11,54]),import.meta.url),"./packages/perseus/src/components/__stories__/icon.stories.tsx":async()=>s(()=>import("./icon.stories-XuV9p1XS.js"),__vite__mapDeps([249,1,2,3,57,86]),import.meta.url),"./packages/perseus/src/components/__stories__/image-loader.stories.tsx":async()=>s(()=>import("./image-loader.stories-EA1-XT2A.js"),__vite__mapDeps([250,1,2,3,58,52]),import.meta.url),"./packages/perseus/src/components/__stories__/info-tip.stories.tsx":async()=>s(()=>import("./info-tip.stories-EgkjpDRN.js"),__vite__mapDeps([251,1,2,3,68,69,10,11,14,17,18,19,12,13,20,21,23,22]),import.meta.url),"./packages/perseus/src/components/__stories__/inline-icon.stories.tsx":async()=>s(()=>import("./inline-icon.stories-7-dBjnI0.js"),__vite__mapDeps([252,1,2,3,56]),import.meta.url),"./packages/perseus/src/components/__stories__/input-with-examples.stories.tsx":async()=>s(()=>import("./input-with-examples.stories-L1vui8Db.js"),__vite__mapDeps([253,1,2,3,74,48,40,46,47,41,25,49,17,50,51,11,10,14,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,75,76,23,69,77,78]),import.meta.url),"./packages/perseus/src/components/__stories__/lint.stories.tsx":async()=>s(()=>import("./lint.stories-nJ_Oxwzz.js"),__vite__mapDeps([254,1,2,3,66,11,17,54,56]),import.meta.url),"./packages/perseus/src/components/__stories__/math-input.stories.tsx":async()=>s(()=>import("./math-input.stories-6v1Hp3Uf.js"),__vite__mapDeps([255,1,2,3,72,39,40,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,73,16,18,19,20,22,23,49,47,70,71]),import.meta.url),"./packages/perseus/src/components/__stories__/multi-button-group.stories.tsx":async()=>s(()=>import("./multi-button-group.stories-Cjx9YjZ1.js"),__vite__mapDeps([256,1,2,3,100,11,17]),import.meta.url),"./packages/perseus/src/components/__stories__/number-input.stories.tsx":async()=>s(()=>import("./number-input.stories-gsy02QmS.js"),__vite__mapDeps([257,1,2,3,101,46,40,47,49,63,41,17,70,71]),import.meta.url),"./packages/perseus/src/components/__stories__/range-input.stories.tsx":async()=>s(()=>import("./range-input.stories-V17nbn5_.js"),__vite__mapDeps([258,1,2,3,102,63,41,101,46,40,47,49,17,70,71]),import.meta.url),"./packages/perseus/src/components/__stories__/simple-keypad-input.stories.tsx":async()=>s(()=>import("./simple-keypad-input.stories-tZsmCiIG.js"),__vite__mapDeps([259,1,2,3,79,39,40,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,30,31,41,42,43,63]),import.meta.url),"./packages/perseus/src/components/__stories__/sortable.stories.tsx":async()=>s(()=>import("./sortable.stories-0t9Q6btI.js"),__vite__mapDeps([260,1,2,3,105,48,40,46,47,41,25,49,17,50,51,11,10,14,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71]),import.meta.url),"./packages/perseus/src/components/__stories__/stub-tag-editor.stories.tsx":async()=>s(()=>import("./stub-tag-editor.stories-L-kojrKS.js"),__vite__mapDeps([261,1,2,3,64,63,41,65,47,17]),import.meta.url),"./packages/perseus/src/components/__stories__/svg-image.stories.tsx":async()=>s(()=>import("./svg-image.stories-YUvNc1t7.js"),__vite__mapDeps([262,1,2,3,51,40,46,47,11,10,14,49,52,53,54,17,25,55,56,57,58]),import.meta.url),"./packages/perseus/src/components/__stories__/tex.stories.tsx":async()=>s(()=>import("./tex.stories-EbmgsjH-.js"),__vite__mapDeps([263,1,2,3,59,52]),import.meta.url),"./packages/perseus/src/components/__stories__/text-input.stories.tsx":async()=>s(()=>import("./text-input.stories-4UlPFEkn.js"),__vite__mapDeps([264,1,2,3,75,76,10,11,14,23,69,77,17]),import.meta.url),"./packages/perseus/src/components/__stories__/text-list-editor.stories.tsx":async()=>s(()=>import("./text-list-editor.stories-IcrK9bTU.js"),__vite__mapDeps([265,1,2,3,4,5,6,65,47,63,41,17]),import.meta.url),"./packages/perseus/src/components/__stories__/tooltip.stories.tsx":async()=>s(()=>import("./tooltip.stories-oMVPbUSS.js"),__vite__mapDeps([266,1,2,3,10,11,78,17]),import.meta.url),"./packages/perseus/src/components/__stories__/zoomable-tex.stories.tsx":async()=>s(()=>import("./zoomable-tex.stories-3wtGigPF.js"),__vite__mapDeps([267,1,2,3,61,50,59,52,60,17]),import.meta.url),"./packages/perseus/src/components/__stories__/zoomable.stories.tsx":async()=>s(()=>import("./zoomable.stories-i6qkT2VG.js"),__vite__mapDeps([268,1,2,3,60,17]),import.meta.url),"./packages/perseus/src/components/visibility-observer/__stories__/visibility-observer.stories.tsx":async()=>s(()=>import("./visibility-observer.stories-pidMot5o.js"),__vite__mapDeps([269,1,2,3,17]),import.meta.url),"./packages/perseus/src/multi-items/__stories__/multi-renderer.stories.tsx":async()=>s(()=>import("./multi-renderer.stories-5PAMrohg.js"),__vite__mapDeps([270,1,2,3,10,11,23,83,12,13,20,14,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,182,243,183,237,218,238]),import.meta.url),"./packages/perseus/src/widgets/categorizer/categorizer.stories.tsx":async()=>s(()=>import("./categorizer.stories-WvBvRviL.js"),__vite__mapDeps([271,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/cs-program/cs-program.stories.tsx":async()=>s(()=>import("./cs-program.stories-5FdtaPSQ.js"),__vite__mapDeps([272,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/definition/definition.stories.tsx":async()=>s(()=>import("./definition.stories-A2q8IHrU.js"),__vite__mapDeps([273,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218,237,238]),import.meta.url),"./packages/perseus/src/widgets/deprecated-standin/__stories__/deprecated-standin.stories.tsx":async()=>s(()=>import("./deprecated-standin.stories-w4UxO0fI.js"),__vite__mapDeps([274,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/dropdown/dropdown.stories.tsx":async()=>s(()=>import("./dropdown.stories-6_EzhcMU.js"),__vite__mapDeps([275,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/explanation/explanation.stories.tsx":async()=>s(()=>import("./explanation.stories-w_6-HjWD.js"),__vite__mapDeps([276,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/expression/expression.stories.tsx":async()=>s(()=>import("./expression.stories-bBdYXZfc.js"),__vite__mapDeps([277,1,2,3,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,39,40,30,31,41,42,43,4,5,6,242,83,20,23,84,19,69,73,85,16,18,22,49,70,71,86,62,63,64,65,47,81,54,87,56,57,88,89,45,46,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,243,183,237,218,238,239]),import.meta.url),"./packages/perseus/src/widgets/graded-group-set/graded-group-set.stories.tsx":async()=>s(()=>import("./graded-group-set.stories-9FPLVzCM.js"),__vite__mapDeps([278,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/graded-group/graded-group.stories.tsx":async()=>s(()=>import("./graded-group.stories-0XPE2jTL.js"),__vite__mapDeps([279,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/grapher/grapher.stories.tsx":async()=>s(()=>import("./grapher.stories-iuL1rjgb.js"),__vite__mapDeps([280,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/group/group.stories.tsx":async()=>s(()=>import("./group.stories-0jgycKKF.js"),__vite__mapDeps([281,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/iframe/iframe.stories.tsx":async()=>s(()=>import("./iframe.stories-KvhUWwHx.js"),__vite__mapDeps([282,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/image/image.stories.tsx":async()=>s(()=>import("./image.stories-93-8yzb1.js"),__vite__mapDeps([283,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/input-number/input-number.stories.tsx":async()=>s(()=>import("./input-number.stories-urMO_AnQ.js"),__vite__mapDeps([284,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/interaction/interaction.stories.tsx":async()=>s(()=>import("./interaction.stories-Vmq1c1LS.js"),__vite__mapDeps([285,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/interactive-graphs/interactive-graph-regression.stories.tsx":async()=>s(()=>import("./interactive-graph-regression.stories-GWSmyxK_.js"),__vite__mapDeps([286,1,2,3,48,40,46,47,41,25,49,17,50,51,11,10,14,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,185,96,97,98]),import.meta.url),"./packages/perseus/src/widgets/interactive-graphs/interactive-graph.stories.tsx":async()=>s(()=>import("./interactive-graph.stories-48PUZi0-.js"),__vite__mapDeps([287,1,2,3,91,11,19,10,12,13,20,14,84,69,92,23,70,71,52,54,83,73,85,16,17,18,21,22,49,86,62,63,41,64,65,47,81,87,56,57,88,89,106,68,25,45,46,40,39,24,26,27,9,7,8,28,29,30,31,42,43,48,50,51,53,55,58,59,60,61,66,67,72,74,75,76,77,78,79,80,82,90,93,94,95,96,97,98,99,100,101,102,103,104,105,107,108,109,217,183,218,186,185]),import.meta.url),"./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-functions.stories.tsx":async()=>s(()=>import("./locked-functions.stories-0Otxh32d.js"),__vite__mapDeps([288,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218,186,185]),import.meta.url),"./packages/perseus/src/widgets/label-image/__stories__/answer-choices.stories.tsx":async()=>s(()=>import("./answer-choices.stories-F8vp1E0x.js"),__vite__mapDeps([289,1,2,3,23,10,11,93,20,12,13,14,69,77,17,19,21,22,18,70,71,48,40,46,47,41,25,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67]),import.meta.url),"./packages/perseus/src/widgets/label-image/__stories__/answer-pill.stories.tsx":async()=>s(()=>import("./answer-pill.stories-vFl2dhw0.js"),__vite__mapDeps([290,1,2,3,104,10,11,20,12,13,14,23,22,17,70,71,48,40,46,47,41,25,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67]),import.meta.url),"./packages/perseus/src/widgets/label-image/__stories__/label-image.stories.tsx":async()=>s(()=>import("./label-image.stories-Ac84OpP3.js"),__vite__mapDeps([291,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/label-image/__stories__/marker.stories.tsx":async()=>s(()=>import("./marker.stories-poEv59W3.js"),__vite__mapDeps([292,1,2,3,11,103,10,14,70,71,86,57,104,20,12,13,23,22,17,48,40,46,47,41,25,49,50,51,52,53,54,55,56,58,59,60,61,62,63,64,65,66,67]),import.meta.url),"./packages/perseus/src/widgets/matcher/matcher.stories.tsx":async()=>s(()=>import("./matcher.stories-SZ5TFBh-.js"),__vite__mapDeps([293,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/matrix/matrix.stories.tsx":async()=>s(()=>import("./matrix.stories-9tO3WwDv.js"),__vite__mapDeps([294,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/number-line/number-line.stories.tsx":async()=>s(()=>import("./number-line.stories-eX2HoIDy.js"),__vite__mapDeps([295,1,2,3,24,11,17,21,25,10,14,26,27,9,12,13,7,8,28,29,217,83,20,23,84,19,69,73,85,16,18,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218,242,243,237,238,239,4,5,6]),import.meta.url),"./packages/perseus/src/widgets/numeric-input/numeric-input.stories.tsx":async()=>s(()=>import("./numeric-input.stories-urQAWTUr.js"),__vite__mapDeps([296,1,2,3,4,5,6,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/orderer/orderer.stories.tsx":async()=>s(()=>import("./orderer.stories-pD1b7a2C.js"),__vite__mapDeps([297,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/passage-ref/passage-ref.stories.tsx":async()=>s(()=>import("./passage-ref.stories-4D87gHwq.js"),__vite__mapDeps([298,1,2,3,10,11,217,83,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/passage/passage.stories.tsx":async()=>s(()=>import("./passage.stories-eTFrj0vn.js"),__vite__mapDeps([299,1,2,3,10,11,217,83,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/phet-simulation/phet-simulation.stories.tsx":async()=>s(()=>import("./phet-simulation.stories-rQbjCa5x.js"),__vite__mapDeps([300,91,1,2,3,11,19,10,12,13,20,14,84,69,92,23,70,71,52,54]),import.meta.url),"./packages/perseus/src/widgets/plotter/plotter.stories.tsx":async()=>s(()=>import("./plotter.stories-3YRrs4Mk.js"),__vite__mapDeps([301,1,2,3,10,11,217,83,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/python-program/python-program.stories.tsx":async()=>s(()=>import("./python-program.stories-uDM4zaBd.js"),__vite__mapDeps([302,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/base-radio.stories.tsx":async()=>s(()=>import("./base-radio.stories-Nmnh2CE6.js"),__vite__mapDeps([303,1,2,3,4,5,6,80,11,49,17,47,70,71,62,63,41,64,65,54,81,82,46,40,83,10,12,13,20,14,23,84,19,69,73,85,16,18,21,22,86,87,56,57,88,89,90,48,25,50,51,52,53,55,58,59,60,61,66,67]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/choice-icon.stories.tsx":async()=>s(()=>import("./choice-icon.stories-A9BIRyST.js"),__vite__mapDeps([304,1,2,3,87,14,11,70,71,56,57,54,88]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/choice-none-above.stories.tsx":async()=>s(()=>import("./choice-none-above.stories-v1FJoVoF.js"),__vite__mapDeps([305,1,2,3,4,5,6,90,70,71,48,40,46,47,41,25,49,17,50,51,11,10,14,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,83,12,13,20,23,84,19,69,73,85,16,18,21,22,86,81,87,88,89]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/choice.stories.tsx":async()=>s(()=>import("./choice.stories-CaPa6g2I.js"),__vite__mapDeps([306,1,2,3,4,5,6,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/focus-ring.stories.tsx":async()=>s(()=>import("./focus-ring.stories-K51oxFam.js"),__vite__mapDeps([307,1,2,3,54,88,11]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/option-status.stories.tsx":async()=>s(()=>import("./option-status.stories-fqNu8JNa.js"),__vite__mapDeps([308,1,2,3,89,14,11,70,71]),import.meta.url),"./packages/perseus/src/widgets/radio/__stories__/radio.stories.tsx":async()=>s(()=>import("./radio.stories-C0nIdyBM.js"),__vite__mapDeps([309,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218,169]),import.meta.url),"./packages/perseus/src/widgets/sorter/sorter.stories.tsx":async()=>s(()=>import("./sorter.stories-9GJvf9nP.js"),__vite__mapDeps([310,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url),"./packages/perseus/src/widgets/video/video-transcript-link.stories.tsx":async()=>s(()=>import("./video-transcript-link.stories-LWRoilbr.js"),__vite__mapDeps([311,1,2,3,106,10,11,85,14,92,12,13,20,69,70,71,52]),import.meta.url),"./packages/perseus/src/widgets/video/video.stories.tsx":async()=>s(()=>import("./video.stories-ZPQV-MHo.js"),__vite__mapDeps([312,1,2,3,217,83,10,11,12,13,20,14,23,84,19,69,73,85,16,17,18,21,22,49,70,71,86,62,63,41,64,65,47,81,54,87,56,57,88,89,45,46,40,39,24,25,26,27,9,7,8,28,29,30,31,42,43,48,50,51,52,53,55,58,59,60,61,66,67,68,72,74,75,76,77,78,79,80,82,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,183,108,109,218]),import.meta.url)};async function y(_){return R[_]()}const{composeConfigs:P,PreviewWeb:T,ClientApi:L}=__STORYBOOK_MODULE_PREVIEW_API__,I=async()=>{const _=await Promise.all([s(()=>import("./entry-preview-X1b_vaBy.js"),__vite__mapDeps([313,2,3,314,55,17]),import.meta.url),s(()=>import("./entry-preview-docs-9fNegKGE.js"),__vite__mapDeps([315,316,3,13,6,2]),import.meta.url),s(()=>import("./preview-VI2eoWmp.js"),__vite__mapDeps([317,318]),import.meta.url),s(()=>import("./preview-f50LEd9Z.js"),__vite__mapDeps([]),import.meta.url),s(()=>import("./preview-98732p1V.js"),__vite__mapDeps([319,5,6]),import.meta.url),s(()=>import("./preview-FekBEZxm.js"),__vite__mapDeps([320,6]),import.meta.url),s(()=>import("./preview-1MSgikpN.js"),__vite__mapDeps([321,97]),import.meta.url),s(()=>import("./preview-u8M_OEO2.js"),__vite__mapDeps([322,6]),import.meta.url),s(()=>import("./preview-bEa2SesL.js"),__vite__mapDeps([]),import.meta.url),s(()=>import("./preview-fc09KXs9.js"),__vite__mapDeps([]),import.meta.url),s(()=>import("./preview-Bpfz4q6G.js"),__vite__mapDeps([323,1,2,3,14,10,11,45,46,40,47,39,24,17,21,25,26,27,9,12,13,7,8,28,29,30,31,41,42,43,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,18,19,20,23,22,70,71,72,73,16,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,237,218,238]),import.meta.url)]);return P(_)};window.__STORYBOOK_PREVIEW__=window.__STORYBOOK_PREVIEW__||new T;window.__STORYBOOK_STORY_STORE__=window.__STORYBOOK_STORY_STORE__||window.__STORYBOOK_PREVIEW__.storyStore;window.__STORYBOOK_CLIENT_API__=window.__STORYBOOK_CLIENT_API__||new L({storyStore:window.__STORYBOOK_PREVIEW__.storyStore});window.__STORYBOOK_PREVIEW__.initialize({importFn:y,getProjectAnnotations:I});export{s as _}; +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = ["./keypad-button.stories-tDGMB8WS.js","./jsx-runtime-FVsy8kgq.js","./index-TT1qJ6UJ.js","./_commonjsHelpers-4gQjN7DL.js","./chunk-WFFRPTHA-zlNDxfrq.js","./preview-errors-7FWlPnjy.js","./index-PPLHz8o0.js","./button-assets-txIojR3b.js","./keypad-button-rKskH7oM.js","./index-2dmvOE3q.js","./index-6h5t6F0w.js","./index-awljIyHI.js","./react-router-dom-W_e8xVUu.js","./index-tvtfaFq4.js","./index-deFLJwr4.js","./keypad-mathquill.stories-f3PwEzb7.js","./index-BPSWBbj5.js","./index-7vsPyIck.js","./index-YCTzZMik.js","./index-rfN0X25E.js","./index-o3wWn3Y5.js","./index-CkAxGj88.js","./Popper-kGnKOid7.js","./index-h_CiYGGb.js","./mobile-keypad-hKjeQGNp.js","./index-J2t_5nK1.js","./tabbar-WYCYDof0.js","./item-X9tjzx12.js","./operators-page-C_EsmjPW.js","./navigation-pad-ss7r0FKW.js","./key-translator-IA-2V2LV.js","./_commonjs-dynamic-modules-h-SxKiO4.js","./keypad-pages.stories-UYZo0hoJ.js","./index-VDi1Le_1.js","./navigation-pad.stories-qTnieBG4.js","./tabbar.stories-XOe59aSK.js","./tabbaritem.stories-mdibAqRo.js","./full-keypad.stories-GPmJXYWw.js","./full-mobile-input.stories-nmERbKsP.js","./prop-types-3bOVFRDQ.js","./version-akiLXZts.js","./invariant-bu5zBsRS.js","./prop-types-mRar-0kQ.css","./enums-x5qaTru7.js","./article-editor.stories-7MCUP7Fj.js","./article-renderer-TMdCDA85.js","./util-YrNvlCNO.js","./jquery-yG1GhClm.js","./renderer-hPmI_Chp.js","./index-dnMhQZ-1.js","./asset-context-I7yIqWki.js","./svg-image-RL9NlJEY.js","./dependencies-8XILypbq.js","./fixed-to-responsive-1fSZ1n--.js","./constants-I_nlPaPx.js","./client-rbWgHzHN.js","./inline-icon-tKY1iMkH.js","./icon-paths-AuJwhOz7.js","./image-loader-mgyZcN0j.js","./tex-VP4hirbI.js","./zoomable-CA1NzpZD.js","./zoomable-tex-MZi7Hqbp.js","./perseus-api-mOiZT07d.js","./index-0C4KXdeC.js","./stub-tag-editor-Hmby24Jq.js","./text-list-editor-pe7AGDAl.js","./lint-I_5mQeXl.js","./renderer-qr6V1vrR.css","./index-K9BSJPWl.js","./index-xuPsLuPk.js","./i18n-context-hxuRe8oU.js","./strings-OAjNfY6D.js","./math-input-b6JdL4xR.js","./index-WNT3sUKf.js","./input-with-examples-YZffrKhM.js","./text-input-15gEhfDF.js","./index-QCAhLhLD.js","./minus-bold-ONmDo3Ve.js","./tooltip-S_hcgkAT.js","./simple-keypad-input-zNNuoI83.js","./base-radio-TdBv-OLd.js","./media-queries-MaBBbpNq.js","./shared-3pf9YZIg.js","./choice-E4eyMygy.js","./index-ngddCaVG.js","./index-qUyqkRvh.js","./icon-YuYiVxsK.js","./choice-icon-LAaL9HdM.js","./focus-ring-sgSTt4fM.js","./option-status-6glEGOB8.js","./choice-none-above-HXEAXx7K.js","./phet-simulation-4u5-UljK.js","./arrow-square-out-bold-090vdhrx.js","./answer-choices-xSqM961S.js","./button-group-nsoLlHtM.js","./graph-myhk4Jua.js","./index-IIMKO4_x.js","./tiny-invariant-bHgPayXn.js","./bundle.esm-7jAAHVxW.js","./hud-FI3E3dT_.js","./multi-button-group-a0iIfrwx.js","./number-input-ZhezuDVT.js","./range-input-kzyKWO0E.js","./marker-ockQWLHi.js","./answer-pill-NjYGKpaV.js","./sortable-1zDjBYMZ.js","./video-transcript-link-WVgIZGhp.js","./article-renderer-bsRD8PfZ.css","./multi-renderer-vtdVtdWv.js","./hints-renderer-sA0Ao_qa.js","./article-editor-_CIVbpzD.js","./components-h6HHhmoA.js","./device-framer-kfyrsN2-.js","./constants-hQyjCzwz.js","./register-all-widgets-and-editors-for-testing-Duh1ZXvu.js","./index-fuycm_QE.js","./categorizer-editor-B70XrHDb.js","./editor-jsonify-SX5E4P_Y.js","./index-k-0mNqHS.js","./blur-input-hjJsfoK9.js","./definition-editor-dEifSd-2.js","./editor-I-vnrXtz.js","./index-SM3muJE2.js","./section-control-button-J8oVp9bZ.js","./index-tFzzSRL2.js","./tex-error-view-Y2BSLjwB.js","./toggleable-caret-lFiCktzo.js","./dropdown-editor-z4XV_Nz9.js","./explanation-editor-7TAFL4nE.js","./expression-editor-iqoCc9gS.js","./graph-settings-_umr9_il.js","./image-editor-AZ-dC4_D.js","./input-number-editor-TkxXdBqK.js","./index-Jny9tT-6.js","./interactive-graph-editor-1ZmjvlNv.js","./heading-8aCiuWUg.js","./interactive-graph-settings-bMgmMCqq.js","./locked-figures-section-Tfk_-k0r.js","./locked-ellipse-settings-TfTFulml.js","./locked-figure-aria-7tCktpI9.js","./scrollless-number-text-field-U5Bx_xXb.js","./util-qk2aeK8X.js","./locked-label-settings-mrPkDK9u.js","./color-select-GgikiV2v.js","./util-yTFMWwoT.js","./line-stroke-select-8a9MPfaw.js","./locked-function-settings-hpVCfdZN.js","./line-swatch-0Zcc1GCG.js","./locked-line-settings-s3VKqEiy.js","./locked-point-settings-ajnmafNS.js","./labeled-switch-Qne5XsM1.js","./locked-polygon-settings-LXOy6nHR.js","./locked-vector-settings-214PJGeS.js","./label-image-editor-cReH8dJ4.js","./form-wrapped-text-field-BopYavUW.js","./answer-choices-2q3o0s95.js","./behavior-bUq-LmpJ.js","./question-markers-h3QT0QS4.js","./marker-o8uSzdrK.js","./select-image--koiUF2W.js","./matcher-editor-roy8eQL9.js","./number-line-editor-5mXaeixJ.js","./numeric-input-editor-HZCTKW32.js","./phet-simulation-editor-8cXa9agX.js","./python-program-editor-KSnFH92m.js","./editor-0vKo6Oc_.js","./sorter-editor-rLrUJXLc.js","./content-preview.stories-pTiS9guE.js","./article-renderer.testdata-spwNviYy.js","./radio.testdata-sITJ8lxE.js","./viewport-resizer-spuc4uQO.js","./perseus-editor-1P1vlgv9.css","./editor-page.stories-j1G48zbC.js","./editor-page-with-storybook-preview-PyHv_pWj.js","./editor-page-a0k5dFPi.js","./item-extras-editor-cTVEyrYD.js","./flags-for-api-options-VdIBjpAD.js","./editor.stories-TMqEcRb8.js","./index-6Rnzd_gN.js","./structured-item-diff-eXkE0zlp.js","./text-diff-VQhvkbai.js","./tags-diff-QpgBeBx_.js","./multi-items-zAjfw5su.js","./side-by-side-kpK-8vW0.js","./interactive-graph-editor.stories-fj3E5U9k.js","./interactive-graph-question-builder-Mh2lh4tI.js","./interactive-graph.testdata-QKEIR03d.js","./item-editor.stories-JVhhip1k.js","./tex-error-view.stories-vwGgGZvn.js","./blur-input.stories-6PTTWtP8.js","./color-select.stories-ImdmYgVA.js","./color-swatch.stories-NpasFnHF.js","./device-framer.stories-QCUXbMUG.js","./graph-settings.stories-lycMsxII.js","./interactive-graph-settings.stories-gK43P-JE.js","./interactive-graph-settings.argtypes-6T40gg9D.js","./locked-ellipse-settings.stories-cgdX0Erx.js","./locked-figures-section.stories-_4J2pjid.js","./locked-function-settings.stories-pcc9LEW7.js","./locked-label-settings.stories-vzRgYliy.js","./locked-line-settings.stories-Zbmsi_Al.js","./locked-point-settings.stories-x0Mslyqr.js","./locked-polygon-settings.stories-GMwCKcfK.js","./locked-vector-settings.stories-jtlx9nip.js","./scrollless-number-text-field.stories-nOE7CJ-i.js","./section-control-button.stories-hTGUQWig.js","./toggleable-caret.stories-nhN-z0SF.js","./viewport-resizer.stories-aXdKKKs0.js","./structured-item-diff.stories--rCdXtlp.js","./perseus-diff-wrapper-dJxBlkDd.js","./tags-diff.stories-B5Hjkrkm.js","./text-diff.stories-9mvJuhjn.js","./categorizer-editor.stories-smKQGz1C.js","./definition-editor.stories-EpH8ra8q.js","./dropdown-editor.stories-6WjiMTKJ.js","./explanation-editor.stories-KH-w38bl.js","./expression-editor.stories-5tmUGox7.js","./renderer-with-debug-ui-YzY7YHzw.js","./register-all-widgets-for-testing-xSlGtLC1.js","./image-editor.stories-iKWOZsLx.js","./input-number-editor.stories-jAMwMDCX.js","./interaction-editor.stories-eXk1HBXu.js","./interactive-graph-editor.stories-b0kfd7ih.js","./label-image-editor.stories-riY_AgOu.js","./matcher-editor.stories-mQhhvJt8.js","./number-line-editor.stories-jKILPdN5.js","./numeric-input-editor.stories-_Cl_Up33.js","./phet-simulation-editor.stories-82lEfkft.js","./python-program-editor.stories-2vnEEV8K.js","./radio-editor.stories-08i5Mm_7.js","./sorter-editor.stories-DTCULt_I.js","./answer-choices.stories-O3Q8nORE.js","./behavior.stories-eKeCO3Mp.js","./marker.stories-LdIoBqfp.js","./question-markers.stories-ho5wNmN2.js","./select-image.stories-FuwCWNv6.js","./article-renderer.stories-7DyugAbN.js","./test-dependencies-OZugV_HD.js","./test-dependencies-vi99l57r.css","./test-keypad-context-wrapper-UieRILfg.js","./hints-renderer.stories-y0rKANuv.js","./server-item-renderer.stories-g8W47qak.js","./server-item-renderer-with-debug-ui-xomgDBO_.js","./ke-score-ui-xy7p6xf5.js","./button-group.stories-Jd2GkQu3.js","./fixed-to-responsive.stories-5lHeA-vn.js","./graph.stories-36_eShqh.js","./graphie.stories-6IO_TX8p.js","./hud.stories-uFVe3Cbh.js","./icon.stories-XuV9p1XS.js","./image-loader.stories-EA1-XT2A.js","./info-tip.stories-EgkjpDRN.js","./inline-icon.stories-7-dBjnI0.js","./input-with-examples.stories-L1vui8Db.js","./lint.stories-nJ_Oxwzz.js","./math-input.stories-6v1Hp3Uf.js","./multi-button-group.stories-Cjx9YjZ1.js","./number-input.stories-gsy02QmS.js","./range-input.stories-V17nbn5_.js","./simple-keypad-input.stories-tZsmCiIG.js","./sortable.stories-0t9Q6btI.js","./stub-tag-editor.stories-L-kojrKS.js","./svg-image.stories-YUvNc1t7.js","./tex.stories-EbmgsjH-.js","./text-input.stories-4UlPFEkn.js","./text-list-editor.stories-IcrK9bTU.js","./tooltip.stories-oMVPbUSS.js","./zoomable-tex.stories-3wtGigPF.js","./zoomable.stories-i6qkT2VG.js","./visibility-observer.stories-pidMot5o.js","./multi-renderer.stories-5PAMrohg.js","./categorizer.stories-WvBvRviL.js","./cs-program.stories-5FdtaPSQ.js","./definition.stories-A2q8IHrU.js","./deprecated-standin.stories-w4UxO0fI.js","./dropdown.stories-6_EzhcMU.js","./explanation.stories-w_6-HjWD.js","./expression.stories-bBdYXZfc.js","./graded-group-set.stories-9FPLVzCM.js","./graded-group.stories-0XPE2jTL.js","./grapher.stories-iuL1rjgb.js","./group.stories-0jgycKKF.js","./iframe.stories-KvhUWwHx.js","./image.stories-93-8yzb1.js","./input-number.stories-urMO_AnQ.js","./interaction.stories-Vmq1c1LS.js","./interactive-graph-regression.stories-GWSmyxK_.js","./interactive-graph.stories-48PUZi0-.js","./locked-functions.stories-0Otxh32d.js","./answer-choices.stories-F8vp1E0x.js","./answer-pill.stories-vFl2dhw0.js","./label-image.stories-Ac84OpP3.js","./marker.stories-poEv59W3.js","./matcher.stories-SZ5TFBh-.js","./matrix.stories-9tO3WwDv.js","./number-line.stories-eX2HoIDy.js","./numeric-input.stories-urQAWTUr.js","./orderer.stories-pD1b7a2C.js","./passage-ref.stories-4D87gHwq.js","./passage.stories-eTFrj0vn.js","./phet-simulation.stories-rQbjCa5x.js","./plotter.stories-3YRrs4Mk.js","./python-program.stories-uDM4zaBd.js","./base-radio.stories-Nmnh2CE6.js","./choice-icon.stories-A9BIRyST.js","./choice-none-above.stories-v1FJoVoF.js","./choice.stories-CaPa6g2I.js","./focus-ring.stories-K51oxFam.js","./option-status.stories-fqNu8JNa.js","./radio.stories-C0nIdyBM.js","./sorter.stories-9GJvf9nP.js","./video-transcript-link.stories-LWRoilbr.js","./video.stories-ZPQV-MHo.js","./entry-preview-X1b_vaBy.js","./react-18-N0svEjlN.js","./entry-preview-docs-9fNegKGE.js","./_getPrototype-bjD8Yebc.js","./preview-VI2eoWmp.js","./index-ogXoivrg.js","./preview-98732p1V.js","./preview-FekBEZxm.js","./preview-1MSgikpN.js","./preview-u8M_OEO2.js","./preview-Bpfz4q6G.js"] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} diff --git a/assets/iframe.stories-quHRXFEI.js b/assets/iframe.stories-KvhUWwHx.js similarity index 68% rename from assets/iframe.stories-quHRXFEI.js rename to assets/iframe.stories-KvhUWwHx.js index 53bd5d6a6a..5696f18083 100644 --- a/assets/iframe.stories-quHRXFEI.js +++ b/assets/iframe.stories-KvhUWwHx.js @@ -1,4 +1,4 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{R as p}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const e={content:`Try matching the target image +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{R as p}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const e={content:`Try matching the target image [[☃ iframe 1]] `,images:{"https://ka-perseus-images.s3.amazonaws.com/8e518475587bc83767c72b49ff094e5870c3edc3.png":{width:760,height:688}},widgets:{"iframe 1":{graded:!0,version:{major:0,minor:0},static:!1,type:"iframe",options:{settings:[{name:"hue",value:"210"},{name:"subdivisions",value:"0"},{name:"zoom",value:"2"},{name:"seed",value:"6"},{name:"",value:""}],url:"4960944252",height:"410",width:"410",allowFullScreen:!0,static:!1},alignment:"default"}}},Yt={title:"Perseus/Widgets/IFrame"},t=s=>m(p,{question:e});t.__docgenInfo={description:"",methods:[],displayName:"Question1"};var r,i,o;t.parameters={...t.parameters,docs:{...(r=t.parameters)==null?void 0:r.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/image-editor-vUFdKz9N.js b/assets/image-editor-AZ-dC4_D.js similarity index 91% rename from assets/image-editor-vUFdKz9N.js rename to assets/image-editor-AZ-dC4_D.js index 66c0888acc..3325e2e97f 100644 --- a/assets/image-editor-vUFdKz9N.js +++ b/assets/image-editor-AZ-dC4_D.js @@ -1,4 +1,4 @@ -import{a as o,j as a}from"./jsx-runtime-FVsy8kgq.js";import{c as f}from"./article-renderer-6f7Dak4j.js";import{_ as r}from"./jquery-yG1GhClm.js";import{U as p}from"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as b}from"./components-GHvuFaIn.js";import{c as y}from"./icon-paths-AuJwhOz7.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{E as w}from"./editor-jsonify-iuVqcZSO.js";import{r as C}from"./index-TT1qJ6UJ.js";import{B as v}from"./blur-input-hjJsfoK9.js";import{E as m}from"./editor-HVcPyY4Q.js";const{InfoTip:c,InlineIcon:R,RangeInput:k}=b,u=400,h=[0,10],I={url:null,width:0,height:0},x="(ka-.*.s3.amazonaws.com|(fastly|cdn).kastatic.org|khanacademy.org|kasandbox.org)",E=new RegExp("^(https?|web\\+graphie)://[^/]*"+x),T=["center","above","above right","right","below right","below","below left","left","above left"],s=class s extends C.Component{constructor(){super(...arguments),this._isMounted=!1,this.state={backgroundImageError:""}}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1}_renderRowForLabel(e,t){return o("tr",{children:[a("td",{children:a(k,{value:e.coordinates,onChange:this.onCoordinateChange.bind(this,t)})}),a("td",{style:{verticalAlign:"bottom",width:"5px"},children:a("input",{type:"text",className:"graph-settings-axis-label",value:e.content,onChange:this.onContentChange.bind(this,t)})}),a("td",{children:a("select",{className:"perseus-widget-dropdown",value:e.alignment,onChange:this.onAlignmentChange.bind(this,t),children:T.map(function(n,l){return a("option",{value:n,children:n},""+l)},this)})}),a("td",{children:a("a",{href:"#",className:"simple-button orange delete-label",title:"Remove this label",onClick:this.removeLabel.bind(this,t),children:a(R,{...y})})})]},t)}change(...e){return f.apply(this,e)}removeLabel(e,t){t.preventDefault();const n=[...this.props.labels];n.splice(e,1),this.props.onChange({labels:n})}onCoordinateChange(e,t){const n=this.props.labels.slice();n[e]=r.extend({},n[e],{coordinates:t}),this.props.onChange({labels:n})}onContentChange(e,t){const n=t.target.value,l=this.props.labels.slice();l[e]=r.extend({},l[e],{content:n}),this.props.onChange({labels:l})}onAlignmentChange(e,t){const n=t.target.value,l=this.props.labels.slice();l[e]=r.extend({},l[e],{alignment:n}),this.props.onChange({labels:l})}setUrl(e,t,n,l){if(!this._isMounted)return;const i=r.clone(this.props.backgroundImage);i.url=e,i.width=t,i.height=n;const g=[i.width,i.height];this.props.onChange({backgroundImage:i,box:g},null,l)}async onUrlChange(e,t){if(!e){this.setUrl(e,0,0,t);return}if(!E.test(e)){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"});return}this.setState({backgroundImageError:""});try{const n=await p.getImageSizeModern(e);this.setUrl(e,n[0],n[1],!0)}catch(n){this.setState({backgroundImageError:`There was an error loading the image URL: ${JSON.stringify(n,null,2)}`})}}onRangeChange(e,t){const n=this.props.range.slice();n[e]=t,this.props.onChange({range:n})}serialize(){return w.serialize.call(this)}render(){const e=this.props.backgroundImage,t=o("div",{className:"image-settings",children:[!p.isLabeledSVG(e.url)&&a("div",{children:o("label",{children:[a("div",{children:"Preview:"}),a("img",{alt:"Editor preview of image",src:e.url,style:{width:"100%"}})]})}),a("div",{children:o("label",{children:[a("div",{children:"Dimensions:"}),o("p",{children:[e.width,"x",e.height]})]})}),a("div",{children:o("label",{children:[o("div",{children:["Alt text:",a(c,{children:"This is important for screenreaders. The content of this alt text will be formatted as markdown (tables, emphasis, etc. are supported)."})]}),a(m,{apiOptions:this.props.apiOptions,content:this.props.alt,onChange:l=>{l.content!=null&&this.change("alt",l.content)},widgetEnabled:!1})]})}),a("div",{children:o("label",{children:[a("div",{children:"Caption:"}),a(m,{apiOptions:this.props.apiOptions,content:this.props.caption,onChange:l=>{l.content!=null&&this.change("caption",l.content)},widgetEnabled:!1})]})})]}),n=a("div",{className:"renderer-widget-error",children:this.state.backgroundImageError});return o("div",{className:"perseus-image-editor",children:[o("label",{children:["Image url:",a(c,{children:"Paste an image or graphie image URL."}),this.state.backgroundImageError&&n,a(v,{value:e.url||"",style:{width:332},onChange:l=>this.onUrlChange(l,!1)})]}),e.url&&t]})}};s.displayName="ImageEditor",s.widgetName="image",s.defaultProps={title:"",range:[h,h],box:[u,u],backgroundImage:I,labels:[],alt:"",caption:""};let d=s;d.__docgenInfo={description:"",methods:[{name:"_renderRowForLabel",docblock:null,modifiers:[],params:[{name:"label",optional:!1,type:null},{name:"i",optional:!1,type:null}],returns:null},{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"removeLabel",docblock:null,modifiers:[],params:[{name:"labelIndex",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"onCoordinateChange",docblock:null,modifiers:[],params:[{name:"labelIndex",optional:!1,type:null},{name:"newCoordinates",optional:!1,type:null}],returns:null},{name:"onContentChange",docblock:null,modifiers:[],params:[{name:"labelIndex",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"onAlignmentChange",docblock:null,modifiers:[],params:[{name:"labelIndex",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"setUrl",docblock:null,modifiers:[],params:[{name:"url",optional:!1,type:null},{name:"width",optional:!1,type:null},{name:"height",optional:!1,type:null},{name:"silent",optional:!1,type:null}],returns:null},{name:"onUrlChange",docblock:null,modifiers:["async"],params:[{name:"url",optional:!1,type:{name:"union",raw:"string | undefined | null",elements:[{name:"string"},{name:"undefined"},{name:"null"}]}},{name:"silent",optional:!1,type:{name:"boolean"}}],returns:null},{name:"onRangeChange",docblock:null,modifiers:[],params:[{name:"type",optional:!1,type:null},{name:"newRange",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"ImageEditor",props:{apiOptions:{required:!0,tsType:{name:"APIOptions"},description:""},title:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},range:{required:!1,tsType:{name:"tuple",raw:"[Readonly, Readonly]",elements:[{name:"Readonly",elements:[{name:"Range"}],raw:"Readonly"},{name:"Readonly",elements:[{name:"Range"}],raw:"Readonly"}]},description:"",defaultValue:{value:"[defaultRange, defaultRange]",computed:!1}},box:{required:!1,tsType:{name:"Size"},description:"",defaultValue:{value:"[defaultBoxSize, defaultBoxSize]",computed:!1}},backgroundImage:{required:!1,tsType:{name:"any"},description:"",defaultValue:{value:`{ +import{a as o,j as a}from"./jsx-runtime-FVsy8kgq.js";import{c as f}from"./article-renderer-TMdCDA85.js";import{_ as r}from"./jquery-yG1GhClm.js";import{U as p}from"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as b}from"./components-h6HHhmoA.js";import{c as y}from"./icon-paths-AuJwhOz7.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{E as w}from"./editor-jsonify-SX5E4P_Y.js";import{r as C}from"./index-TT1qJ6UJ.js";import{B as v}from"./blur-input-hjJsfoK9.js";import{E as m}from"./editor-I-vnrXtz.js";const{InfoTip:c,InlineIcon:R,RangeInput:k}=b,u=400,h=[0,10],I={url:null,width:0,height:0},x="(ka-.*.s3.amazonaws.com|(fastly|cdn).kastatic.org|khanacademy.org|kasandbox.org)",E=new RegExp("^(https?|web\\+graphie)://[^/]*"+x),T=["center","above","above right","right","below right","below","below left","left","above left"],s=class s extends C.Component{constructor(){super(...arguments),this._isMounted=!1,this.state={backgroundImageError:""}}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1}_renderRowForLabel(e,t){return o("tr",{children:[a("td",{children:a(k,{value:e.coordinates,onChange:this.onCoordinateChange.bind(this,t)})}),a("td",{style:{verticalAlign:"bottom",width:"5px"},children:a("input",{type:"text",className:"graph-settings-axis-label",value:e.content,onChange:this.onContentChange.bind(this,t)})}),a("td",{children:a("select",{className:"perseus-widget-dropdown",value:e.alignment,onChange:this.onAlignmentChange.bind(this,t),children:T.map(function(n,l){return a("option",{value:n,children:n},""+l)},this)})}),a("td",{children:a("a",{href:"#",className:"simple-button orange delete-label",title:"Remove this label",onClick:this.removeLabel.bind(this,t),children:a(R,{...y})})})]},t)}change(...e){return f.apply(this,e)}removeLabel(e,t){t.preventDefault();const n=[...this.props.labels];n.splice(e,1),this.props.onChange({labels:n})}onCoordinateChange(e,t){const n=this.props.labels.slice();n[e]=r.extend({},n[e],{coordinates:t}),this.props.onChange({labels:n})}onContentChange(e,t){const n=t.target.value,l=this.props.labels.slice();l[e]=r.extend({},l[e],{content:n}),this.props.onChange({labels:l})}onAlignmentChange(e,t){const n=t.target.value,l=this.props.labels.slice();l[e]=r.extend({},l[e],{alignment:n}),this.props.onChange({labels:l})}setUrl(e,t,n,l){if(!this._isMounted)return;const i=r.clone(this.props.backgroundImage);i.url=e,i.width=t,i.height=n;const g=[i.width,i.height];this.props.onChange({backgroundImage:i,box:g},null,l)}async onUrlChange(e,t){if(!e){this.setUrl(e,0,0,t);return}if(!E.test(e)){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"});return}this.setState({backgroundImageError:""});try{const n=await p.getImageSizeModern(e);this.setUrl(e,n[0],n[1],!0)}catch(n){this.setState({backgroundImageError:`There was an error loading the image URL: ${JSON.stringify(n,null,2)}`})}}onRangeChange(e,t){const n=this.props.range.slice();n[e]=t,this.props.onChange({range:n})}serialize(){return w.serialize.call(this)}render(){const e=this.props.backgroundImage,t=o("div",{className:"image-settings",children:[!p.isLabeledSVG(e.url)&&a("div",{children:o("label",{children:[a("div",{children:"Preview:"}),a("img",{alt:"Editor preview of image",src:e.url,style:{width:"100%"}})]})}),a("div",{children:o("label",{children:[a("div",{children:"Dimensions:"}),o("p",{children:[e.width,"x",e.height]})]})}),a("div",{children:o("label",{children:[o("div",{children:["Alt text:",a(c,{children:"This is important for screenreaders. The content of this alt text will be formatted as markdown (tables, emphasis, etc. are supported)."})]}),a(m,{apiOptions:this.props.apiOptions,content:this.props.alt,onChange:l=>{l.content!=null&&this.change("alt",l.content)},widgetEnabled:!1})]})}),a("div",{children:o("label",{children:[a("div",{children:"Caption:"}),a(m,{apiOptions:this.props.apiOptions,content:this.props.caption,onChange:l=>{l.content!=null&&this.change("caption",l.content)},widgetEnabled:!1})]})})]}),n=a("div",{className:"renderer-widget-error",children:this.state.backgroundImageError});return o("div",{className:"perseus-image-editor",children:[o("label",{children:["Image url:",a(c,{children:"Paste an image or graphie image URL."}),this.state.backgroundImageError&&n,a(v,{value:e.url||"",style:{width:332},onChange:l=>this.onUrlChange(l,!1)})]}),e.url&&t]})}};s.displayName="ImageEditor",s.widgetName="image",s.defaultProps={title:"",range:[h,h],box:[u,u],backgroundImage:I,labels:[],alt:"",caption:""};let d=s;d.__docgenInfo={description:"",methods:[{name:"_renderRowForLabel",docblock:null,modifiers:[],params:[{name:"label",optional:!1,type:null},{name:"i",optional:!1,type:null}],returns:null},{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"removeLabel",docblock:null,modifiers:[],params:[{name:"labelIndex",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"onCoordinateChange",docblock:null,modifiers:[],params:[{name:"labelIndex",optional:!1,type:null},{name:"newCoordinates",optional:!1,type:null}],returns:null},{name:"onContentChange",docblock:null,modifiers:[],params:[{name:"labelIndex",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"onAlignmentChange",docblock:null,modifiers:[],params:[{name:"labelIndex",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"setUrl",docblock:null,modifiers:[],params:[{name:"url",optional:!1,type:null},{name:"width",optional:!1,type:null},{name:"height",optional:!1,type:null},{name:"silent",optional:!1,type:null}],returns:null},{name:"onUrlChange",docblock:null,modifiers:["async"],params:[{name:"url",optional:!1,type:{name:"union",raw:"string | undefined | null",elements:[{name:"string"},{name:"undefined"},{name:"null"}]}},{name:"silent",optional:!1,type:{name:"boolean"}}],returns:null},{name:"onRangeChange",docblock:null,modifiers:[],params:[{name:"type",optional:!1,type:null},{name:"newRange",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"ImageEditor",props:{apiOptions:{required:!0,tsType:{name:"APIOptions"},description:""},title:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},range:{required:!1,tsType:{name:"tuple",raw:"[Readonly, Readonly]",elements:[{name:"Readonly",elements:[{name:"Range"}],raw:"Readonly"},{name:"Readonly",elements:[{name:"Range"}],raw:"Readonly"}]},description:"",defaultValue:{value:"[defaultRange, defaultRange]",computed:!1}},box:{required:!1,tsType:{name:"Size"},description:"",defaultValue:{value:"[defaultBoxSize, defaultBoxSize]",computed:!1}},backgroundImage:{required:!1,tsType:{name:"any"},description:"",defaultValue:{value:`{ url: null, width: 0, height: 0, diff --git a/assets/image-editor.stories-eJ2oFMJF.js b/assets/image-editor.stories-eJ2oFMJF.js deleted file mode 100644 index ea47216df0..0000000000 --- a/assets/image-editor.stories-eJ2oFMJF.js +++ /dev/null @@ -1,3 +0,0 @@ -import{j as o,a as p}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as d}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{V as u}from"./index-6h5t6F0w.js";import{s as f}from"./index-deFLJwr4.js";import{b as g}from"./index-h_CiYGGb.js";import{a as h}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{l as y}from"./index-awljIyHI.js";import{r as e}from"./index-TT1qJ6UJ.js";import{I as S}from"./image-editor-vUFdKz9N.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-dnMhQZ-1.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./icon-paths-AuJwhOz7.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./shared-3pf9YZIg.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./answer-choices-uB4giKvU.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-tmJoP6pY.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./strings-OAjNfY6D.js";import"./bundle.esm-7jAAHVxW.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./components-GHvuFaIn.js";import"./editor-jsonify-iuVqcZSO.js";import"./blur-input-hjJsfoK9.js";import"./editor-HVcPyY4Q.js";import"./index-0C4KXdeC.js";import"./index-SM3muJE2.js";import"./section-control-button-c-G3Veu9.js";import"./index-tFzzSRL2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";const Ir={title:"PerseusEditor/Widgets/Image Editor"},b=y.StyleSheet.create({wrapper:{width:338,margin:20}}),w=h("onChange"),E=()=>{const r=e.useRef(null),[l,c]=e.useState({backgroundImage:{url:"https://ka-perseus-images.s3.amazonaws.com/2ee5fc32e35c5178373b39fd304b325b2994c913.png"}});return p(u,{style:b.wrapper,children:[p(g,{style:{fontStyle:"italic",marginBottom:f.small_12},children:[o("b",{children:"Note"})," that this editor has a known-issue where it does not calculate the image dimensions initially if they aren't provided. It does update the dimensions when you blur the 'Image url:' field."]}),o(S,{...l,apiOptions:d.defaults,onChange:i=>{var m;w(i),c({...(m=r.current)==null?void 0:m.serialize(),...i})},ref:r})]})},t=r=>o(E,{});t.__docgenInfo={description:"",methods:[],displayName:"Default"};var a,s,n;t.parameters={...t.parameters,docs:{...(a=t.parameters)==null?void 0:a.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { - return ; -}`,...(n=(s=t.parameters)==null?void 0:s.docs)==null?void 0:n.source}}};const xr=["Default"];export{t as Default,xr as __namedExportsOrder,Ir as default}; diff --git a/assets/image-editor.stories-iKWOZsLx.js b/assets/image-editor.stories-iKWOZsLx.js new file mode 100644 index 0000000000..636c3710b0 --- /dev/null +++ b/assets/image-editor.stories-iKWOZsLx.js @@ -0,0 +1,3 @@ +import{j as o,a as p}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import{A as d}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{V as u}from"./index-6h5t6F0w.js";import{s as f}from"./index-deFLJwr4.js";import{b as g}from"./index-h_CiYGGb.js";import{a as h}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{l as y}from"./index-awljIyHI.js";import{r as e}from"./index-TT1qJ6UJ.js";import{I as S}from"./image-editor-AZ-dC4_D.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-dnMhQZ-1.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./icon-paths-AuJwhOz7.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./shared-3pf9YZIg.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./answer-choices-xSqM961S.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-HXEAXx7K.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./strings-OAjNfY6D.js";import"./bundle.esm-7jAAHVxW.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./components-h6HHhmoA.js";import"./editor-jsonify-SX5E4P_Y.js";import"./blur-input-hjJsfoK9.js";import"./editor-I-vnrXtz.js";import"./index-fuycm_QE.js";import"./index-k-0mNqHS.js";import"./index-SM3muJE2.js";import"./section-control-button-J8oVp9bZ.js";import"./index-tFzzSRL2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";const xr={title:"PerseusEditor/Widgets/Image Editor"},b=y.StyleSheet.create({wrapper:{width:338,margin:20}}),w=h("onChange"),E=()=>{const r=e.useRef(null),[l,c]=e.useState({backgroundImage:{url:"https://ka-perseus-images.s3.amazonaws.com/2ee5fc32e35c5178373b39fd304b325b2994c913.png"}});return p(u,{style:b.wrapper,children:[p(g,{style:{fontStyle:"italic",marginBottom:f.small_12},children:[o("b",{children:"Note"})," that this editor has a known-issue where it does not calculate the image dimensions initially if they aren't provided. It does update the dimensions when you blur the 'Image url:' field."]}),o(S,{...l,apiOptions:d.defaults,onChange:i=>{var m;w(i),c({...(m=r.current)==null?void 0:m.serialize(),...i})},ref:r})]})},t=r=>o(E,{});t.__docgenInfo={description:"",methods:[],displayName:"Default"};var a,s,n;t.parameters={...t.parameters,docs:{...(a=t.parameters)==null?void 0:a.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { + return ; +}`,...(n=(s=t.parameters)==null?void 0:s.docs)==null?void 0:n.source}}};const _r=["Default"];export{t as Default,_r as __namedExportsOrder,xr as default}; diff --git a/assets/image.stories-rckXI6mh.js b/assets/image.stories-93-8yzb1.js similarity index 82% rename from assets/image.stories-rckXI6mh.js rename to assets/image.stories-93-8yzb1.js index c74a2ff914..ebe2e613fe 100644 --- a/assets/image.stories-rckXI6mh.js +++ b/assets/image.stories-93-8yzb1.js @@ -1,4 +1,4 @@ -import{j as d}from"./jsx-runtime-FVsy8kgq.js";import{R as c}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const t={content:`[[☃ image 1]] +import{j as d}from"./jsx-runtime-FVsy8kgq.js";import{R as c}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const t={content:`[[☃ image 1]] ===== diff --git a/assets/index-nm6u35aB.js b/assets/index-6Rnzd_gN.js similarity index 51% rename from assets/index-nm6u35aB.js rename to assets/index-6Rnzd_gN.js index dd73e86034..e80dd5f639 100644 --- a/assets/index-nm6u35aB.js +++ b/assets/index-6Rnzd_gN.js @@ -1,6 +1,6 @@ -import{a as F}from"./version-akiLXZts.js";import"./article-editor-bhN33pAO.js";import"./device-framer-YjfQ5GqB.js";import"./viewport-resizer-2eJF63Xv.js";import{j as t,a as p}from"./jsx-runtime-FVsy8kgq.js";import{P as d}from"./index-0C4KXdeC.js";import{r as y}from"./index-TT1qJ6UJ.js";import{_ as N}from"./jquery-yG1GhClm.js";import{R as M,W as U}from"./structured-item-diff-cBK7G-UD.js";import{H as W,E as J}from"./editor-page-whMlClJx.js";import{E as $}from"./editor-HVcPyY4Q.js";import{a as G,w as Q}from"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import{b as Y,r as Z,a as K,c as X}from"./renderer-vBOYiNCS.js";import{A as ee}from"./perseus-api-mOiZT07d.js";import{l as u,g as te,e as re}from"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./dependencies-8XILypbq.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{J as ne,A as oe}from"./register-all-widgets-and-editors-for-testing-EmJZ0mCF.js";import{c as se}from"./components-GHvuFaIn.js";import{I as ae}from"./icon-paths-AuJwhOz7.js";import{M as ie}from"./multi-items-SYXQQaEF.js";import{l as i}from"./index-awljIyHI.js";import{R as le}from"./index-7vsPyIck.js";/* empty css */const ce="@khanacademy/perseus-editor",de="__lib_version__";F(ce,de);const A=d.shape({content:d.string,images:d.objectOf(d.any),widgets:d.objectOf(d.any)}),v=class v extends y.Component{constructor(){super(...arguments),this.state=v._stateFromProps(this.props)}UNSAFE_componentWillReceiveProps(e){this.setState(v._stateFromProps(e))}render(){const{before:e,after:r}=this.state,n=Math.max(e.length,r.length),a=N.times(n,l=>t(M,{before:l{const{before:r,after:n}=e;return{before:Array.isArray(r)?r:[r],after:Array.isArray(n)?n:[n]}};let T=v;T.__docgenInfo={description:"",methods:[{name:"_stateFromProps",docblock:null,modifiers:["static"],params:[{name:"props",optional:!1,type:null}],returns:null}],displayName:"ArticleDiff",props:{after:{description:"",type:{name:"union",value:[{name:"custom",raw:"rendererProps"},{name:"arrayOf",value:{name:"custom",raw:"rendererProps"}}]},required:!0},before:{description:"",type:{name:"union",value:[{name:"custom",raw:"rendererProps"},{name:"arrayOf",value:{name:"custom",raw:"rendererProps"}}]},required:!0}}};const q=d.shape({question:d.shape({}).isRequired,answerArea:d.shape({}).isRequired,hints:d.arrayOf(d.any).isRequired}),H=class H extends y.Component{render(){const{before:e,after:r}=this.props,n=Math.max(e.hints.length,r.hints.length),a=t(M,{before:e.question,after:r.question,title:"Question",showAlignmentOptions:!1,showSeparator:!0}),l=t(U,{before:e.answerArea,after:r.answerArea,title:"Question extras"}),c=N.times(n,function(m){return t(M,{before:m{}};let w=x;const S=i.StyleSheet.create({baseButton:{top:"0",fontSize:"11px",padding:"3px 10px",backgroundRepeat:"repeat-x",borderColor:` +import{a as F}from"./version-akiLXZts.js";import"./article-editor-_CIVbpzD.js";import"./device-framer-kfyrsN2-.js";import"./viewport-resizer-spuc4uQO.js";import{j as t,a as p}from"./jsx-runtime-FVsy8kgq.js";import{P as d}from"./index-k-0mNqHS.js";import{r as y}from"./index-TT1qJ6UJ.js";import{_ as N}from"./jquery-yG1GhClm.js";import{R as M,W as U}from"./structured-item-diff-eXkE0zlp.js";import{H as W,E as J}from"./editor-page-a0k5dFPi.js";import{E as $}from"./editor-I-vnrXtz.js";import{w as G}from"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import{b as Q,r as Y,a as Z,c as K}from"./renderer-hPmI_Chp.js";import{A as X}from"./perseus-api-mOiZT07d.js";import{l as u,g as ee,e as te}from"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./dependencies-8XILypbq.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{J as re,A as ne}from"./register-all-widgets-and-editors-for-testing-Duh1ZXvu.js";import{c as oe}from"./components-h6HHhmoA.js";import{I as se}from"./icon-paths-AuJwhOz7.js";import{M as ae}from"./multi-items-zAjfw5su.js";import{l as i}from"./index-awljIyHI.js";import{R as ie}from"./index-7vsPyIck.js";import{c as le}from"./index-fuycm_QE.js";/* empty css */const ce="@khanacademy/perseus-editor",de="__lib_version__";F(ce,de);const A=d.shape({content:d.string,images:d.objectOf(d.any),widgets:d.objectOf(d.any)}),v=class v extends y.Component{constructor(){super(...arguments),this.state=v._stateFromProps(this.props)}UNSAFE_componentWillReceiveProps(e){this.setState(v._stateFromProps(e))}render(){const{before:e,after:r}=this.state,n=Math.max(e.length,r.length),a=N.times(n,l=>t(M,{before:l{const{before:r,after:n}=e;return{before:Array.isArray(r)?r:[r],after:Array.isArray(n)?n:[n]}};let T=v;T.__docgenInfo={description:"",methods:[{name:"_stateFromProps",docblock:null,modifiers:["static"],params:[{name:"props",optional:!1,type:null}],returns:null}],displayName:"ArticleDiff",props:{after:{description:"",type:{name:"union",value:[{name:"custom",raw:"rendererProps"},{name:"arrayOf",value:{name:"custom",raw:"rendererProps"}}]},required:!0},before:{description:"",type:{name:"union",value:[{name:"custom",raw:"rendererProps"},{name:"arrayOf",value:{name:"custom",raw:"rendererProps"}}]},required:!0}}};const q=d.shape({question:d.shape({}).isRequired,answerArea:d.shape({}).isRequired,hints:d.arrayOf(d.any).isRequired}),H=class H extends y.Component{render(){const{before:e,after:r}=this.props,n=Math.max(e.hints.length,r.hints.length),a=t(M,{before:e.question,after:r.question,title:"Question",showAlignmentOptions:!1,showSeparator:!0}),l=t(U,{before:e.answerArea,after:r.answerArea,title:"Question extras"}),c=N.times(n,function(m){return t(M,{before:m{}};let w=x;const S=i.StyleSheet.create({baseButton:{top:"0",fontSize:"11px",padding:"3px 10px",backgroundRepeat:"repeat-x",borderColor:` rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25) `,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), - 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"}}});w.__docgenInfo={description:"",methods:[],displayName:"SimpleButton",props:{children:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"node"},required:!1},color:{defaultValue:{value:'"green"',computed:!1},description:"",type:{name:"enum",value:[{value:'"orange"',computed:!1},{value:'"green"',computed:!1}]},required:!1},onClick:{defaultValue:{value:"() => {}",computed:!1},description:"",type:{name:"func"},required:!1}}};const{InlineIcon:R}=se,{iconChevronDown:I,iconTrash:pe}=ae,{MultiRenderer:me}=ie;class E extends y.Component{constructor(){super(...arguments),this._handleSelectMode=e=>{if(this.props.onChange){const r=e.target.value;this.props.onChange(r)}}}render(){return p("label",{children:["Mode:"," ",p("select",{value:this.props.currentMode,onChange:this._handleSelectMode,children:[t("option",{value:"edit",children:"Edit"}),t("option",{value:"preview",children:"Preview"}),t("option",{value:"json",children:"Dev-only JSON"})]})]})}}function D(o){return o.replace(/[A-Z]/g,e=>" "+e.toLowerCase())}function P(o){return o.charAt(0).toUpperCase()+o.slice(1).toLowerCase()}function j(o){return o.charAt(o.length-1)==="s"?o.slice(0,-1):o}function f(o){return["_multi",...o]}const L=({depth:o,...e})=>{const n=`h${Math.min(o,5)+1}`;return t(n,{...e})},O=o=>{const{shape:e,data:r,path:n,actions:a,name:l,controls:c,...m}=o,h=l||D(n[n.length-1]||""),C=t(ye,{...m,shape:e,data:r,path:n,actions:a}),b=n.join(".");return e.type==="array"?t(ue,{name:h,controls:c,path:n,shape:e,actions:a,children:C},b):e.type==="object"?t(fe,{name:h,controls:c,path:n,children:C},b):t(he,{name:h,controls:c,path:n,shape:e,children:C},b)},he=({name:o,controls:e,children:r,path:n,shape:a})=>{const c=(a.type==="content"||a.type==="hint")&&t("div",{className:i.css(s.containerHeader),children:t(L,{depth:n.length,className:i.css(s.containerTitle),children:P(o)})});return p("div",{className:i.css(s.container),children:[p("span",{className:i.css(s.row,s.rowHeading),children:[t("div",{className:i.css(s.columnLeft),children:p("div",{className:"pod-title "+i.css(s.containerHeader),children:[t("div",{className:i.css(s.containerTitle),children:P(o)}),e]})}),t("div",{className:i.css(s.columnRight),children:c})]}),r]})},ue=o=>{const{name:e,controls:r,children:n,path:a,shape:l,actions:c}=o;return p("div",{className:i.css(s.container),children:[r&&t("div",{className:i.css(s.columnLeft,s.containerHeader),children:r}),t("div",{children:n}),t("div",{className:i.css(s.columnLeft),children:p("a",{href:"javascript:void 0",onClick:()=>c.addArrayElement(a,l.elementShape),children:["Add a ",j(e)]})})]})},fe=({name:o,controls:e,children:r,path:n})=>{const a=p("div",{className:i.css(s.containerHeader),children:[t(L,{depth:n.length,className:i.css(s.containerTitle),children:P(o)}),e]}),l=(o||e)&&t("div",{className:i.css(s.containerHeader,s.previewCollectionHeader),children:t(L,{depth:n.length,className:i.css(s.containerTitle),children:P(o)})}),c=a&&l;return p("div",{className:i.css(s.container),children:[c&&p("span",{className:i.css(s.row),children:[t("div",{className:i.css(s.columnLeft),children:a}),t("div",{className:i.css(s.columnRight),children:l})]}),t("div",{className:i.css(n.length>0&&s.contentIndent),children:r})]})},ye=o=>{const{shape:e,data:r,...n}=o;return e.type==="content"?t(ge,{shape:e,data:r,...n}):e.type==="hint"?t(ve,{shape:e,data:r,...n}):e.type==="tags"?t(we,{shape:e,data:r,...n}):e.type==="array"?t(Ce,{shape:e,data:r,...n}):e.type==="object"?t(be,{shape:e,data:r,...n}):null},z=o=>class extends y.Component{constructor(){super(...arguments),this.state={sticky:!1},this.updateStickiness=()=>{const n=le.findDOMNode(this).offsetHeight,a=window.innerHeight,l=n>a;l!==this.state.sticky&&this.setState({sticky:l})}}componentDidMount(){this.stickynessTimer=setInterval(this.updateStickiness,1e3),this.updateStickiness()}componentWillUnmount(){clearInterval(this.stickynessTimer)}render(){return t(o,{...this.props,sticky:this.state.sticky})}},ge=z(o=>{const{data:e,path:r,actions:n,apiOptions:a,renderers:l,sticky:c}=o,m=t("div",{className:"framework-perseus",children:u(l).get(r)});return t("span",{children:p("div",{className:i.css(s.row),children:[t("div",{className:i.css(s.columnLeft),children:t("div",{className:i.css(c&&s.sticky),children:t($,{...e,onChange:h=>n.mergeValueAtPath(r,h),apiOptions:a})})}),t("div",{className:i.css(s.columnRight),children:t("div",{className:i.css(c&&s.sticky),children:m})})]})})}),ve=z(o=>{const{data:e,path:r,actions:n,apiOptions:a,renderers:l,sticky:c}=o,m=t("div",{className:"framework-perseus",children:u(l).get(r)});return p("div",{className:i.css(s.row),children:[t("div",{className:i.css(s.columnLeft),children:t("div",{className:i.css(c&&s.sticky),children:t(W,{...e,className:i.css(s.hintEditor),onChange:h=>n.mergeValueAtPath(r,h),apiOptions:a,showTitle:!1,showRemoveButton:!1,showMoveButtons:!1,onRemove:()=>{},onMove:h=>{},isFirst:!0,isLast:!0})})}),t("div",{className:i.css(s.columnRight),children:t("div",{className:i.css(c&&s.sticky),children:m})})]})}),we=o=>{const{data:e,path:r,actions:n,apiOptions:a}=o,{GroupMetadataEditor:l}=a;return l==null?null:t("div",{className:i.css(s.columnLeft),children:t("div",{className:i.css(s.tagsEditor),children:t(l,{value:e,onChange:c=>n.setValueAtPath(r,c),showTitle:!1})})})},Ce=o=>{const{shape:e,data:r,path:n,actions:a,...l}=o,c=D(n[n.length-1]),m=j(c),h=e.elementShape.type,C=h==="content"||h==="hint",b=r.map((V,g)=>{const k=n.concat(g),B=[g>0&&t("div",{className:i.css(s.control),children:t(w,{color:"orange",title:"Move up",onClick:()=>a.moveArrayElementUp(k),children:t("div",{className:i.css(s.verticalFlip),children:t(R,{...I})})})},"moveArrayElementUp"),ga.moveArrayElementDown(k),children:t(R,{...I})})},"moveArrayElementDown"),t("div",{className:i.css(s.control),children:t(w,{color:"orange",title:"Delete",onClick:()=>a.removeArrayElement(k),children:t(R,{...pe})})},"removeArrayElement")];return t("div",{className:i.css(s.arrayElement,!C&&s.arrayElementAndNotLeaf),children:y.createElement(O,{...l,key:g,shape:e.elementShape,data:V,path:k,actions:a,name:`${m} ${g+1}`,controls:B})},g)});return t("div",{children:b})},be=o=>{const{shape:e,data:r,path:n,...a}=o,l=Object.keys(e.shape).map(c=>t("div",{className:i.css(s.objectElement),children:t(O,{...a,shape:e.shape[c],data:r[c],path:n.concat(c)})},c));return t("div",{children:l})};class Ne extends y.Component{constructor(){super(...arguments),this._renderLayout=()=>{const{Layout:e,apiOptions:r,item:n}=this.props;return t(e,{ref:a=>this.layout=a,item:n,apiOptions:r})},this._renderJson=()=>p("div",{children:[t(E,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})}),t(ne,{multiLine:!0,value:this.props.item,onChange:e=>this.props.onChange({item:e})})]}),this._renderPreview=()=>p("div",{children:[t(E,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})}),this._renderLayout()]}),this.mergeValueAtPath=(e,r)=>{this.props.onChange({item:u(this.props.item).merge(f(e),r).freeze()})},this.setValueAtPath=(e,r)=>{this.props.onChange({item:u(this.props.item).set(f(e),r).freeze()})},this.addArrayElement=(e,r)=>{const n=u(this.props.item).get(f(e)).length,a=e.concat(n),l=te(r);this.props.onChange({item:u(this.props.item).set(f(a),l).freeze()})},this.removeArrayElement=e=>{this.props.onChange({item:u(this.props.item).del(f(e)).freeze()})},this.moveArrayElementDown=e=>{const n=e[e.length-1]+1,a=e.slice(0,-1).concat(n),l=u(this.props.item).get(f(e)),c=u(this.props.item).get(f(a));this.props.onChange({item:u(this.props.item).set(f(e),c).set(f(a),l).freeze()})},this.moveArrayElementUp=e=>{const r=e[e.length-1],n=e.slice(0,-1).concat(r-1);this.moveArrayElementDown(n)},this._renderEdit=()=>{const e={...ee.defaults,...this.props.apiOptions},{item:r}=this.props,n=this.props.Layout.shape;return p("div",{className:"perseus-multirenderer-editor",children:[t(E,{currentMode:this.props.editorMode,onChange:a=>this.props.onChange({editorMode:a})}),t(me,{item:r,shape:n,apiOptions:e,dependencies:{analytics:{onAnalyticsEvent:async()=>{}}},children:({renderers:a})=>t(O,{shape:n,data:re(r),path:[],actions:this,apiOptions:e,renderers:a})})]})},this.score=()=>{if(this.layout)return this.layout.score()},this.getSerializedState=()=>{if(this.layout)return this.layout.getSerializedState()},this.restoreSerializedState=e=>{this.layout&&this.layout.restoreSerializedState(e)},this._renderContent=()=>{switch(this.props.editorMode){case"json":return this._renderJson();case"preview":return this._renderPreview();case"edit":return this._renderEdit();default:return t(E,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})})}}}render(){return t("div",{id:"perseus",children:this._renderContent()})}}const s=i.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}});Ne.__docgenInfo={description:"",methods:[{name:"_renderLayout",docblock:null,modifiers:[],params:[],returns:null},{name:"_renderJson",docblock:null,modifiers:[],params:[],returns:null},{name:"_renderPreview",docblock:null,modifiers:[],params:[],returns:null},{name:"mergeValueAtPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"Path"}},{name:"newValue",optional:!1,type:{name:"unknown"}}],returns:null},{name:"setValueAtPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"Path"}},{name:"newValue",optional:!1,type:{name:"unknown"}}],returns:null},{name:"addArrayElement",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"Path"}},{name:"shape",optional:!1,type:{name:"Shape",alias:"Shape"}}],returns:null},{name:"removeArrayElement",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"Path"}}],returns:null},{name:"moveArrayElementDown",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"Path"}}],returns:null},{name:"moveArrayElementUp",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"Path"}}],returns:null},{name:"_renderEdit",docblock:null,modifiers:[],params:[],returns:null},{name:"score",docblock:null,modifiers:[],params:[],returns:null},{name:"getSerializedState",docblock:null,modifiers:[],params:[],returns:null},{name:"restoreSerializedState",docblock:null,modifiers:[],params:[{name:"state",optional:!1,type:{name:"any"}}],returns:null},{name:"_renderContent",docblock:null,modifiers:[],params:[],returns:null}],displayName:"MultiRendererEditor",props:{Layout:{required:!0,tsType:{name:"intersection",raw:"React.ComponentType & LayoutStatics",elements:[{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}]},{name:"LayoutStatics"}]},description:""},apiOptions:{required:!0,tsType:{name:"APIOptions"},description:""},item:{required:!0,tsType:{name:"Item"},description:""},editorMode:{required:!0,tsType:{name:"EditorMode"},description:""},onChange:{required:!0,tsType:{name:"ChangeHandler"},description:""}}};G({displayName:"StatefulEditorPage",propTypes:{componentClass:d.func},getDefaultProps:function(){return{componentClass:J}},getInitialState:function(){return N({}).extend(N.omit(this.props,"componentClass"),{onChange:this.handleChange,ref:"editor"})},componentDidMount:function(){this._isMounted=!0},UNSAFE_componentWillReceiveProps:function(o){this.setState(N(o).pick("apiOptions","imageUploader","developerMode","problemNum","previewDevice","frameSource"))},componentWillUnmount:function(){this._isMounted=!1},getSaveWarnings:function(){return this.refs.editor.getSaveWarnings()},serialize:function(){return this.refs.editor.serialize()},handleChange:function(o,e){this._isMounted&&this.setState(o,e)},scorePreview:function(){return this.refs.editor.scorePreview()},render:function(){const o=this.props.componentClass;return t(o,{...this.state})}});Y(oe);Z(Q);K();X(); + 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"}}});w.__docgenInfo={description:"",methods:[],displayName:"SimpleButton",props:{children:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"node"},required:!1},color:{defaultValue:{value:'"green"',computed:!1},description:"",type:{name:"enum",value:[{value:'"orange"',computed:!1},{value:'"green"',computed:!1}]},required:!1},onClick:{defaultValue:{value:"() => {}",computed:!1},description:"",type:{name:"func"},required:!1}}};const{InlineIcon:R}=oe,{iconChevronDown:I,iconTrash:pe}=se,{MultiRenderer:me}=ae;class E extends y.Component{constructor(){super(...arguments),this._handleSelectMode=e=>{if(this.props.onChange){const r=e.target.value;this.props.onChange(r)}}}render(){return p("label",{children:["Mode:"," ",p("select",{value:this.props.currentMode,onChange:this._handleSelectMode,children:[t("option",{value:"edit",children:"Edit"}),t("option",{value:"preview",children:"Preview"}),t("option",{value:"json",children:"Dev-only JSON"})]})]})}}function D(o){return o.replace(/[A-Z]/g,e=>" "+e.toLowerCase())}function P(o){return o.charAt(0).toUpperCase()+o.slice(1).toLowerCase()}function j(o){return o.charAt(o.length-1)==="s"?o.slice(0,-1):o}function f(o){return["_multi",...o]}const L=({depth:o,...e})=>{const n=`h${Math.min(o,5)+1}`;return t(n,{...e})},O=o=>{const{shape:e,data:r,path:n,actions:a,name:l,controls:c,...m}=o,h=l||D(n[n.length-1]||""),C=t(ye,{...m,shape:e,data:r,path:n,actions:a}),b=n.join(".");return e.type==="array"?t(ue,{name:h,controls:c,path:n,shape:e,actions:a,children:C},b):e.type==="object"?t(fe,{name:h,controls:c,path:n,children:C},b):t(he,{name:h,controls:c,path:n,shape:e,children:C},b)},he=({name:o,controls:e,children:r,path:n,shape:a})=>{const c=(a.type==="content"||a.type==="hint")&&t("div",{className:i.css(s.containerHeader),children:t(L,{depth:n.length,className:i.css(s.containerTitle),children:P(o)})});return p("div",{className:i.css(s.container),children:[p("span",{className:i.css(s.row,s.rowHeading),children:[t("div",{className:i.css(s.columnLeft),children:p("div",{className:"pod-title "+i.css(s.containerHeader),children:[t("div",{className:i.css(s.containerTitle),children:P(o)}),e]})}),t("div",{className:i.css(s.columnRight),children:c})]}),r]})},ue=o=>{const{name:e,controls:r,children:n,path:a,shape:l,actions:c}=o;return p("div",{className:i.css(s.container),children:[r&&t("div",{className:i.css(s.columnLeft,s.containerHeader),children:r}),t("div",{children:n}),t("div",{className:i.css(s.columnLeft),children:p("a",{href:"javascript:void 0",onClick:()=>c.addArrayElement(a,l.elementShape),children:["Add a ",j(e)]})})]})},fe=({name:o,controls:e,children:r,path:n})=>{const a=p("div",{className:i.css(s.containerHeader),children:[t(L,{depth:n.length,className:i.css(s.containerTitle),children:P(o)}),e]}),l=(o||e)&&t("div",{className:i.css(s.containerHeader,s.previewCollectionHeader),children:t(L,{depth:n.length,className:i.css(s.containerTitle),children:P(o)})}),c=a&&l;return p("div",{className:i.css(s.container),children:[c&&p("span",{className:i.css(s.row),children:[t("div",{className:i.css(s.columnLeft),children:a}),t("div",{className:i.css(s.columnRight),children:l})]}),t("div",{className:i.css(n.length>0&&s.contentIndent),children:r})]})},ye=o=>{const{shape:e,data:r,...n}=o;return e.type==="content"?t(ge,{shape:e,data:r,...n}):e.type==="hint"?t(ve,{shape:e,data:r,...n}):e.type==="tags"?t(we,{shape:e,data:r,...n}):e.type==="array"?t(Ce,{shape:e,data:r,...n}):e.type==="object"?t(be,{shape:e,data:r,...n}):null},z=o=>class extends y.Component{constructor(){super(...arguments),this.state={sticky:!1},this.updateStickiness=()=>{const n=ie.findDOMNode(this).offsetHeight,a=window.innerHeight,l=n>a;l!==this.state.sticky&&this.setState({sticky:l})}}componentDidMount(){this.stickynessTimer=setInterval(this.updateStickiness,1e3),this.updateStickiness()}componentWillUnmount(){clearInterval(this.stickynessTimer)}render(){return t(o,{...this.props,sticky:this.state.sticky})}},ge=z(o=>{const{data:e,path:r,actions:n,apiOptions:a,renderers:l,sticky:c}=o,m=t("div",{className:"framework-perseus",children:u(l).get(r)});return t("span",{children:p("div",{className:i.css(s.row),children:[t("div",{className:i.css(s.columnLeft),children:t("div",{className:i.css(c&&s.sticky),children:t($,{...e,onChange:h=>n.mergeValueAtPath(r,h),apiOptions:a})})}),t("div",{className:i.css(s.columnRight),children:t("div",{className:i.css(c&&s.sticky),children:m})})]})})}),ve=z(o=>{const{data:e,path:r,actions:n,apiOptions:a,renderers:l,sticky:c}=o,m=t("div",{className:"framework-perseus",children:u(l).get(r)});return p("div",{className:i.css(s.row),children:[t("div",{className:i.css(s.columnLeft),children:t("div",{className:i.css(c&&s.sticky),children:t(W,{...e,className:i.css(s.hintEditor),onChange:h=>n.mergeValueAtPath(r,h),apiOptions:a,showTitle:!1,showRemoveButton:!1,showMoveButtons:!1,onRemove:()=>{},onMove:h=>{},isFirst:!0,isLast:!0})})}),t("div",{className:i.css(s.columnRight),children:t("div",{className:i.css(c&&s.sticky),children:m})})]})}),we=o=>{const{data:e,path:r,actions:n,apiOptions:a}=o,{GroupMetadataEditor:l}=a;return l==null?null:t("div",{className:i.css(s.columnLeft),children:t("div",{className:i.css(s.tagsEditor),children:t(l,{value:e,onChange:c=>n.setValueAtPath(r,c),showTitle:!1})})})},Ce=o=>{const{shape:e,data:r,path:n,actions:a,...l}=o,c=D(n[n.length-1]),m=j(c),h=e.elementShape.type,C=h==="content"||h==="hint",b=r.map((V,g)=>{const k=n.concat(g),B=[g>0&&t("div",{className:i.css(s.control),children:t(w,{color:"orange",title:"Move up",onClick:()=>a.moveArrayElementUp(k),children:t("div",{className:i.css(s.verticalFlip),children:t(R,{...I})})})},"moveArrayElementUp"),ga.moveArrayElementDown(k),children:t(R,{...I})})},"moveArrayElementDown"),t("div",{className:i.css(s.control),children:t(w,{color:"orange",title:"Delete",onClick:()=>a.removeArrayElement(k),children:t(R,{...pe})})},"removeArrayElement")];return t("div",{className:i.css(s.arrayElement,!C&&s.arrayElementAndNotLeaf),children:y.createElement(O,{...l,key:g,shape:e.elementShape,data:V,path:k,actions:a,name:`${m} ${g+1}`,controls:B})},g)});return t("div",{children:b})},be=o=>{const{shape:e,data:r,path:n,...a}=o,l=Object.keys(e.shape).map(c=>t("div",{className:i.css(s.objectElement),children:t(O,{...a,shape:e.shape[c],data:r[c],path:n.concat(c)})},c));return t("div",{children:l})};class Ne extends y.Component{constructor(){super(...arguments),this._renderLayout=()=>{const{Layout:e,apiOptions:r,item:n}=this.props;return t(e,{ref:a=>this.layout=a,item:n,apiOptions:r})},this._renderJson=()=>p("div",{children:[t(E,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})}),t(re,{multiLine:!0,value:this.props.item,onChange:e=>this.props.onChange({item:e})})]}),this._renderPreview=()=>p("div",{children:[t(E,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})}),this._renderLayout()]}),this.mergeValueAtPath=(e,r)=>{this.props.onChange({item:u(this.props.item).merge(f(e),r).freeze()})},this.setValueAtPath=(e,r)=>{this.props.onChange({item:u(this.props.item).set(f(e),r).freeze()})},this.addArrayElement=(e,r)=>{const n=u(this.props.item).get(f(e)).length,a=e.concat(n),l=ee(r);this.props.onChange({item:u(this.props.item).set(f(a),l).freeze()})},this.removeArrayElement=e=>{this.props.onChange({item:u(this.props.item).del(f(e)).freeze()})},this.moveArrayElementDown=e=>{const n=e[e.length-1]+1,a=e.slice(0,-1).concat(n),l=u(this.props.item).get(f(e)),c=u(this.props.item).get(f(a));this.props.onChange({item:u(this.props.item).set(f(e),c).set(f(a),l).freeze()})},this.moveArrayElementUp=e=>{const r=e[e.length-1],n=e.slice(0,-1).concat(r-1);this.moveArrayElementDown(n)},this._renderEdit=()=>{const e={...X.defaults,...this.props.apiOptions},{item:r}=this.props,n=this.props.Layout.shape;return p("div",{className:"perseus-multirenderer-editor",children:[t(E,{currentMode:this.props.editorMode,onChange:a=>this.props.onChange({editorMode:a})}),t(me,{item:r,shape:n,apiOptions:e,dependencies:{analytics:{onAnalyticsEvent:async()=>{}}},children:({renderers:a})=>t(O,{shape:n,data:te(r),path:[],actions:this,apiOptions:e,renderers:a})})]})},this.score=()=>{if(this.layout)return this.layout.score()},this.getSerializedState=()=>{if(this.layout)return this.layout.getSerializedState()},this.restoreSerializedState=e=>{this.layout&&this.layout.restoreSerializedState(e)},this._renderContent=()=>{switch(this.props.editorMode){case"json":return this._renderJson();case"preview":return this._renderPreview();case"edit":return this._renderEdit();default:return t(E,{currentMode:this.props.editorMode,onChange:e=>this.props.onChange({editorMode:e})})}}}render(){return t("div",{id:"perseus",children:this._renderContent()})}}const s=i.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}});Ne.__docgenInfo={description:"",methods:[{name:"_renderLayout",docblock:null,modifiers:[],params:[],returns:null},{name:"_renderJson",docblock:null,modifiers:[],params:[],returns:null},{name:"_renderPreview",docblock:null,modifiers:[],params:[],returns:null},{name:"mergeValueAtPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"Path"}},{name:"newValue",optional:!1,type:{name:"unknown"}}],returns:null},{name:"setValueAtPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"Path"}},{name:"newValue",optional:!1,type:{name:"unknown"}}],returns:null},{name:"addArrayElement",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"Path"}},{name:"shape",optional:!1,type:{name:"Shape",alias:"Shape"}}],returns:null},{name:"removeArrayElement",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"Path"}}],returns:null},{name:"moveArrayElementDown",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"Path"}}],returns:null},{name:"moveArrayElementUp",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"Path"}}],returns:null},{name:"_renderEdit",docblock:null,modifiers:[],params:[],returns:null},{name:"score",docblock:null,modifiers:[],params:[],returns:null},{name:"getSerializedState",docblock:null,modifiers:[],params:[],returns:null},{name:"restoreSerializedState",docblock:null,modifiers:[],params:[{name:"state",optional:!1,type:{name:"any"}}],returns:null},{name:"_renderContent",docblock:null,modifiers:[],params:[],returns:null}],displayName:"MultiRendererEditor",props:{Layout:{required:!0,tsType:{name:"intersection",raw:"React.ComponentType & LayoutStatics",elements:[{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}]},{name:"LayoutStatics"}]},description:""},apiOptions:{required:!0,tsType:{name:"APIOptions"},description:""},item:{required:!0,tsType:{name:"Item"},description:""},editorMode:{required:!0,tsType:{name:"EditorMode"},description:""},onChange:{required:!0,tsType:{name:"ChangeHandler"},description:""}}};le({displayName:"StatefulEditorPage",propTypes:{componentClass:d.func},getDefaultProps:function(){return{componentClass:J}},getInitialState:function(){return N({}).extend(N.omit(this.props,"componentClass"),{onChange:this.handleChange,ref:"editor"})},componentDidMount:function(){this._isMounted=!0},UNSAFE_componentWillReceiveProps:function(o){this.setState(N(o).pick("apiOptions","imageUploader","developerMode","problemNum","previewDevice","frameSource"))},componentWillUnmount:function(){this._isMounted=!1},getSaveWarnings:function(){return this.refs.editor.getSaveWarnings()},serialize:function(){return this.refs.editor.serialize()},handleChange:function(o,e){this._isMounted&&this.setState(o,e)},scorePreview:function(){return this.refs.editor.scorePreview()},render:function(){const o=this.props.componentClass;return t(o,{...this.state})}});Q(ne);Y(G);Z();K(); diff --git a/assets/index-qwL3MFQI.js b/assets/index-Jny9tT-6.js similarity index 97% rename from assets/index-qwL3MFQI.js rename to assets/index-Jny9tT-6.js index 3b08f2890e..81c7211d90 100644 --- a/assets/index-qwL3MFQI.js +++ b/assets/index-Jny9tT-6.js @@ -1,4 +1,4 @@ -import{a as s,j as e,F as $}from"./jsx-runtime-FVsy8kgq.js";import{c as h}from"./article-renderer-6f7Dak4j.js";import{_ as r}from"./jquery-yG1GhClm.js";import{U as H}from"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import{a as g,g as j}from"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import{K as p}from"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{E as f}from"./editor-jsonify-iuVqcZSO.js";import{r as d}from"./index-TT1qJ6UJ.js";import{G as Q}from"./graph-settings-F_5lrkPp.js";import{c}from"./components-GHvuFaIn.js";import{b as Z,d as ee,e as ne,f as te,c as ae}from"./icon-paths-AuJwhOz7.js";import"./prop-types-3bOVFRDQ.js";import{c as se}from"./key-translator-IA-2V2LV.js";import"./mobile-keypad-hKjeQGNp.js";import{u as re}from"./button-assets-txIojR3b.js";import{V as ie}from"./index-6h5t6F0w.js";import{c as K}from"./index-deFLJwr4.js";import{l as le}from"./index-awljIyHI.js";const{InlineIcon:b}=c,D=class D extends d.Component{constructor(n){super(n),this.toggle=t=>{t.preventDefault(),this.setState({show:!this.state.show})},this.state={show:n.initiallyVisible}}render(){return s("div",{className:"perseus-interaction-element",children:[s("a",{href:"#",className:"perseus-interaction-element-title "+(this.state.show?"open":"closed"),onClick:this.toggle,children:[this.state.show?e(b,{...Z}):e(b,{...ee}),this.props.title]}),s("div",{className:"perseus-interaction-element-content "+(this.state.show?"enter":"leave"),children:[this.props.children,(this.props.onUp!=null||this.props.onDown!=null||this.props.onDelete!=null)&&s("div",{className:"edit-controls",children:[this.props.onUp!=null&&e("button",{onClick:this.props.onUp,children:e(b,{...ne})}),this.props.onDown!=null&&e("button",{onClick:this.props.onDown,children:e(b,{...te})}),this.props.onDelete!=null&&e("button",{onClick:this.props.onDelete,children:e(b,{...ae})})]})]})]})}};D.defaultProps={initiallyVisible:!1,title:"More"};let u=D;u.__docgenInfo={description:"",methods:[{name:"toggle",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"ReactSyntheticEvent",raw:"React.SyntheticEvent",alias:"React.SyntheticEvent"}}],returns:null}],displayName:"ElementContainer",props:{children:{required:!0,tsType:{name:"union",raw:"React.ReactElement | ReadonlyArray>",elements:[{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]},{name:"ReadonlyArray",elements:[{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}],raw:"ReadonlyArray>"}]},description:""},initiallyVisible:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},onDelete:{required:!1,tsType:{name:"signature",type:"function",raw:"() => void | null | undefined",signature:{arguments:[],return:{name:"union",raw:"void | null | undefined",elements:[{name:"void"},{name:"null"},{name:"undefined"}]}}},description:""},onDown:{required:!1,tsType:{name:"signature",type:"function",raw:"() => void | null | undefined",signature:{arguments:[],return:{name:"union",raw:"void | null | undefined",elements:[{name:"void"},{name:"null"},{name:"undefined"}]}}},description:""},onUp:{required:!1,tsType:{name:"signature",type:"function",raw:"() => void | null | undefined",signature:{arguments:[],return:{name:"union",raw:"void | null | undefined",elements:[{name:"void"},{name:"null"},{name:"undefined"}]}}},description:""},title:{required:!1,tsType:{name:"union",raw:"string | React.ReactElement",elements:[{name:"string"},{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}]},description:"",defaultValue:{value:'"More"',computed:!1}}}};const{ButtonGroup:oe}=c,pe=[p.BLACK,p.BLUE,p.GREEN,p.PINK,p.PURPLE,p.RED,p.GRAY],de=[p.LIGHT_BLUE,p.LIGHT_ORANGE,p.LIGHT_PINK,p.LIGHT_GREEN,p.LIGHT_PURPLE,p.LIGHT_RED,"#fff"],X=class X extends d.Component{render(){const n=this.props.lightColors?de:pe;return e(oe,{value:this.props.value,allowEmpty:!1,buttons:r.map(n,t=>({value:t,content:s("span",{children:[e("span",{className:"colorpicker-circle",style:{background:t}})," "]})})),onChange:this.props.onChange})}};X.defaultProps={value:p.BLACK,lightColors:!1};let m=X;m.__docgenInfo={description:"",methods:[],displayName:"ColorPicker",props:{lightColors:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},value:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"KhanColors.BLACK",computed:!0}}}};const{ButtonGroup:ue}=c,M=class M extends d.Component{render(){return e(ue,{value:this.props.value,allowEmpty:!1,buttons:[{value:"",content:e("span",{children:"—"})},{value:"-",content:e("span",{children:"–––"})},{value:"- ",content:e("span",{children:"–  –"})},{value:".",content:e("span",{children:"····"})},{value:". ",content:e("span",{children:"· · ·"})}],onChange:this.props.onChange})}};M.defaultProps={value:""};let y=M;y.__docgenInfo={description:"",methods:[],displayName:"DashPicker",props:{value:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}}}};function i(W){const n=d.useRef(null),t=d.useRef(),{locale:a,strings:o}=re();return d.useEffect(()=>{n.current&&!t.current&&(t.current=se(n.current,a,o,l=>({...l,handlers:{edit:v=>{let _=v.latex();_=_.replace(/<>/g,"\\ne"),W.value!==_&&W.onChange(_)},upOutOf:v=>{v.typedText("^")}}})))}),e(ie,{style:ce.outerWrapper,children:e("span",{ref:n,className:"perseus-math-input mq-editable-field mq-math-mode"})})}const ce=le.StyleSheet.create({outerWrapper:{display:"inline-block",borderStyle:"solid",borderWidth:1,borderColor:K.offBlack50,borderRadius:3,background:K.white}});i.__docgenInfo={description:`A simple Mathquill MathField input for the InteractionEditor. +import{a as s,j as e,F as $}from"./jsx-runtime-FVsy8kgq.js";import{c as h}from"./article-renderer-TMdCDA85.js";import{_ as r}from"./jquery-yG1GhClm.js";import{U as H}from"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import{a as g,g as j}from"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import{K as p}from"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{E as f}from"./editor-jsonify-SX5E4P_Y.js";import{r as d}from"./index-TT1qJ6UJ.js";import{G as Q}from"./graph-settings-_umr9_il.js";import{c}from"./components-h6HHhmoA.js";import{b as Z,d as ee,e as ne,f as te,c as ae}from"./icon-paths-AuJwhOz7.js";import"./prop-types-3bOVFRDQ.js";import{c as se}from"./key-translator-IA-2V2LV.js";import"./mobile-keypad-hKjeQGNp.js";import{u as re}from"./button-assets-txIojR3b.js";import{V as ie}from"./index-6h5t6F0w.js";import{c as K}from"./index-deFLJwr4.js";import{l as le}from"./index-awljIyHI.js";const{InlineIcon:b}=c,D=class D extends d.Component{constructor(n){super(n),this.toggle=t=>{t.preventDefault(),this.setState({show:!this.state.show})},this.state={show:n.initiallyVisible}}render(){return s("div",{className:"perseus-interaction-element",children:[s("a",{href:"#",className:"perseus-interaction-element-title "+(this.state.show?"open":"closed"),onClick:this.toggle,children:[this.state.show?e(b,{...Z}):e(b,{...ee}),this.props.title]}),s("div",{className:"perseus-interaction-element-content "+(this.state.show?"enter":"leave"),children:[this.props.children,(this.props.onUp!=null||this.props.onDown!=null||this.props.onDelete!=null)&&s("div",{className:"edit-controls",children:[this.props.onUp!=null&&e("button",{onClick:this.props.onUp,children:e(b,{...ne})}),this.props.onDown!=null&&e("button",{onClick:this.props.onDown,children:e(b,{...te})}),this.props.onDelete!=null&&e("button",{onClick:this.props.onDelete,children:e(b,{...ae})})]})]})]})}};D.defaultProps={initiallyVisible:!1,title:"More"};let u=D;u.__docgenInfo={description:"",methods:[{name:"toggle",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"ReactSyntheticEvent",raw:"React.SyntheticEvent",alias:"React.SyntheticEvent"}}],returns:null}],displayName:"ElementContainer",props:{children:{required:!0,tsType:{name:"union",raw:"React.ReactElement | ReadonlyArray>",elements:[{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]},{name:"ReadonlyArray",elements:[{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}],raw:"ReadonlyArray>"}]},description:""},initiallyVisible:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},onDelete:{required:!1,tsType:{name:"signature",type:"function",raw:"() => void | null | undefined",signature:{arguments:[],return:{name:"union",raw:"void | null | undefined",elements:[{name:"void"},{name:"null"},{name:"undefined"}]}}},description:""},onDown:{required:!1,tsType:{name:"signature",type:"function",raw:"() => void | null | undefined",signature:{arguments:[],return:{name:"union",raw:"void | null | undefined",elements:[{name:"void"},{name:"null"},{name:"undefined"}]}}},description:""},onUp:{required:!1,tsType:{name:"signature",type:"function",raw:"() => void | null | undefined",signature:{arguments:[],return:{name:"union",raw:"void | null | undefined",elements:[{name:"void"},{name:"null"},{name:"undefined"}]}}},description:""},title:{required:!1,tsType:{name:"union",raw:"string | React.ReactElement",elements:[{name:"string"},{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}]},description:"",defaultValue:{value:'"More"',computed:!1}}}};const{ButtonGroup:oe}=c,pe=[p.BLACK,p.BLUE,p.GREEN,p.PINK,p.PURPLE,p.RED,p.GRAY],de=[p.LIGHT_BLUE,p.LIGHT_ORANGE,p.LIGHT_PINK,p.LIGHT_GREEN,p.LIGHT_PURPLE,p.LIGHT_RED,"#fff"],X=class X extends d.Component{render(){const n=this.props.lightColors?de:pe;return e(oe,{value:this.props.value,allowEmpty:!1,buttons:r.map(n,t=>({value:t,content:s("span",{children:[e("span",{className:"colorpicker-circle",style:{background:t}})," "]})})),onChange:this.props.onChange})}};X.defaultProps={value:p.BLACK,lightColors:!1};let m=X;m.__docgenInfo={description:"",methods:[],displayName:"ColorPicker",props:{lightColors:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},value:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"KhanColors.BLACK",computed:!0}}}};const{ButtonGroup:ue}=c,M=class M extends d.Component{render(){return e(ue,{value:this.props.value,allowEmpty:!1,buttons:[{value:"",content:e("span",{children:"—"})},{value:"-",content:e("span",{children:"–––"})},{value:"- ",content:e("span",{children:"–  –"})},{value:".",content:e("span",{children:"····"})},{value:". ",content:e("span",{children:"· · ·"})}],onChange:this.props.onChange})}};M.defaultProps={value:""};let y=M;y.__docgenInfo={description:"",methods:[],displayName:"DashPicker",props:{value:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}}}};function i(W){const n=d.useRef(null),t=d.useRef(),{locale:a,strings:o}=re();return d.useEffect(()=>{n.current&&!t.current&&(t.current=se(n.current,a,o,l=>({...l,handlers:{edit:v=>{let _=v.latex();_=_.replace(/<>/g,"\\ne"),W.value!==_&&W.onChange(_)},upOutOf:v=>{v.typedText("^")}}})))}),e(ie,{style:ce.outerWrapper,children:e("span",{ref:n,className:"perseus-math-input mq-editable-field mq-math-mode"})})}const ce=le.StyleSheet.create({outerWrapper:{display:"inline-block",borderStyle:"solid",borderWidth:1,borderColor:K.offBlack50,borderRadius:3,background:K.white}});i.__docgenInfo={description:`A simple Mathquill MathField input for the InteractionEditor. Unlike our other uses of Mathquill, we're not using a keypad here; it's just the input itself for use writing TeX.`,methods:[],displayName:"MathquillInput",props:{value:{required:!0,tsType:{name:"string"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(value: string) => void",signature:{arguments:[{type:{name:"string"},name:"value"}],return:{name:"void"}}},description:""}}};const{NumberInput:he}=c,{getDependencies:me}=g,L=class L extends d.Component{constructor(){super(...arguments),this.change=(...n)=>h.apply(this,n),this.serialize=()=>f.serialize.call(this)}render(){const{TeX:n}=me();return s("div",{className:"graph-settings",children:[s("div",{className:"perseus-widget-row",children:[e(n,{children:this.props.funcName+"(x)="})," ",e(i,{value:this.props.value,onChange:this.change("value")})]}),s("div",{className:"perseus-widget-row",children:["Range: ",e(n,{children:"\\Large("}),e(i,{value:this.props.rangeMin,onChange:this.change("rangeMin")}),e(n,{children:","})," ",e(i,{value:this.props.rangeMax,onChange:this.change("rangeMax")}),e(n,{children:"\\Large)"})]}),e("div",{className:"perseus-widget-row",children:e(m,{value:this.props.color,onChange:this.change("color")})}),e("div",{className:"perseus-widget-row",children:e(y,{value:this.props.strokeDasharray,onChange:this.change("strokeDasharray")})}),e("div",{className:"perseus-widget-row",children:s("div",{className:"perseus-widget-left-col",children:["Width:"," ",e(he,{value:this.props.strokeWidth,placeholder:2,onChange:this.change("strokeWidth")})]})})]})}};L.defaultProps={value:"x",rangeMin:"-10",rangeMax:"10",color:p.BLUE,strokeDasharray:"",strokeWidth:2};let w=L;w.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"FunctionEditor",props:{value:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"x"',computed:!1}},rangeMin:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"-10"',computed:!1}},rangeMax:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"10"',computed:!1}},color:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"KhanColors.BLUE",computed:!0}},strokeDasharray:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},strokeWidth:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"2",computed:!1}}}};const{TextInput:ge}=c,{getDependencies:fe}=g,Y=class Y extends d.Component{constructor(){super(...arguments),this.change=(...n)=>h.apply(this,n),this.serialize=()=>f.serialize.call(this)}render(){const{TeX:n}=fe();return s("div",{className:"graph-settings",children:[e("div",{className:"perseus-widget-row",children:e(ge,{value:this.props.label,onChange:this.change("label"),style:{width:"100%"}})}),s("div",{className:"perseus-widget-row",children:["Location: ",e(n,{children:"\\Large("}),e(i,{value:this.props.coordX,onChange:this.change("coordX")}),e(n,{children:","})," ",e(i,{value:this.props.coordY,onChange:this.change("coordY")}),e(n,{children:"\\Large)"})]}),e("div",{className:"perseus-widget-row",children:e(m,{value:this.props.color,onChange:this.change("color")})})]})}};Y.defaultProps={coordX:"0",coordY:"0",color:p.BLACK,label:"\\phi"};let N=Y;N.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"LabelEditor",props:{color:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"KhanColors.BLACK",computed:!0}},coordX:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"0"',computed:!1}},coordY:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"0"',computed:!1}},label:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"\\\\phi"',computed:!1}}}};const{ButtonGroup:ye}=c,I=class I extends d.Component{render(){return e(ye,{value:this.props.value,allowEmpty:!1,buttons:[{value:"",content:e("span",{children:"—"})},{value:"->",content:e("span",{children:"→"})}],onChange:this.props.onChange})}};I.defaultProps={value:""};let S=I;S.__docgenInfo={description:"",methods:[],displayName:"ArrowPicker",props:{value:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}}}};const{NumberInput:ve}=c,{getDependencies:be}=g,U=class U extends d.Component{constructor(){super(...arguments),this.change=(...n)=>h.apply(this,n),this.serialize=()=>f.serialize.call(this)}render(){const{TeX:n}=be();return s("div",{className:"graph-settings",children:[s("div",{className:"perseus-widget-row",children:["Start: ",e(n,{children:"\\Large("}),e(i,{value:this.props.startX,onChange:this.change("startX")}),e(n,{children:","})," ",e(i,{value:this.props.startY,onChange:this.change("startY")}),e(n,{children:"\\Large)"})]}),s("div",{className:"perseus-widget-row",children:["End: ",e(n,{children:"\\Large("}),e(i,{value:this.props.endX,onChange:this.change("endX")}),e(n,{children:","})," ",e(i,{value:this.props.endY,onChange:this.change("endY")}),e(n,{children:"\\Large)"})]}),e("div",{className:"perseus-widget-row",children:e(m,{value:this.props.color,onChange:this.change("color")})}),s("div",{className:"perseus-widget-row",children:[e(y,{value:this.props.strokeDasharray,onChange:this.change("strokeDasharray")}),"   ",e(S,{value:this.props.arrows,onChange:this.change("arrows")})]}),e("div",{className:"perseus-widget-row",children:s("div",{className:"perseus-widget-left-col",children:["Width:"," ",e(ve,{value:this.props.strokeWidth,placeholder:2,onChange:this.change("strokeWidth")})]})})]})}};U.defaultProps={startX:"-5",startY:"5",endX:"5",endY:"5",color:p.BLACK,strokeDasharray:"",arrows:"",strokeWidth:2};let C=U;C.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"LineEditor",props:{startX:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"-5"',computed:!1}},startY:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"5"',computed:!1}},endX:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"5"',computed:!1}},endY:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"5"',computed:!1}},color:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"KhanColors.BLACK",computed:!0}},strokeDasharray:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},arrows:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},strokeWidth:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"2",computed:!1}}}};const{ButtonGroup:we,NumberInput:Ne}=c,P=class P extends d.Component{constructor(){super(...arguments),this.change=n=>h.call(this,n)}render(){const{TeX:n}=j();return s("div",{children:[s("div",{className:"perseus-widget-row",children:["Constraint:"," ",e(we,{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")})]}),this.props.constraint==="snap"&&s("div",{className:"perseus-widget-row",children:["Snap:"," ",e(Ne,{value:this.props.snap,placeholder:0,onChange:this.change("snap")})]}),this.props.constraint==="x"&&e("div",{className:"graph-settings",children:s("div",{className:"perseus-widget-row",children:[e(n,{children:"x="})," ",e(i,{value:this.props.constraintFn,onChange:this.change("constraintFn")})]})}),this.props.constraint==="y"&&e("div",{className:"graph-settings",children:s("div",{className:"perseus-widget-row",children:[e(n,{children:"y="})," ",e(i,{value:this.props.constraintFn,onChange:this.change("constraintFn")})]})}),"Ensure these are set so nothing can be dragged off the canvas:",e("div",{className:"perseus-widget-row",children:s("div",{className:"perseus-widget-row",children:[e(n,{children:"x \\in \\Large["})," ",e(i,{value:this.props.constraintXMin,onChange:this.change("constraintXMin")}),e(n,{children:", "})," ",e(i,{value:this.props.constraintXMax,onChange:this.change("constraintXMax")})," ",e(n,{children:"\\Large]"})]})}),e("div",{className:"perseus-widget-row",children:s("div",{className:"perseus-widget-row",children:[e(n,{children:"y \\in \\Large["})," ",e(i,{value:this.props.constraintYMin,onChange:this.change("constraintYMin")}),e(n,{children:", "})," ",e(i,{value:this.props.constraintYMax,onChange:this.change("constraintYMax")})," ",e(n,{children:"\\Large]"})]})})]})}};P.defaultProps={constraint:"none",snap:.5,constraintFn:"0",constraintXMin:"-10",constraintXMax:"10",constraintYMin:"-10",constraintYMax:"10"};let k=P;k.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"propName",optional:!1,type:{name:"string"}}],returns:{type:{name:"unknown"}}}],displayName:"ConstraintEditor",props:{constraint:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"none"',computed:!1}},constraintFn:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"0"',computed:!1}},constraintXMax:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"10"',computed:!1}},constraintXMin:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"-10"',computed:!1}},constraintYMax:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"10"',computed:!1}},constraintYMin:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"-10"',computed:!1}},snap:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"0.5",computed:!1}}}};const{NumberInput:J}=c,{getDependencies:Ce}=g,z=class z extends d.Component{constructor(){super(...arguments),this.change=(...n)=>h.apply(this,n),this.serialize=()=>f.serialize.call(this)}render(){const{TeX:n}=Ce();return s("div",{className:"graph-settings",children:["Initial position:",s("div",{className:"perseus-widget-row",children:["Start: ",e(n,{children:"\\Large("}),e(i,{value:this.props.startX,onChange:this.change("startX")}),e(n,{children:","})," ",e(i,{value:this.props.startY,onChange:this.change("startY")}),e(n,{children:"\\Large)"})]}),s("div",{className:"perseus-widget-row",children:["End: ",e(n,{children:"\\Large("}),e(i,{value:this.props.endX,onChange:this.change("endX")}),e(n,{children:","})," ",e(i,{value:this.props.endY,onChange:this.change("endY")}),e(n,{children:"\\Large)"})]}),s("div",{className:"perseus-widget-row",children:["Start updates ",e(n,{children:"(x_n, y_n)"})," for ",e(n,{children:"n ="}),e(J,{value:this.props.startSubscript,placeholder:0,onChange:this.change("startSubscript")})]}),s("div",{className:"perseus-widget-row",children:["End updates ",e(n,{children:"(x_m, y_m)"})," for ",e(n,{children:"m ="}),e(J,{value:this.props.endSubscript,placeholder:0,onChange:this.change("endSubscript")})]}),e("div",{className:"perseus-widget-row",children:"All constraints are applied to the start point."}),e(k,{...this.props})]})}};z.defaultProps={startX:"-5",startY:"5",endX:"5",endY:"5",constraint:"none",snap:.5,constraintFn:"0",constraintXMin:"-10",constraintXMax:"10",constraintYMin:"-10",constraintYMax:"10"};let R=z;R.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"MovableLineEditor",props:{startX:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"-5"',computed:!1}},startY:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"5"',computed:!1}},endX:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"5"',computed:!1}},endY:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"5"',computed:!1}},constraint:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"none"',computed:!1}},snap:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"0.5",computed:!1}},constraintFn:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"0"',computed:!1}},startSubscript:{required:!0,tsType:{name:"number"},description:""},endSubscript:{required:!0,tsType:{name:"number"},description:""},constraintXMin:{defaultValue:{value:'"-10"',computed:!1},required:!1},constraintXMax:{defaultValue:{value:'"10"',computed:!1},required:!1},constraintYMin:{defaultValue:{value:'"-10"',computed:!1},required:!1},constraintYMax:{defaultValue:{value:'"10"',computed:!1},required:!1}}};const{NumberInput:ke}=c,{getDependencies:Re}=g,G=class G extends d.Component{constructor(){super(...arguments),this.change=(...n)=>h.apply(this,n),this.serialize=()=>f.serialize.call(this)}render(){const{TeX:n}=Re();return s("div",{className:"graph-settings",children:[s("div",{className:"perseus-widget-row",children:["Start: ",e(n,{children:"\\Large("}),e(i,{value:this.props.startX,onChange:this.change("startX")}),e(n,{children:","})," ",e(i,{value:this.props.startY,onChange:this.change("startY")}),e(n,{children:"\\Large)"})]}),s("div",{className:"perseus-widget-row",children:["Update ",e(n,{children:"(x_n, y_n)"})," for ",e(n,{children:"n ="})," ",e(ke,{value:this.props.varSubscript,placeholder:0,onChange:this.change("varSubscript")})]}),e(k,{...this.props})]})}};G.defaultProps={startX:"0",startY:"0",constraint:"none",snap:.5,constraintFn:"0",constraintXMin:"-10",constraintXMax:"10",constraintYMin:"-10",constraintYMax:"10"};let q=G;q.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"MovablePointEditor",props:{startX:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"0"',computed:!1}},startY:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"0"',computed:!1}},constraint:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"none"',computed:!1}},snap:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"0.5",computed:!1}},constraintFn:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"0"',computed:!1}},varSubscript:{required:!0,tsType:{name:"number"},description:""},constraintXMin:{defaultValue:{value:'"-10"',computed:!1},required:!1},constraintXMax:{defaultValue:{value:'"10"',computed:!1},required:!1},constraintYMin:{defaultValue:{value:'"-10"',computed:!1},required:!1},constraintYMax:{defaultValue:{value:'"10"',computed:!1},required:!1}}};const{NumberInput:qe}=c,{getDependencies:xe}=g,B=class B extends d.Component{constructor(){super(...arguments),this.change=(...n)=>h.apply(this,n),this.serialize=()=>f.serialize.call(this)}render(){const{TeX:n}=xe();return s("div",{className:"graph-settings",children:[s("div",{className:"perseus-widget-row",children:[e(n,{children:"X(t) ="})," ",e(i,{value:this.props.x,onChange:this.change("x")})]}),s("div",{className:"perseus-widget-row",children:[e(n,{children:"Y(t) ="})," ",e(i,{value:this.props.y,onChange:this.change("y")})]}),s("div",{className:"perseus-widget-row",children:["Range: ",e(n,{children:"\\Large("}),e(i,{value:this.props.rangeMin,onChange:this.change("rangeMin")}),e(n,{children:","})," ",e(i,{value:this.props.rangeMax,onChange:this.change("rangeMax")}),e(n,{children:"\\Large)"})]}),e("div",{className:"perseus-widget-row",children:e(m,{value:this.props.color,onChange:this.change("color")})}),e("div",{className:"perseus-widget-row",children:e(y,{value:this.props.strokeDasharray,onChange:this.change("strokeDasharray")})}),e("div",{className:"perseus-widget-row",children:s("div",{className:"perseus-widget-left-col",children:["Width:"," ",e(qe,{value:this.props.strokeWidth,placeholder:2,onChange:this.change("strokeWidth")})]})})]})}};B.defaultProps={x:"cos(t)",y:"sin(t)",rangeMin:"0",rangeMax:"2\\pi",color:p.BLUE,strokeDasharray:"",strokeWidth:2};let x=B;x.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"ParametricEditor",props:{x:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"cos(t)"',computed:!1}},y:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"sin(t)"',computed:!1}},rangeMin:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"0"',computed:!1}},rangeMax:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"2\\\\pi"',computed:!1}},color:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"KhanColors.BLUE",computed:!0}},strokeDasharray:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},strokeWidth:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"2",computed:!1}}}};const{getDependencies:Te}=g,F=class F extends d.Component{constructor(){super(...arguments),this.change=(...n)=>h.apply(this,n),this.serialize=()=>f.serialize.call(this)}render(){const{TeX:n}=Te();return s("div",{className:"graph-settings",children:[s("div",{className:"perseus-widget-row",children:["Coordinate: ",e(n,{children:"\\Large("}),e(i,{value:this.props.coordX,onChange:this.change("coordX")}),e(n,{children:","})," ",e(i,{value:this.props.coordY,onChange:this.change("coordY")}),e(n,{children:"\\Large)"})]}),e("div",{className:"perseus-widget-row",children:e(m,{value:this.props.color,onChange:this.change("color")})})]})}};F.defaultProps={coordX:"0",coordY:"0",color:p.BLACK};let T=F;T.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PointEditor",props:{coordX:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"0"',computed:!1}},coordY:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"0"',computed:!1}},color:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"KhanColors.BLACK",computed:!0}}}};const{getDependencies:Ae}=g,O=class O extends d.Component{constructor(){super(...arguments),this.change=(...n)=>h.apply(this,n),this.serialize=()=>f.serialize.call(this)}render(){const{TeX:n}=Ae();return s("div",{className:"graph-settings",children:[s("div",{className:"perseus-widget-row",children:["Bottom left: ",e(n,{children:"\\Large("}),e(i,{value:this.props.coordX,onChange:this.change("coordX")}),e(n,{children:","})," ",e(i,{value:this.props.coordY,onChange:this.change("coordY")}),e(n,{children:"\\Large)"})]}),s("div",{className:"perseus-widget-row",children:["Width:"," ",e(i,{value:this.props.width,onChange:this.change("width")})]}),s("div",{className:"perseus-widget-row",children:["Height:"," ",e(i,{value:this.props.height,onChange:this.change("height")})]}),e("div",{className:"perseus-widget-row",children:e(m,{value:this.props.color,lightColors:!0,onChange:this.change("color")})}),e("div",{className:"perseus-widget-row",children:"You want a border? Sorry, draw your own."})]})}};O.defaultProps={coordX:"-5",coordY:"5",width:"2",height:"3",color:p.LIGHT_BLUE};let A=O;A.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"RectangleEditor",props:{color:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:"KhanColors.LIGHT_BLUE",computed:!0}},coordX:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"-5"',computed:!1}},coordY:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"5"',computed:!1}},height:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"3"',computed:!1}},width:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'"2"',computed:!1}}}};const{getDependencies:_e}=g,{unescapeMathMode:Se}=H,Ve={graph:{box:[400,400],labels:["x","y"],range:[[-10,10],[-10,10]],tickStep:[1,1],gridStep:[1,1],markings:"graph"},elements:[]},E=class E extends d.Component{constructor(){super(...arguments),this.state={usedVarSubscripts:this._getAllVarSubscripts(this.props.elements),usedFunctionNames:this._getAllFunctionNames(this.props.elements)},this._updateGraphProps=n=>{this.change({graph:r.extend(r.omit(n,"step"),{tickStep:n.step})})},this._addNewElement=n=>{const t=n.target.value;if(t==="")return;n.target.value="";const a={type:t,key:t+"-"+(Math.random()*16777215<<0).toString(16),options:t==="point"?r.clone(T.defaultProps):t==="line"?r.clone(C.defaultProps):t==="movable-point"?r.clone(q.defaultProps):t==="movable-line"?r.clone(R.defaultProps):t==="function"?r.clone(w.defaultProps):t==="parametric"?r.clone(x.defaultProps):t==="label"?r.clone(N.defaultProps):t==="rectangle"?r.clone(A.defaultProps):{}};let o;if(t==="movable-point")o=r.max([r.max(this.state.usedVarSubscripts),-1])+1,a.options.varSubscript=o;else if(t==="movable-line")o=r.max([r.max(this.state.usedVarSubscripts),-1])+1,a.options.startSubscript=o,a.options.endSubscript=o+1;else if(t==="function"){const l=String.fromCharCode(r.max([r.max(r.map(this.state.usedFunctionNames,function(v){return v.charCodeAt(0)})),101])+1);a.options.funcName=l}this.change({elements:this.props.elements.concat(a)})},this._deleteElement=n=>{const t=this.props.elements[n];this.change({elements:r.without(this.props.elements,t)})},this._moveElementUp=n=>{const t=this.props.elements[n],a=r.without(this.props.elements,t);a.splice(n-1,0,t),this.change({elements:a})},this._moveElementDown=n=>{const t=this.props.elements[n],a=r.without(this.props.elements,t);a.splice(n+1,0,t),this.change({elements:a})},this.change=(...n)=>h.apply(this,n),this.serialize=()=>f.serialize.call(this)}UNSAFE_componentWillReceiveProps(n){this.setState({usedVarSubscripts:this._getAllVarSubscripts(n.elements),usedFunctionNames:this._getAllFunctionNames(n.elements)})}_getAllVarSubscripts(n){return r.map(r.where(n,{type:"movable-point"}),t=>t.options.varSubscript).concat(r.map(r.where(n,{type:"movable-line"}),t=>t.options.startSubscript)).concat(r.map(r.where(n,{type:"movable-line"}),t=>t.options.endSubscript))}_getAllFunctionNames(n){return r.map(r.where(n,{type:"function"}),t=>t.options.funcName)}render(){const{TeX:n}=_e();return s("div",{className:"perseus-widget-interaction-editor",children:[s(u,{title:"Grid settings",children:[e(Q,{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}),e($,{children:this.props.graph.valid!==!0&&e("div",{children:this.props.graph.valid})})]}),r.map(this.props.elements,function(t,a){if(t.type==="movable-point")return e(u,{title:s("span",{children:["Movable point"," ",e(n,{children:"(x_{"+t.options.varSubscript+"}, y_{"+t.options.varSubscript+"})"})]}),onUp:a===0?null:this._moveElementUp.bind(this,a),onDown:a===this.props.elements.length-1?null:this._moveElementDown.bind(this,a),onDelete:this._deleteElement.bind(this,a),children:e(q,{...t.options,onChange:o=>{const l=JSON.parse(JSON.stringify(this.props.elements));r.extend(l[a].options,o),this.change({elements:l})}})},t.key);if(t.type==="movable-line")return e(u,{title:s("span",{children:["Movable line"," ",e(n,{children:"(x_{"+t.options.startSubscript+"}, y_{"+t.options.startSubscript+"})"})," ","to"," ",e(n,{children:"(x_{"+t.options.endSubscript+"}, y_{"+t.options.endSubscript+"})"})]}),onUp:a===0?null:this._moveElementUp.bind(this,a),onDown:a===this.props.elements.length-1?null:this._moveElementDown.bind(this,a),onDelete:this._deleteElement.bind(this,a),children:e(R,{...t.options,onChange:o=>{const l=JSON.parse(JSON.stringify(this.props.elements));r.extend(l[a].options,o),this.change({elements:l})}})},t.key);if(t.type==="point")return e(u,{title:s("span",{children:["Point"," ",e(n,{children:"("+t.options.coordX+", "+t.options.coordY+")"})]}),onUp:a===0?null:this._moveElementUp.bind(this,a),onDown:a===this.props.elements.length-1?null:this._moveElementDown.bind(this,a),onDelete:this._deleteElement.bind(this,a),children:e(T,{...t.options,onChange:o=>{const l=JSON.parse(JSON.stringify(this.props.elements));r.extend(l[a].options,o),this.change({elements:l})}})},t.key);if(t.type==="line")return e(u,{title:s("span",{children:["Line"," ",e(n,{children:"("+t.options.startX+", "+t.options.startY+")"})," ","to"," ",e(n,{children:"("+t.options.endX+", "+t.options.endY+")"})]}),onUp:a===0?null:this._moveElementUp.bind(this,a),onDown:a===this.props.elements.length-1?null:this._moveElementDown.bind(this,a),onDelete:this._deleteElement.bind(this,a),children:e(C,{...t.options,onChange:o=>{const l=JSON.parse(JSON.stringify(this.props.elements));r.extend(l[a].options,o),this.change({elements:l})}})},t.key);if(t.type==="function")return e(u,{title:s("span",{children:["Function"," ",e(n,{children:t.options.funcName+"(x) = "+t.options.value})]}),onUp:a===0?null:this._moveElementUp.bind(this,a),onDown:a===this.props.elements.length-1?null:this._moveElementDown.bind(this,a),onDelete:this._deleteElement,children:e(w,{...t.options,onChange:o=>{const l=JSON.parse(JSON.stringify(this.props.elements));r.extend(l[a].options,o),this.change({elements:l})}})},t.key);if(t.type==="parametric")return e(u,{title:e("span",{children:"Parametric"}),onUp:a===0?null:this._moveElementUp.bind(this,a),onDown:a===this.props.elements.length-1?null:this._moveElementDown.bind(this,a),onDelete:this._deleteElement,children:e(x,{...t.options,onChange:o=>{const l=JSON.parse(JSON.stringify(this.props.elements));r.extend(l[a].options,o),this.change({elements:l})}})},t.key);if(t.type==="label")return e(u,{title:s("span",{children:["Label"," ",e(n,{children:Se(t.options.label)})," "]}),onUp:a===0?null:this._moveElementUp.bind(this,a),onDown:a===this.props.elements.length-1?null:this._moveElementDown.bind(this,a),onDelete:this._deleteElement,children:e(N,{...t.options,onChange:o=>{const l=JSON.parse(JSON.stringify(this.props.elements));r.extend(l[a].options,o),this.change({elements:l})}})},t.key);if(t.type==="rectangle")return e(u,{title:s("span",{children:["Rectangle"," ",e(n,{children:"("+t.options.coordX+", "+t.options.coordY+")"})," — ",e(n,{children:t.options.width+" \\times "+t.options.height})]}),onUp:a===0?null:this._moveElementUp.bind(this,a),onDown:a===this.props.elements.length-1?null:this._moveElementDown.bind(this,a),onDelete:this._deleteElement,children:e(A,{...t.options,onChange:o=>{const l=JSON.parse(JSON.stringify(this.props.elements));r.extend(l[a].options,o),this.change({elements:l})}})},t.key)},this),e("div",{className:"perseus-widget-interaction-editor-select-element",children:s("select",{onChange:this._addNewElement,children:[s("option",{value:"",children:["Add an element","…"]}),e("option",{disabled:!0,children:"--"}),e("option",{value:"point",children:"Point"}),e("option",{value:"line",children:"Line segment"}),e("option",{value:"function",children:"Function plot"}),e("option",{value:"parametric",children:"Parametric plot"}),e("option",{value:"label",children:"Label"}),e("option",{value:"rectangle",children:"Rectangle"}),e("option",{value:"movable-point",children:"★ Movable point"}),e("option",{value:"movable-line",children:"★ Movable line segment"})]})})]})}};E.widgetName="interaction",E.defaultProps=Ve;let V=E;V.__docgenInfo={description:"",methods:[{name:"_getAllVarSubscripts",docblock:null,modifiers:[],params:[{name:"elements",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}}],returns:{type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray"}}},{name:"_getAllFunctionNames",docblock:null,modifiers:[],params:[{name:"elements",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}}],returns:{type:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}}},{name:"_updateGraphProps",docblock:null,modifiers:[],params:[{name:"newProps",optional:!1,type:null}],returns:null},{name:"_addNewElement",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"_deleteElement",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:null}],returns:null},{name:"_moveElementUp",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:null}],returns:null},{name:"_moveElementDown",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:null}],returns:null},{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"InteractionEditor",props:{elements:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[]",computed:!1}},graph:{required:!1,tsType:{name:"signature",type:"object",raw:`{ box: ReadonlyArray; diff --git a/assets/index-fuycm_QE.js b/assets/index-fuycm_QE.js new file mode 100644 index 0000000000..acd040cb6b --- /dev/null +++ b/assets/index-fuycm_QE.js @@ -0,0 +1,5 @@ +import{g as S}from"./_commonjsHelpers-4gQjN7DL.js";import{r as T}from"./index-TT1qJ6UJ.js";import{i as U}from"./invariant-bu5zBsRS.js";/* +object-assign +(c) Sindre Sorhus +@license MIT +*/var M=Object.getOwnPropertySymbols,W=Object.prototype.hasOwnProperty,B=Object.prototype.propertyIsEnumerable;function G(p){if(p==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(p)}function K(){try{if(!Object.assign)return!1;var p=new String("abc");if(p[5]="de",Object.getOwnPropertyNames(p)[0]==="5")return!1;for(var h={},a=0;a<10;a++)h["_"+String.fromCharCode(a)]=a;var E=Object.getOwnPropertyNames(h).map(function(s){return h[s]});if(E.join("")!=="0123456789")return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach(function(s){i[s]=s}),Object.keys(Object.assign({},i)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}var V=K()?Object.assign:function(p,h){for(var a,E=G(p),i,s=1;s"u")throw Error("create-react-class could not find the React object. If you are using script tags, make sure that React is being loaded before create-react-class.");var H=new N.Component().updater,J=z(N.Component,N.isValidElement,H);const et=S(J);export{et as c}; diff --git a/assets/input-number-editor-kZK8JIcV.js b/assets/input-number-editor-TkxXdBqK.js similarity index 93% rename from assets/input-number-editor-kZK8JIcV.js rename to assets/input-number-editor-TkxXdBqK.js index 88c93e43b0..e04e51b72b 100644 --- a/assets/input-number-editor-kZK8JIcV.js +++ b/assets/input-number-editor-TkxXdBqK.js @@ -1,4 +1,4 @@ -import{j as e,a as i}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import{_ as m}from"./jquery-yG1GhClm.js";import{U as l}from"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as u}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import{P as d}from"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{r as p}from"./index-TT1qJ6UJ.js";import{B as c}from"./blur-input-hjJsfoK9.js";const{InfoTip:t}=u,h={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"}},n=class n extends p.Component{constructor(){super(...arguments),this.input=p.createRef(),this.handleAnswerChange=a=>{const r=l.firstNumericalParse(a,this.context.strings)||0;this.props.onChange({value:r})},this.focus=()=>{var a;return(a=this.input.current)==null||a.focus(),!0},this.serialize=()=>({value:this.props.value,simplify:this.props.simplify,size:this.props.size,inexact:this.props.inexact,maxError:this.props.maxError,answerType:this.props.answerType,rightAlign:this.props.rightAlign})}render(){const a=m.map(h,function(r,s){return e("option",{value:s,children:r.name},s)},this);return i("div",{children:[e("div",{children:i("label",{children:["Correct answer:"," ",e(c,{value:""+this.props.value,onChange:this.handleAnswerChange,ref:this.input})]})}),i("div",{children:[i("label",{children:["Unsimplified answers"," ",i("select",{value:this.props.simplify,onChange:r=>{this.props.onChange({simplify:r.target.value})},children:[e("option",{value:"required",children:"will not be graded"}),e("option",{value:"optional",children:"will be accepted"}),e("option",{value:"enforced",children:"will be marked wrong"})]})]}),i(t,{children:[e("p",{children:'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)'}),e("p",{children:'Select "will be accepted" only if the user is not expected to know how to simplify fractions yet. (Anything prior to 5th grade)'}),e("p",{children:'Select "will be marked wrong" only if we are specifically assessing the ability to simplify.'})]})]}),i("div",{children:[i("label",{children:[e("input",{type:"checkbox",checked:this.props.inexact,onChange:r=>{this.props.onChange({inexact:r.target.checked})}})," ","Allow inexact answers"]}),i("label",{children:[e("input",{type:"checkbox",style:{visibility:"hidden"}}),"Max error:"," ",e("input",{type:"text",disabled:!this.props.inexact,defaultValue:this.props.maxError,"aria-label":"Max error",onBlur:r=>{const s=""+(l.firstNumericalParse(r.target.value,this.context.strings)||0);r.target.value=s,this.props.onChange({maxError:s})}})]})]}),i("div",{children:["Answer type:"," ",e("select",{value:this.props.answerType,onChange:r=>{this.props.onChange({answerType:r.target.value})},"aria-label":"Answer type",children:a}),e(t,{children:e("p",{children:'Use the default "Numbers" unless the answer must be in a specific form (e.g., question is about converting decimals to fractions).'})})]}),i("div",{children:[i("label",{children:["Width"," ",i("select",{value:this.props.size,onChange:r=>{this.props.onChange({size:r.target.value})},children:[e("option",{value:"normal",children:"Normal (80px)"}),e("option",{value:"small",children:"Small (40px)"})]})]}),e(t,{children:e("p",{children:'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.'})})]}),e("div",{children:i("label",{children:[e("input",{type:"checkbox",checked:this.props.rightAlign,onChange:r=>{this.props.onChange({rightAlign:r.target.checked})}})," ","Right alignment"]})})]})}};n.contextType=d,n.widgetName="input-number",n.defaultProps={value:0,simplify:"required",size:"normal",inexact:!1,maxError:.1,answerType:"number",rightAlign:!1};let o=n;o.__docgenInfo={description:"",methods:[{name:"handleAnswerChange",docblock:null,modifiers:[],params:[{name:"str",optional:!1,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"InputNumberEditor",props:{value:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"0",computed:!1}},simplify:{required:!1,tsType:{name:'PropsFor["simplify"]',raw:'PropsFor["simplify"]'},description:"",defaultValue:{value:'"required"',computed:!1}},size:{required:!1,tsType:{name:'PropsFor["size"]',raw:'PropsFor["size"]'},description:"",defaultValue:{value:'"normal"',computed:!1}},inexact:{required:!1,tsType:{name:'PropsFor["reviewModeRubric"]["inexact"]',raw:'PropsFor["reviewModeRubric"]["inexact"]'},description:"",defaultValue:{value:"false",computed:!1}},maxError:{required:!1,tsType:{name:'PropsFor["reviewModeRubric"]["maxError"]',raw:`PropsFor< +import{j as e,a as i}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import{_ as m}from"./jquery-yG1GhClm.js";import{U as l}from"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as u}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import{P as d}from"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{r as p}from"./index-TT1qJ6UJ.js";import{B as c}from"./blur-input-hjJsfoK9.js";const{InfoTip:t}=u,h={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"}},n=class n extends p.Component{constructor(){super(...arguments),this.input=p.createRef(),this.handleAnswerChange=a=>{const r=l.firstNumericalParse(a,this.context.strings)||0;this.props.onChange({value:r})},this.focus=()=>{var a;return(a=this.input.current)==null||a.focus(),!0},this.serialize=()=>({value:this.props.value,simplify:this.props.simplify,size:this.props.size,inexact:this.props.inexact,maxError:this.props.maxError,answerType:this.props.answerType,rightAlign:this.props.rightAlign})}render(){const a=m.map(h,function(r,s){return e("option",{value:s,children:r.name},s)},this);return i("div",{children:[e("div",{children:i("label",{children:["Correct answer:"," ",e(c,{value:""+this.props.value,onChange:this.handleAnswerChange,ref:this.input})]})}),i("div",{children:[i("label",{children:["Unsimplified answers"," ",i("select",{value:this.props.simplify,onChange:r=>{this.props.onChange({simplify:r.target.value})},children:[e("option",{value:"required",children:"will not be graded"}),e("option",{value:"optional",children:"will be accepted"}),e("option",{value:"enforced",children:"will be marked wrong"})]})]}),i(t,{children:[e("p",{children:'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)'}),e("p",{children:'Select "will be accepted" only if the user is not expected to know how to simplify fractions yet. (Anything prior to 5th grade)'}),e("p",{children:'Select "will be marked wrong" only if we are specifically assessing the ability to simplify.'})]})]}),i("div",{children:[i("label",{children:[e("input",{type:"checkbox",checked:this.props.inexact,onChange:r=>{this.props.onChange({inexact:r.target.checked})}})," ","Allow inexact answers"]}),i("label",{children:[e("input",{type:"checkbox",style:{visibility:"hidden"}}),"Max error:"," ",e("input",{type:"text",disabled:!this.props.inexact,defaultValue:this.props.maxError,"aria-label":"Max error",onBlur:r=>{const s=""+(l.firstNumericalParse(r.target.value,this.context.strings)||0);r.target.value=s,this.props.onChange({maxError:s})}})]})]}),i("div",{children:["Answer type:"," ",e("select",{value:this.props.answerType,onChange:r=>{this.props.onChange({answerType:r.target.value})},"aria-label":"Answer type",children:a}),e(t,{children:e("p",{children:'Use the default "Numbers" unless the answer must be in a specific form (e.g., question is about converting decimals to fractions).'})})]}),i("div",{children:[i("label",{children:["Width"," ",i("select",{value:this.props.size,onChange:r=>{this.props.onChange({size:r.target.value})},children:[e("option",{value:"normal",children:"Normal (80px)"}),e("option",{value:"small",children:"Small (40px)"})]})]}),e(t,{children:e("p",{children:'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.'})})]}),e("div",{children:i("label",{children:[e("input",{type:"checkbox",checked:this.props.rightAlign,onChange:r=>{this.props.onChange({rightAlign:r.target.checked})}})," ","Right alignment"]})})]})}};n.contextType=d,n.widgetName="input-number",n.defaultProps={value:0,simplify:"required",size:"normal",inexact:!1,maxError:.1,answerType:"number",rightAlign:!1};let o=n;o.__docgenInfo={description:"",methods:[{name:"handleAnswerChange",docblock:null,modifiers:[],params:[{name:"str",optional:!1,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"InputNumberEditor",props:{value:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"0",computed:!1}},simplify:{required:!1,tsType:{name:'PropsFor["simplify"]',raw:'PropsFor["simplify"]'},description:"",defaultValue:{value:'"required"',computed:!1}},size:{required:!1,tsType:{name:'PropsFor["size"]',raw:'PropsFor["size"]'},description:"",defaultValue:{value:'"normal"',computed:!1}},inexact:{required:!1,tsType:{name:'PropsFor["reviewModeRubric"]["inexact"]',raw:'PropsFor["reviewModeRubric"]["inexact"]'},description:"",defaultValue:{value:"false",computed:!1}},maxError:{required:!1,tsType:{name:'PropsFor["reviewModeRubric"]["maxError"]',raw:`PropsFor< typeof InputNumber.widget >["reviewModeRubric"]["maxError"]`},description:"",defaultValue:{value:"0.1",computed:!1}},answerType:{required:!1,tsType:{name:'PropsFor["answerType"]',raw:'PropsFor["answerType"]'},description:"",defaultValue:{value:'"number"',computed:!1}},rightAlign:{required:!1,tsType:{name:'PropsFor["rightAlign"]',raw:'PropsFor["rightAlign"]'},description:"",defaultValue:{value:"false",computed:!1}},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`(arg1: { value?: ParsedValue | 0; diff --git a/assets/input-number-editor.stories-jpbE69jO.js b/assets/input-number-editor.stories-jAMwMDCX.js similarity index 66% rename from assets/input-number-editor.stories-jpbE69jO.js rename to assets/input-number-editor.stories-jAMwMDCX.js index 2e856f34c3..96d008b3c9 100644 --- a/assets/input-number-editor.stories-jpbE69jO.js +++ b/assets/input-number-editor.stories-jAMwMDCX.js @@ -1,3 +1,3 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{I as e}from"./input-number-editor-kZK8JIcV.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./blur-input-hjJsfoK9.js";const rt={title:"PerseusEditor/Widgets/InputNumber Editor"},r=a=>m(e,{onChange:p("onChange")});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var t,o,i;r.parameters={...r.parameters,docs:{...(t=r.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{I as e}from"./input-number-editor-TkxXdBqK.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./blur-input-hjJsfoK9.js";const rt={title:"PerseusEditor/Widgets/InputNumber Editor"},r=a=>m(e,{onChange:p("onChange")});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var t,o,i;r.parameters={...r.parameters,docs:{...(t=r.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(i=(o=r.parameters)==null?void 0:o.docs)==null?void 0:i.source}}};const tt=["Default"];export{r as Default,tt as __namedExportsOrder,rt as default}; diff --git a/assets/input-number.stories-NEZe-YPw.js b/assets/input-number.stories-urMO_AnQ.js similarity index 89% rename from assets/input-number.stories-NEZe-YPw.js rename to assets/input-number.stories-urMO_AnQ.js index 56cedda941..34ae8aabe5 100644 --- a/assets/input-number.stories-NEZe-YPw.js +++ b/assets/input-number.stories-urMO_AnQ.js @@ -1,4 +1,4 @@ -import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{R as o}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const f={content:`Denis baked a peach pie and cut it into $3$ equal-sized pieces. Denis's dad eats $1$ section of the pie. +import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{R as o}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const f={content:`Denis baked a peach pie and cut it into $3$ equal-sized pieces. Denis's dad eats $1$ section of the pie. **What fraction of the pie did Denis's dad eat?** ![](https://ka-perseus-graphie.s3.amazonaws.com/74a2b7583a2c26ebfb3ad714e29867541253fc97.png) diff --git a/assets/input-with-examples-x87iVHoc.js b/assets/input-with-examples-YZffrKhM.js similarity index 97% rename from assets/input-with-examples-x87iVHoc.js rename to assets/input-with-examples-YZffrKhM.js index 82f968404e..9e6558fa90 100644 --- a/assets/input-with-examples-x87iVHoc.js +++ b/assets/input-with-examples-YZffrKhM.js @@ -1,2 +1,2 @@ -import{j as r,a as u}from"./jsx-runtime-FVsy8kgq.js";import{l as p,R as d,p as m}from"./renderer-vBOYiNCS.js";import{r as c}from"./index-TT1qJ6UJ.js";import{_ as f}from"./jquery-yG1GhClm.js";import{C as a}from"./perseus-api-mOiZT07d.js";import{U as h}from"./util-XcxTwqb0.js";import{P as g}from"./i18n-context-hxuRe8oU.js";import{T as x}from"./text-input-15gEhfDF.js";import{T as y,H as o,V as T}from"./tooltip-S_hcgkAT.js";const{captureScratchpadTouchStart:b}=h,s=class s extends c.Component{constructor(){super(...arguments),this.state={focused:!1,showExamples:!1},this._getUniqueId=()=>`input-with-examples-${btoa(this.props.id).replace(/=/g,"")}`,this._getInputClassName=()=>{let e=a.INPUT+" "+a.INTERACTIVE;return this.state.focused&&(e+=" "+a.FOCUSED),this.props.className&&(e+=" "+this.props.className),e},this._renderInput=()=>{const e=this._getUniqueId(),t={id:e,"aria-describedby":e,ref:"input",className:this._getInputClassName(),labelText:this.props.labelText,value:this.props.value,onFocus:this._handleFocus,onBlur:this._handleBlur,disabled:this.props.disabled,style:this.props.style,onChange:this.props.onChange,onTouchStart:b,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:"false"};return r(x,{...t})},this._handleFocus=()=>{this.props.onFocus(),this.setState({focused:!0,showExamples:!0})},this.show=()=>{this.setState({showExamples:!0})},this.hide=()=>{this.setState({showExamples:!1})},this._handleBlur=()=>{this.props.onBlur(),this.setState({focused:!1,showExamples:!1})},this.focus=()=>{this.refs.input.focus()},this.blur=()=>{this.refs.input.blur()},this.handleChange=e=>{this.props.onChange(e.target.value)}}render(){const e=this._renderInput(),t=f.map(this.props.examples,l=>"- "+l).join(` +import{j as r,a as u}from"./jsx-runtime-FVsy8kgq.js";import{l as p,R as d,p as m}from"./renderer-hPmI_Chp.js";import{r as c}from"./index-TT1qJ6UJ.js";import{_ as f}from"./jquery-yG1GhClm.js";import{C as a}from"./perseus-api-mOiZT07d.js";import{U as h}from"./util-YrNvlCNO.js";import{P as g}from"./i18n-context-hxuRe8oU.js";import{T as x}from"./text-input-15gEhfDF.js";import{T as y,H as o,V as T}from"./tooltip-S_hcgkAT.js";const{captureScratchpadTouchStart:b}=h,s=class s extends c.Component{constructor(){super(...arguments),this.state={focused:!1,showExamples:!1},this._getUniqueId=()=>`input-with-examples-${btoa(this.props.id).replace(/=/g,"")}`,this._getInputClassName=()=>{let e=a.INPUT+" "+a.INTERACTIVE;return this.state.focused&&(e+=" "+a.FOCUSED),this.props.className&&(e+=" "+this.props.className),e},this._renderInput=()=>{const e=this._getUniqueId(),t={id:e,"aria-describedby":e,ref:"input",className:this._getInputClassName(),labelText:this.props.labelText,value:this.props.value,onFocus:this._handleFocus,onBlur:this._handleBlur,disabled:this.props.disabled,style:this.props.style,onChange:this.props.onChange,onTouchStart:b,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:"false"};return r(x,{...t})},this._handleFocus=()=>{this.props.onFocus(),this.setState({focused:!0,showExamples:!0})},this.show=()=>{this.setState({showExamples:!0})},this.hide=()=>{this.setState({showExamples:!1})},this._handleBlur=()=>{this.props.onBlur(),this.setState({focused:!1,showExamples:!1})},this.focus=()=>{this.refs.input.focus()},this.blur=()=>{this.refs.input.blur()},this.handleChange=e=>{this.props.onChange(e.target.value)}}render(){const e=this._renderInput(),t=f.map(this.props.examples,l=>"- "+l).join(` `),i=this.props.shouldShowExamples&&this.state.showExamples;return u(y,{ref:"tooltip",className:"perseus-formats-tooltip preview-measure",horizontalPosition:o.Left,horizontalAlign:o.Left,verticalPosition:T.Bottom,arrowSize:10,borderColor:"#ccc",show:i,children:[e,r("div",{id:this._getUniqueId(),children:r(d,{content:t,linterContext:m(this.props.linterContext,"input-with-examples"),strings:this.context.strings})})]})}};s.contextType=g,s.defaultProps={shouldShowExamples:!0,onFocus:function(){},onBlur:function(){},disabled:!1,linterContext:p,className:""};let n=s;n.__docgenInfo={description:"",methods:[{name:"_getUniqueId",docblock:null,modifiers:[],params:[],returns:null},{name:"_getInputClassName",docblock:null,modifiers:[],params:[],returns:null},{name:"_renderInput",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleFocus",docblock:null,modifiers:[],params:[],returns:null},{name:"show",docblock:null,modifiers:[],params:[],returns:null},{name:"hide",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleBlur",docblock:null,modifiers:[],params:[],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"blur",docblock:null,modifiers:[],params:[],returns:null},{name:"handleChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null}],displayName:"InputWithExamples",props:{value:{required:!0,tsType:{name:"string"},description:""},onChange:{required:!0,tsType:{name:"any"},description:""},className:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},examples:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:""},shouldShowExamples:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"true",computed:!1}},convertDotToTimes:{required:!1,tsType:{name:"boolean"},description:""},buttonSet:{required:!1,tsType:{name:"string"},description:""},buttonsVisible:{required:!1,tsType:{name:"union",raw:'"always" | "never" | "focused"',elements:[{name:"literal",value:'"always"'},{name:"literal",value:'"never"'},{name:"literal",value:'"focused"'}]},description:""},labelText:{required:!1,tsType:{name:"string"},description:""},onFocus:{required:!1,tsType:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},description:"",defaultValue:{value:"function () {}",computed:!1}},onBlur:{required:!1,tsType:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},description:"",defaultValue:{value:"function () {}",computed:!1}},disabled:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},style:{required:!1,tsType:{name:"StyleType"},description:""},id:{required:!0,tsType:{name:"string"},description:""},linterContext:{required:!1,tsType:{name:"LinterContextProps"},description:"",defaultValue:{value:"PerseusLinter.linterContextDefault",computed:!0}}}};export{n as I}; diff --git a/assets/input-with-examples.stories-sWnNtSAK.js b/assets/input-with-examples.stories-L1vui8Db.js similarity index 90% rename from assets/input-with-examples.stories-sWnNtSAK.js rename to assets/input-with-examples.stories-L1vui8Db.js index 640cc08f28..2b830ab558 100644 --- a/assets/input-with-examples.stories-sWnNtSAK.js +++ b/assets/input-with-examples.stories-L1vui8Db.js @@ -1,4 +1,4 @@ -import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{I as o}from"./input-with-examples-x87iVHoc.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./renderer-vBOYiNCS.js";import"./version-akiLXZts.js";import"./util-XcxTwqb0.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./index-h_CiYGGb.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";const me={title:"Perseus/Components/Input with Examples"},p={examples:[],id:"",onChange:()=>{},value:""},i=["Sample 1","Sample 2","Sample 3"],e=m=>a(o,{...p}),t=m=>a(o,{...p,examples:i}),r=m=>a(o,{...p,examples:i,labelText:"Test label"}),s=m=>a(o,{...p,disabled:!0,examples:i});e.__docgenInfo={description:"",methods:[],displayName:"DefaultAndMostlyEmptyProps"};t.__docgenInfo={description:"",methods:[],displayName:"ListOfExamples"};r.__docgenInfo={description:"",methods:[],displayName:"AriaLabelTextWithListOfExamples"};s.__docgenInfo={description:"",methods:[],displayName:"DisabledInput"};var l,n,c;e.parameters={...e.parameters,docs:{...(l=e.parameters)==null?void 0:l.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{I as o}from"./input-with-examples-YZffrKhM.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./renderer-hPmI_Chp.js";import"./version-akiLXZts.js";import"./util-YrNvlCNO.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./index-h_CiYGGb.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";const me={title:"Perseus/Components/Input with Examples"},p={examples:[],id:"",onChange:()=>{},value:""},i=["Sample 1","Sample 2","Sample 3"],e=m=>a(o,{...p}),t=m=>a(o,{...p,examples:i}),r=m=>a(o,{...p,examples:i,labelText:"Test label"}),s=m=>a(o,{...p,disabled:!0,examples:i});e.__docgenInfo={description:"",methods:[],displayName:"DefaultAndMostlyEmptyProps"};t.__docgenInfo={description:"",methods:[],displayName:"ListOfExamples"};r.__docgenInfo={description:"",methods:[],displayName:"AriaLabelTextWithListOfExamples"};s.__docgenInfo={description:"",methods:[],displayName:"DisabledInput"};var l,n,c;e.parameters={...e.parameters,docs:{...(l=e.parameters)==null?void 0:l.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(c=(n=e.parameters)==null?void 0:n.docs)==null?void 0:c.source}}};var d,u,x;t.parameters={...t.parameters,docs:{...(d=t.parameters)==null?void 0:d.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/interaction-editor.stories-0GCwKMr4.js b/assets/interaction-editor.stories-eXk1HBXu.js similarity index 51% rename from assets/interaction-editor.stories-0GCwKMr4.js rename to assets/interaction-editor.stories-eXk1HBXu.js index f0a435c659..4f954225c2 100644 --- a/assets/interaction-editor.stories-0GCwKMr4.js +++ b/assets/interaction-editor.stories-eXk1HBXu.js @@ -1,4 +1,4 @@ -import{j as l}from"./jsx-runtime-FVsy8kgq.js";import{r as o}from"./index-TT1qJ6UJ.js";import{I as h}from"./index-qwL3MFQI.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./editor-jsonify-iuVqcZSO.js";import"./graph-settings-F_5lrkPp.js";import"./components-GHvuFaIn.js";import"./index-0C4KXdeC.js";const pr={title:"PerseusEditor/Widgets/Interaction Editor"},t=d=>{const[e,n]=o.useState(),[s,a]=o.useState();function c(r){r.graph&&a(r.graph),r.elements&&n(r.elements)}return l(h,{onChange:c,elements:e,graph:s})};t.__docgenInfo={description:"",methods:[],displayName:"Default"};var i,m,p;t.parameters={...t.parameters,docs:{...(i=t.parameters)==null?void 0:i.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as l}from"./jsx-runtime-FVsy8kgq.js";import{r as o}from"./index-TT1qJ6UJ.js";import{I as h}from"./index-Jny9tT-6.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./editor-jsonify-SX5E4P_Y.js";import"./graph-settings-_umr9_il.js";import"./components-h6HHhmoA.js";import"./index-fuycm_QE.js";import"./index-k-0mNqHS.js";const er={title:"PerseusEditor/Widgets/Interaction Editor"},t=d=>{const[e,n]=o.useState(),[s,a]=o.useState();function c(r){r.graph&&a(r.graph),r.elements&&n(r.elements)}return l(h,{onChange:c,elements:e,graph:s})};t.__docgenInfo={description:"",methods:[],displayName:"Default"};var i,m,p;t.parameters={...t.parameters,docs:{...(i=t.parameters)==null?void 0:i.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const [elements, setElements] = useState(); const [graph, setGraph] = useState(); function handleChange(next) { @@ -10,4 +10,4 @@ import{j as l}from"./jsx-runtime-FVsy8kgq.js";import{r as o}from"./index-TT1qJ6U } } return ; -}`,...(p=(m=t.parameters)==null?void 0:m.docs)==null?void 0:p.source}}};const er=["Default"];export{t as Default,er as __namedExportsOrder,pr as default}; +}`,...(p=(m=t.parameters)==null?void 0:m.docs)==null?void 0:p.source}}};const nr=["Default"];export{t as Default,nr as __namedExportsOrder,er as default}; diff --git a/assets/interaction.stories-iwlmyocz.js b/assets/interaction.stories-Vmq1c1LS.js similarity index 80% rename from assets/interaction.stories-iwlmyocz.js rename to assets/interaction.stories-Vmq1c1LS.js index b2bce508b9..853192295d 100644 --- a/assets/interaction.stories-iwlmyocz.js +++ b/assets/interaction.stories-Vmq1c1LS.js @@ -1,4 +1,4 @@ -import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{R as a}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const p={content:`Drag the dot all the way to the right. +import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{R as a}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const p={content:`Drag the dot all the way to the right. [[☃ interaction 1]] diff --git a/assets/interactive-graph-editor-mWYDsmAp.js b/assets/interactive-graph-editor-1ZmjvlNv.js similarity index 97% rename from assets/interactive-graph-editor-mWYDsmAp.js rename to assets/interactive-graph-editor-1ZmjvlNv.js index 89a8f6aeca..7d65ee4e2f 100644 --- a/assets/interactive-graph-editor-mWYDsmAp.js +++ b/assets/interactive-graph-editor-1ZmjvlNv.js @@ -1,4 +1,4 @@ -import{j as r,a as s,F as x}from"./jsx-runtime-FVsy8kgq.js";import{U as ce}from"./util-XcxTwqb0.js";import{l as be,s as we,e as Ve}from"./svg-image-VUqtnnD6.js";import{i as Ce,j as Se,k as ve,m as xe,n as ke,o as Te,q as qe,r as Pe,s as Ie,u as He}from"./article-renderer-6f7Dak4j.js";import{_ as q}from"./jquery-yG1GhClm.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import{S as je}from"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as Qe}from"./components-GHvuFaIn.js";import{i as Xe}from"./constants-I_nlPaPx.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import{w as Ae}from"./index-J2t_5nK1.js";import"./index-IIMKO4_x.js";import{V as d}from"./index-6h5t6F0w.js";import{S as P,O as p}from"./answer-choices-uB4giKvU.js";import{T as Ye,a as Ze,C as ue}from"./index-QCAhLhLD.js";import{s as o,c as y,a as V}from"./index-deFLJwr4.js";import{c as _e,f as W,L as u,a as H,b as ge}from"./index-h_CiYGGb.js";import{l as w}from"./index-awljIyHI.js";import{r as D}from"./index-TT1qJ6UJ.js";import{i as m}from"./tiny-invariant-bHgPayXn.js";import{H as j}from"./heading-8aCiuWUg.js";import{S as g}from"./index-qUyqkRvh.js";import{L as T,I as Je}from"./interactive-graph-settings-aG03uuTu.js";import{L as Ke}from"./locked-figures-section-K5V7atp-.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{B as er}from"./choice-E4eyMygy.js";import{C as f,P as rr}from"./locked-label-settings-X4RKk04F.js";import{S as tr}from"./scrollless-number-text-field-U5Bx_xXb.js";const M="unlimited",Le=t=>{const e=parseInt(t,10);return isNaN(e)||e===0?M:e},Ge=({numPoints:t=1,onChange:e})=>r(P,{selectedValue:`${t}`,onChange:n=>{e(Le(n))},placeholder:"",style:nr.singleSelectShort,children:[...[...Array(7).keys()].map(n=>r(p,{value:`${n}`,label:`${n} point${n>1?"s":""}`},n)),r(p,{value:M,label:"unlimited"},"unlimited")]}),nr=w.StyleSheet.create({singleSelectShort:{height:26}});Ge.__docgenInfo={description:"",methods:[],displayName:"GraphPointsCountSelector",props:{numPoints:{required:!1,tsType:{name:"union",raw:"number | typeof UNLIMITED",elements:[{name:"number"},{name:"UNLIMITED"}]},description:"",defaultValue:{value:"1",computed:!1}},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(points: PointValue) => void",signature:{arguments:[{type:{name:"union",raw:"number | typeof UNLIMITED",elements:[{name:"number"},{name:"UNLIMITED"}]},name:"points"}],return:{name:"void"}}},description:""}}};const De=t=>s(P,{selectedValue:t.graphType,onChange:t.onChange,placeholder:"Select an answer type",style:ar.singleSelectShort,children:[t.showNoneOption&&r(p,{value:"none",label:"None"}),r(p,{value:"linear",label:"Linear function"}),r(p,{value:"quadratic",label:"Quadratic function"}),r(p,{value:"sinusoid",label:"Sinusoid function"}),r(p,{value:"circle",label:"Circle"}),r(p,{value:"point",label:"Point(s)"}),r(p,{value:"linear-system",label:"Linear System"}),r(p,{value:"polygon",label:"Polygon"}),r(p,{value:"segment",label:"Line Segment(s)"}),r(p,{value:"ray",label:"Ray"}),r(p,{value:"angle",label:"Angle"})]}),ar=w.StyleSheet.create({singleSelectShort:{height:26}});De.__docgenInfo={description:"",methods:[],displayName:"GraphTypeSelector",props:{graphType:{required:!0,tsType:{name:"string"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newGraphType: string) => void",signature:{arguments:[{type:{name:"string"},name:"newGraphType"}],return:{name:"void"}}},description:""},showNoneOption:{required:!0,tsType:{name:"boolean"},description:""}}};function Ne(t){return s(x,{children:[r(j,{title:"Correct Answer",isOpen:!0,isCollapsible:!1}),s(d,{children:[s(d,{children:[r(_e,{style:{paddingTop:o.xxSmall_6,paddingBottom:o.xxSmall_6,color:y.offBlack64},children:"Graph the correct answer in the graph below and ensure the equation or point coordinates displayed represent the correct answer."}),r(W,{style:{fontSize:12,backgroundColor:"#eee",paddingInline:o.xxSmall_6,borderColor:"#ccc",borderStyle:"solid",borderWidth:1},children:t.equationString})]}),t.children]})]})}Ne.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphCorrectAnswer",props:{equationString:{required:!0,tsType:{name:"string"},description:""},children:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""}}};function ze(t){const{ariaLabelValue:e,ariaDescriptionValue:n,onChange:a}=t,[i,c]=D.useState(!0);return s(x,{children:[r(j,{title:"Description",isCollapsible:!0,isOpen:i,onToggle:c}),i&&s(d,{children:[r(_e,{style:U.caption,children:"Use these fields to describe the graph as a whole. These are used by screen readers to describe content to users who may be visually impaired."}),s(u,{tag:"label",children:["Title",r(Ye,{value:e,onChange:l=>a({fullGraphAriaLabel:l||void 0}),style:U.spaceAbove})]}),r(g,{size:o.small_12}),s(u,{tag:"label",children:["Description",r(Ze,{rows:8,resizeType:"vertical",value:n,onChange:l=>a({fullGraphAriaDescription:l||void 0}),style:U.spaceAbove})]})]})]})}const U=w.StyleSheet.create({caption:{color:y.offBlack64,paddingTop:o.xxSmall_6,paddingBottom:o.xxSmall_6},spaceAbove:{marginTop:o.xxxSmall_4}});ze.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphDescription",props:{ariaLabelValue:{required:!0,tsType:{name:"string"},description:""},ariaDescriptionValue:{required:!0,tsType:{name:"string"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(graphProps: Partial) => void",signature:{arguments:[{type:{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ +import{j as r,a as s,F as x}from"./jsx-runtime-FVsy8kgq.js";import{U as ce}from"./util-YrNvlCNO.js";import{l as be,s as we,e as Ve}from"./svg-image-RL9NlJEY.js";import{h as Ce,i as Se,j as ve,k as xe,m as ke,n as Te,o as qe,q as Pe,r as Ie,s as He}from"./article-renderer-TMdCDA85.js";import{_ as q}from"./jquery-yG1GhClm.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import{S as je}from"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as Qe}from"./components-h6HHhmoA.js";import{i as Xe}from"./constants-I_nlPaPx.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import{w as Ae}from"./index-J2t_5nK1.js";import"./index-IIMKO4_x.js";import{V as d}from"./index-6h5t6F0w.js";import{S as P,O as p}from"./answer-choices-xSqM961S.js";import{T as Ye,a as Ze,C as ue}from"./index-QCAhLhLD.js";import{s as o,c as y,a as V}from"./index-deFLJwr4.js";import{c as _e,f as W,L as u,a as H,b as ge}from"./index-h_CiYGGb.js";import{l as w}from"./index-awljIyHI.js";import{r as D}from"./index-TT1qJ6UJ.js";import{i as m}from"./tiny-invariant-bHgPayXn.js";import{H as j}from"./heading-8aCiuWUg.js";import{S as g}from"./index-qUyqkRvh.js";import{L as T,I as Je}from"./interactive-graph-settings-bMgmMCqq.js";import{L as Ke}from"./locked-figures-section-Tfk_-k0r.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{B as er}from"./choice-E4eyMygy.js";import{C as f,P as rr}from"./locked-label-settings-mrPkDK9u.js";import{S as tr}from"./scrollless-number-text-field-U5Bx_xXb.js";const M="unlimited",Le=t=>{const e=parseInt(t,10);return isNaN(e)||e===0?M:e},Ge=({numPoints:t=1,onChange:e})=>r(P,{selectedValue:`${t}`,onChange:n=>{e(Le(n))},placeholder:"",style:nr.singleSelectShort,children:[...[...Array(7).keys()].map(n=>r(p,{value:`${n}`,label:`${n} point${n>1?"s":""}`},n)),r(p,{value:M,label:"unlimited"},"unlimited")]}),nr=w.StyleSheet.create({singleSelectShort:{height:26}});Ge.__docgenInfo={description:"",methods:[],displayName:"GraphPointsCountSelector",props:{numPoints:{required:!1,tsType:{name:"union",raw:"number | typeof UNLIMITED",elements:[{name:"number"},{name:"UNLIMITED"}]},description:"",defaultValue:{value:"1",computed:!1}},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(points: PointValue) => void",signature:{arguments:[{type:{name:"union",raw:"number | typeof UNLIMITED",elements:[{name:"number"},{name:"UNLIMITED"}]},name:"points"}],return:{name:"void"}}},description:""}}};const De=t=>s(P,{selectedValue:t.graphType,onChange:t.onChange,placeholder:"Select an answer type",style:ar.singleSelectShort,children:[t.showNoneOption&&r(p,{value:"none",label:"None"}),r(p,{value:"linear",label:"Linear function"}),r(p,{value:"quadratic",label:"Quadratic function"}),r(p,{value:"sinusoid",label:"Sinusoid function"}),r(p,{value:"circle",label:"Circle"}),r(p,{value:"point",label:"Point(s)"}),r(p,{value:"linear-system",label:"Linear System"}),r(p,{value:"polygon",label:"Polygon"}),r(p,{value:"segment",label:"Line Segment(s)"}),r(p,{value:"ray",label:"Ray"}),r(p,{value:"angle",label:"Angle"})]}),ar=w.StyleSheet.create({singleSelectShort:{height:26}});De.__docgenInfo={description:"",methods:[],displayName:"GraphTypeSelector",props:{graphType:{required:!0,tsType:{name:"string"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newGraphType: string) => void",signature:{arguments:[{type:{name:"string"},name:"newGraphType"}],return:{name:"void"}}},description:""},showNoneOption:{required:!0,tsType:{name:"boolean"},description:""}}};function Ne(t){return s(x,{children:[r(j,{title:"Correct Answer",isOpen:!0,isCollapsible:!1}),s(d,{children:[s(d,{children:[r(_e,{style:{paddingTop:o.xxSmall_6,paddingBottom:o.xxSmall_6,color:y.offBlack64},children:"Graph the correct answer in the graph below and ensure the equation or point coordinates displayed represent the correct answer."}),r(W,{style:{fontSize:12,backgroundColor:"#eee",paddingInline:o.xxSmall_6,borderColor:"#ccc",borderStyle:"solid",borderWidth:1},children:t.equationString})]}),t.children]})]})}Ne.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphCorrectAnswer",props:{equationString:{required:!0,tsType:{name:"string"},description:""},children:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""}}};function ze(t){const{ariaLabelValue:e,ariaDescriptionValue:n,onChange:a}=t,[i,c]=D.useState(!0);return s(x,{children:[r(j,{title:"Description",isCollapsible:!0,isOpen:i,onToggle:c}),i&&s(d,{children:[r(_e,{style:U.caption,children:"Use these fields to describe the graph as a whole. These are used by screen readers to describe content to users who may be visually impaired."}),s(u,{tag:"label",children:["Title",r(Ye,{value:e,onChange:l=>a({fullGraphAriaLabel:l||void 0}),style:U.spaceAbove})]}),r(g,{size:o.small_12}),s(u,{tag:"label",children:["Description",r(Ze,{rows:8,resizeType:"vertical",value:n,onChange:l=>a({fullGraphAriaDescription:l||void 0}),style:U.spaceAbove})]})]})]})}const U=w.StyleSheet.create({caption:{color:y.offBlack64,paddingTop:o.xxSmall_6,paddingBottom:o.xxSmall_6},spaceAbove:{marginTop:o.xxxSmall_4}});ze.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphDescription",props:{ariaLabelValue:{required:!0,tsType:{name:"string"},description:""},ariaDescriptionValue:{required:!0,tsType:{name:"string"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(graphProps: Partial) => void",signature:{arguments:[{type:{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ apiOptions: APIOptionsWithDefaults; /** diff --git a/assets/interactive-graph-editor.stories-_kYMxH2Y.js b/assets/interactive-graph-editor.stories-b0kfd7ih.js similarity index 85% rename from assets/interactive-graph-editor.stories-_kYMxH2Y.js rename to assets/interactive-graph-editor.stories-b0kfd7ih.js index 6159c90158..3325ffdba1 100644 --- a/assets/interactive-graph-editor.stories-_kYMxH2Y.js +++ b/assets/interactive-graph-editor.stories-b0kfd7ih.js @@ -1,4 +1,4 @@ -import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{r as c}from"./index-TT1qJ6UJ.js";import{f as $}from"./flags-for-api-options-oZTvm2lx.js";import{I as s}from"./interactive-graph-editor-mWYDsmAp.js";import{g as ee}from"./util-3pmDu6r6.js";import{I as te}from"./interactive-graph-settings.argtypes-6T40gg9D.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./heading-8aCiuWUg.js";import"./index-tFzzSRL2.js";import"./toggleable-caret-lFiCktzo.js";import"./interactive-graph-settings-aG03uuTu.js";import"./locked-figures-section-K5V7atp-.js";import"./locked-ellipse-settings-kWVnJxri.js";import"./locked-figure-aria-RWwSDIb0.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-X4RKk04F.js";import"./color-select-G-xDxP7-.js";import"./line-stroke-select-CC0fFBuz.js";import"./locked-function-settings-ARS0ni8Z.js";import"./line-swatch-xLt6fclZ.js";import"./locked-line-settings-APCIPT7n.js";import"./locked-point-settings-KDnxNHJ0.js";import"./labeled-switch--NF5de2V.js";import"./locked-polygon-settings-oPik-nhx.js";import"./locked-vector-settings-JVpVhbIu.js";const re={apiOptions:{control:{type:"object"},type:{name:"object",required:!0}},correct:{control:{type:null},type:{name:"object",required:!1}},graph:{control:{type:"object"},type:{name:"object",required:!0}},lockedFigures:{control:{type:"object"},type:{name:"Array",required:!1}},onChange:{control:{type:"function"},type:{name:"(props: Partial) => void",required:!0}},...te},m={apiOptions:{flags:$},graph:{type:"segment"},correct:{type:"segment"}},a=ee("point"),ur={title:"PerseusEditor/Widgets/Interactive Graph Editor",component:s,argTypes:re},d=i=>p(s,{...i});d.args={box:[288,288],gridStep:[1,1],labels:["x","y"],markings:"graph",range:[[-10,10],[-10,10]],rulerLabel:"",rulerTicks:10,showProtractor:!1,showRuler:!1,showTooltips:!1,snapStep:[1,1],step:[1,1]};const l={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,{});return p(s,{...t,onChange:r})}},u={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,m);return p(s,{...t,onChange:r})}},h={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,{...m,graph:{type:"polygon"},correct:{type:"polygon",numSides:4,showAngles:!0,showSides:!0,snapTo:"angles"}});return p(s,{...t,onChange:r})}},g={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,{...m,lockedFigures:[{...a,coord:[1,1]},{...a,coord:[-1,-1]}]});return p(s,{...t,onChange:r})}},f={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,{...m,lockedFigures:[{type:"line",kind:"line",points:[{...a,coord:[0,2]},{...a,coord:[2,3]}],color:"green",lineStyle:"solid",showPoint1:!1,showPoint2:!1},{type:"line",kind:"ray",points:[{...a,color:"pink",coord:[0,0]},{...a,color:"pink",coord:[4,2]}],color:"pink",lineStyle:"solid",showPoint1:!0,showPoint2:!1},{type:"line",kind:"segment",points:[{...a,color:"grayH",coord:[0,-2]},{...a,color:"grayH",coord:[4,0]}],color:"grayH",lineStyle:"solid",showPoint1:!0,showPoint2:!0}]});return p(s,{...t,onChange:r})}},y={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,{...m,lockedFigures:[{type:"ellipse",center:[0,0],radius:[5,2],angle:0,color:"green",fillStyle:"translucent",strokeStyle:"solid"}]});return p(s,{...t,onChange:r})}},k={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,{...m,lockedFigures:[{type:"polygon",points:[[-9,4],[-6,4],[-6,1],[-9,1]],color:"green",fillStyle:"translucent",strokeStyle:"solid"}]});return p(s,{...t,onChange:r})}};d.__docgenInfo={description:"",methods:[],displayName:"Default"};var w,S,P;d.parameters={...d.parameters,docs:{...(w=d.parameters)==null?void 0:w.docs,source:{originalSource:`(args): React.ReactElement => { +import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{r as c}from"./index-TT1qJ6UJ.js";import{f as $}from"./flags-for-api-options-VdIBjpAD.js";import{I as s}from"./interactive-graph-editor-1ZmjvlNv.js";import{g as ee}from"./util-yTFMWwoT.js";import{I as te}from"./interactive-graph-settings.argtypes-6T40gg9D.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./heading-8aCiuWUg.js";import"./index-tFzzSRL2.js";import"./toggleable-caret-lFiCktzo.js";import"./interactive-graph-settings-bMgmMCqq.js";import"./locked-figures-section-Tfk_-k0r.js";import"./locked-ellipse-settings-TfTFulml.js";import"./locked-figure-aria-7tCktpI9.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-mrPkDK9u.js";import"./color-select-GgikiV2v.js";import"./line-stroke-select-8a9MPfaw.js";import"./locked-function-settings-hpVCfdZN.js";import"./line-swatch-0Zcc1GCG.js";import"./locked-line-settings-s3VKqEiy.js";import"./locked-point-settings-ajnmafNS.js";import"./labeled-switch-Qne5XsM1.js";import"./locked-polygon-settings-LXOy6nHR.js";import"./locked-vector-settings-214PJGeS.js";const re={apiOptions:{control:{type:"object"},type:{name:"object",required:!0}},correct:{control:{type:null},type:{name:"object",required:!1}},graph:{control:{type:"object"},type:{name:"object",required:!0}},lockedFigures:{control:{type:"object"},type:{name:"Array",required:!1}},onChange:{control:{type:"function"},type:{name:"(props: Partial) => void",required:!0}},...te},m={apiOptions:{flags:$},graph:{type:"segment"},correct:{type:"segment"}},a=ee("point"),ur={title:"PerseusEditor/Widgets/Interactive Graph Editor",component:s,argTypes:re},d=i=>p(s,{...i});d.args={box:[288,288],gridStep:[1,1],labels:["x","y"],markings:"graph",range:[[-10,10],[-10,10]],rulerLabel:"",rulerTicks:10,showProtractor:!1,showRuler:!1,showTooltips:!1,snapStep:[1,1],step:[1,1]};const l={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,{});return p(s,{...t,onChange:r})}},u={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,m);return p(s,{...t,onChange:r})}},h={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,{...m,graph:{type:"polygon"},correct:{type:"polygon",numSides:4,showAngles:!0,showSides:!0,snapTo:"angles"}});return p(s,{...t,onChange:r})}},g={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,{...m,lockedFigures:[{...a,coord:[1,1]},{...a,coord:[-1,-1]}]});return p(s,{...t,onChange:r})}},f={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,{...m,lockedFigures:[{type:"line",kind:"line",points:[{...a,coord:[0,2]},{...a,coord:[2,3]}],color:"green",lineStyle:"solid",showPoint1:!1,showPoint2:!1},{type:"line",kind:"ray",points:[{...a,color:"pink",coord:[0,0]},{...a,color:"pink",coord:[4,2]}],color:"pink",lineStyle:"solid",showPoint1:!0,showPoint2:!1},{type:"line",kind:"segment",points:[{...a,color:"grayH",coord:[0,-2]},{...a,color:"grayH",coord:[4,0]}],color:"grayH",lineStyle:"solid",showPoint1:!0,showPoint2:!0}]});return p(s,{...t,onChange:r})}},y={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,{...m,lockedFigures:[{type:"ellipse",center:[0,0],radius:[5,2],angle:0,color:"green",fillStyle:"translucent",strokeStyle:"solid"}]});return p(s,{...t,onChange:r})}},k={render:function(){const e=(n,o)=>({...n,...o}),[t,r]=c.useReducer(e,{...m,lockedFigures:[{type:"polygon",points:[[-9,4],[-6,4],[-6,1],[-9,1]],color:"green",fillStyle:"translucent",strokeStyle:"solid"}]});return p(s,{...t,onChange:r})}};d.__docgenInfo={description:"",methods:[],displayName:"Default"};var w,S,P;d.parameters={...d.parameters,docs:{...(w=d.parameters)==null?void 0:w.docs,source:{originalSource:`(args): React.ReactElement => { return ; }`,...(P=(S=d.parameters)==null?void 0:S.docs)==null?void 0:P.source}}};var R,E,v,I,G;l.parameters={...l.parameters,docs:{...(R=l.parameters)==null?void 0:R.docs,source:{originalSource:`{ render: function Render() { diff --git a/assets/interactive-graph-editor.stories-FPTo0uHv.js b/assets/interactive-graph-editor.stories-fj3E5U9k.js similarity index 61% rename from assets/interactive-graph-editor.stories-FPTo0uHv.js rename to assets/interactive-graph-editor.stories-fj3E5U9k.js index ac23f9d7e6..7a0b37eb81 100644 --- a/assets/interactive-graph-editor.stories-FPTo0uHv.js +++ b/assets/interactive-graph-editor.stories-fj3E5U9k.js @@ -1,4 +1,4 @@ -import{j as e,a as C}from"./jsx-runtime-FVsy8kgq.js";import{V as A}from"./index-6h5t6F0w.js";import{S as ct}from"./index-qUyqkRvh.js";import{s as l,c as Q}from"./index-deFLJwr4.js";import{L as pt,B as dt}from"./index-h_CiYGGb.js";import{a as mt}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{l as ut}from"./index-awljIyHI.js";import{r as s}from"./index-TT1qJ6UJ.js";import"./index-nm6u35aB.js";import{i as ft}from"./interactive-graph-question-builder-Mh2lh4tI.js";import{i as gt,s as ht,a as bt,l as kt,b as vt,r as St,c as Wt,q as yt,d as Lt,p as Pt,e as Rt,f as It,g as r}from"./interactive-graph.testdata-QKEIR03d.js";import{r as wt}from"./register-all-widgets-and-editors-for-testing-EmJZ0mCF.js";import{E as t}from"./editor-page-with-storybook-preview-TaVLOU-C.js";import{f as a}from"./flags-for-api-options-oZTvm2lx.js";import{E as Et}from"./editor-page-whMlClJx.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./version-akiLXZts.js";import"./article-editor-bhN33pAO.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./device-framer-YjfQ5GqB.js";import"./constants-hQyjCzwz.js";import"./section-control-button-c-G3Veu9.js";import"./index-tFzzSRL2.js";import"./editor-HVcPyY4Q.js";import"./index-0C4KXdeC.js";import"./index-SM3muJE2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";import"./viewport-resizer-2eJF63Xv.js";import"./structured-item-diff-cBK7G-UD.js";import"./text-diff-2XL6ZGXE.js";import"./tags-diff-2P1jpY0i.js";import"./multi-items-SYXQQaEF.js";/* empty css */import"./categorizer-editor-am_KbYeJ.js";import"./editor-jsonify-iuVqcZSO.js";import"./blur-input-hjJsfoK9.js";import"./definition-editor-U6nI8Sor.js";import"./dropdown-editor-YwuHUUGx.js";import"./explanation-editor-mOtE1dCr.js";import"./expression-editor-QP0tq_O5.js";import"./graph-settings-F_5lrkPp.js";import"./image-editor-vUFdKz9N.js";import"./input-number-editor-kZK8JIcV.js";import"./index-qwL3MFQI.js";import"./interactive-graph-editor-mWYDsmAp.js";import"./heading-8aCiuWUg.js";import"./interactive-graph-settings-aG03uuTu.js";import"./locked-figures-section-K5V7atp-.js";import"./locked-ellipse-settings-kWVnJxri.js";import"./locked-figure-aria-RWwSDIb0.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-X4RKk04F.js";import"./color-select-G-xDxP7-.js";import"./util-3pmDu6r6.js";import"./line-stroke-select-CC0fFBuz.js";import"./locked-function-settings-ARS0ni8Z.js";import"./line-swatch-xLt6fclZ.js";import"./locked-line-settings-APCIPT7n.js";import"./locked-point-settings-KDnxNHJ0.js";import"./labeled-switch--NF5de2V.js";import"./locked-polygon-settings-oPik-nhx.js";import"./locked-vector-settings-JVpVhbIu.js";import"./label-image-editor-mryVz6qt.js";import"./form-wrapped-text-field-DtGz9PJ5.js";import"./answer-choices-SJhxKMzc.js";import"./behavior-X6OD0iDh.js";import"./question-markers-WvVDMwno.js";import"./marker-ika3cQ1R.js";import"./select-image-cimnxdnG.js";import"./matcher-editor-Aey-GH6J.js";import"./number-line-editor-qZz0HHTk.js";import"./numeric-input-editor-qJT3lp_E.js";import"./phet-simulation-editor-h1woLwi3.js";import"./python-program-editor-2Q8IzVky.js";import"./editor-bnXHS4_2.js";import"./sorter-editor-5DYvFg1M.js";import"./item-extras-editor-2WxH27E_.js";wt();const Aa={title:"PerseusEditor/Widgets/Interactive Graph"},qt=mt("onChange"),c=()=>e(t,{question:gt}),p=()=>e(t,{question:ht}),d=()=>e(t,{question:bt}),m=()=>e(t,{question:kt}),u=()=>e(t,{question:vt}),f=()=>e(t,{question:St}),g=()=>e(t,{question:Wt}),h=()=>e(t,{question:yt}),b=()=>e(t,{question:Lt}),k=()=>e(t,{question:Pt}),v=()=>e(t,{question:Rt}),S=()=>e(t,{question:It}),W=()=>e(t,{question:ft().withNoInteractiveFigure().addLockedFunction("5*sin(x)",{color:"red"}).build()}),i=()=>e(t,{apiOptions:{isMobile:!1,flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!1,"locked-figures-aria":!1,"locked-point-labels":!1,"locked-line-labels":!1,"locked-vector-labels":!1,"locked-ellipse-labels":!1,"locked-polygon-labels":!1,"locked-function-labels":!1}}},question:r});i.parameters={chromatic:{disable:!0}};const y=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!1,"locked-line-labels":!1,"locked-vector-labels":!1,"locked-ellipse-labels":!1,"locked-polygon-labels":!1,"locked-function-labels":!1}}},question:r}),L=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!0,"locked-line-labels":!1,"locked-vector-labels":!1,"locked-ellipse-labels":!1,"locked-polygon-labels":!1,"locked-function-labels":!1}}},question:r}),P=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!1,"locked-line-labels":!0,"locked-vector-labels":!1,"locked-ellipse-labels":!1,"locked-polygon-labels":!1,"locked-function-labels":!1}}},question:r}),R=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!1,"locked-line-labels":!1,"locked-vector-labels":!0,"locked-ellipse-labels":!1,"locked-polygon-labels":!1,"locked-function-labels":!1}}},question:r}),I=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!1,"locked-line-labels":!1,"locked-vector-labels":!1,"locked-ellipse-labels":!0,"locked-polygon-labels":!1,"locked-function-labels":!1}}},question:r}),w=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!1,"locked-line-labels":!1,"locked-vector-labels":!1,"locked-ellipse-labels":!1,"locked-polygon-labels":!0,"locked-function-labels":!1}}},question:r}),E=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!1,"locked-line-labels":!1,"locked-vector-labels":!1,"locked-ellipse-labels":!1,"locked-polygon-labels":!1,"locked-function-labels":!0}}},question:r}),q=()=>e(t,{question:r}),n=()=>{const[Xe,Ze]=s.useState("phone"),[et,tt]=s.useState(!1),[ot,rt]=s.useState(),[M,at]=s.useState(r),[G,st]=s.useState(),[it,nt]=s.useState([]),_=s.useRef(null);return s.useEffect(()=>{if(_.current){const o=_.current.getSaveWarnings();nt(o)}},[_,M,G]),C(A,{style:F.container,children:[e(Et,{ref:_,apiOptions:{isMobile:!1,flags:a},previewDevice:Xe,onPreviewDeviceChange:o=>Ze(o),developerMode:!0,jsonMode:et,answerArea:ot,question:M,hints:G,frameSource:"about:blank",previewURL:"about:blank",itemId:"1",onChange:o=>{qt(o),"jsonMode"in o&&tt(o.jsonMode),"answerArea"in o&&rt(o.answerArea),"question"in o&&at(o.question),"hints"in o&&st(o.hints)}}),C(A,{style:F.errorContainer,children:[e(pt,{children:"Save Warnings:"}),e(ct,{size:l.small_12}),it.map((o,lt)=>e(dt,{style:F.errorMessage,children:o},lt))]})]})};n.parameters={chromatic:{disable:!0}};const F=ut.StyleSheet.create({container:{flexDirection:"row"},errorContainer:{border:`1px solid ${Q.offBlack}`,padding:l.medium_16,flexGrow:1,marginRight:l.xLarge_32,height:"80vh",position:"sticky",top:l.xLarge_32,overflowY:"auto"},errorMessage:{color:Q.red,marginBottom:l.small_12}});c.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphWithAriaLabel"};p.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphSegment"};d.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphSegments"};m.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphLinear"};u.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphLinearSystem"};f.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphRay"};g.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphCircle"};h.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphQuadratic"};b.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphSinusoid"};k.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphPoint"};v.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphPolygon"};S.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphAngle"};W.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphNone"};i.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedFiguresCurrent"};y.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedLabelsFlag"};L.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedPointLabelsFlag"};P.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedLineLabelsFlag"};R.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedVectorLabelsFlag"};I.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedEllipseLabelsFlag"};w.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedPolygonLabelsFlag"};E.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedFunctionLabelsFlag"};q.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedFigureLabelsAllFlags"};n.__docgenInfo={description:"",methods:[],displayName:"WithSaveWarnings"};var N,O,x;c.parameters={...c.parameters,docs:{...(N=c.parameters)==null?void 0:N.docs,source:{originalSource:"(): React.ReactElement => ",...(x=(O=c.parameters)==null?void 0:O.docs)==null?void 0:x.source}}};var D,j,V;p.parameters={...p.parameters,docs:{...(D=p.parameters)==null?void 0:D.docs,source:{originalSource:`(): React.ReactElement => { +import{j as e,a as C}from"./jsx-runtime-FVsy8kgq.js";import{V as A}from"./index-6h5t6F0w.js";import{S as ct}from"./index-qUyqkRvh.js";import{s as l,c as Q}from"./index-deFLJwr4.js";import{L as pt,B as dt}from"./index-h_CiYGGb.js";import{a as mt}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{l as ut}from"./index-awljIyHI.js";import{r as s}from"./index-TT1qJ6UJ.js";import"./index-6Rnzd_gN.js";import{i as ft}from"./interactive-graph-question-builder-Mh2lh4tI.js";import{i as gt,s as ht,a as bt,l as kt,b as vt,r as St,c as Wt,q as yt,d as Lt,p as Pt,e as Rt,f as It,g as r}from"./interactive-graph.testdata-QKEIR03d.js";import{r as wt}from"./register-all-widgets-and-editors-for-testing-Duh1ZXvu.js";import{E as t}from"./editor-page-with-storybook-preview-PyHv_pWj.js";import{f as a}from"./flags-for-api-options-VdIBjpAD.js";import{E as Et}from"./editor-page-a0k5dFPi.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./version-akiLXZts.js";import"./article-editor-_CIVbpzD.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./device-framer-kfyrsN2-.js";import"./constants-hQyjCzwz.js";import"./section-control-button-J8oVp9bZ.js";import"./index-tFzzSRL2.js";import"./editor-I-vnrXtz.js";import"./index-fuycm_QE.js";import"./index-k-0mNqHS.js";import"./index-SM3muJE2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";import"./viewport-resizer-spuc4uQO.js";import"./structured-item-diff-eXkE0zlp.js";import"./text-diff-VQhvkbai.js";import"./tags-diff-QpgBeBx_.js";import"./multi-items-zAjfw5su.js";/* empty css */import"./categorizer-editor-B70XrHDb.js";import"./editor-jsonify-SX5E4P_Y.js";import"./blur-input-hjJsfoK9.js";import"./definition-editor-dEifSd-2.js";import"./dropdown-editor-z4XV_Nz9.js";import"./explanation-editor-7TAFL4nE.js";import"./expression-editor-iqoCc9gS.js";import"./graph-settings-_umr9_il.js";import"./image-editor-AZ-dC4_D.js";import"./input-number-editor-TkxXdBqK.js";import"./index-Jny9tT-6.js";import"./interactive-graph-editor-1ZmjvlNv.js";import"./heading-8aCiuWUg.js";import"./interactive-graph-settings-bMgmMCqq.js";import"./locked-figures-section-Tfk_-k0r.js";import"./locked-ellipse-settings-TfTFulml.js";import"./locked-figure-aria-7tCktpI9.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-mrPkDK9u.js";import"./color-select-GgikiV2v.js";import"./util-yTFMWwoT.js";import"./line-stroke-select-8a9MPfaw.js";import"./locked-function-settings-hpVCfdZN.js";import"./line-swatch-0Zcc1GCG.js";import"./locked-line-settings-s3VKqEiy.js";import"./locked-point-settings-ajnmafNS.js";import"./labeled-switch-Qne5XsM1.js";import"./locked-polygon-settings-LXOy6nHR.js";import"./locked-vector-settings-214PJGeS.js";import"./label-image-editor-cReH8dJ4.js";import"./form-wrapped-text-field-BopYavUW.js";import"./answer-choices-2q3o0s95.js";import"./behavior-bUq-LmpJ.js";import"./question-markers-h3QT0QS4.js";import"./marker-o8uSzdrK.js";import"./select-image--koiUF2W.js";import"./matcher-editor-roy8eQL9.js";import"./number-line-editor-5mXaeixJ.js";import"./numeric-input-editor-HZCTKW32.js";import"./phet-simulation-editor-8cXa9agX.js";import"./python-program-editor-KSnFH92m.js";import"./editor-0vKo6Oc_.js";import"./sorter-editor-rLrUJXLc.js";import"./item-extras-editor-cTVEyrYD.js";wt();const Qa={title:"PerseusEditor/Widgets/Interactive Graph"},qt=mt("onChange"),c=()=>e(t,{question:gt}),p=()=>e(t,{question:ht}),d=()=>e(t,{question:bt}),m=()=>e(t,{question:kt}),u=()=>e(t,{question:vt}),f=()=>e(t,{question:St}),g=()=>e(t,{question:Wt}),h=()=>e(t,{question:yt}),b=()=>e(t,{question:Lt}),k=()=>e(t,{question:Pt}),v=()=>e(t,{question:Rt}),S=()=>e(t,{question:It}),W=()=>e(t,{question:ft().withNoInteractiveFigure().addLockedFunction("5*sin(x)",{color:"red"}).build()}),i=()=>e(t,{apiOptions:{isMobile:!1,flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!1,"locked-figures-aria":!1,"locked-point-labels":!1,"locked-line-labels":!1,"locked-vector-labels":!1,"locked-ellipse-labels":!1,"locked-polygon-labels":!1,"locked-function-labels":!1}}},question:r});i.parameters={chromatic:{disable:!0}};const y=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!1,"locked-line-labels":!1,"locked-vector-labels":!1,"locked-ellipse-labels":!1,"locked-polygon-labels":!1,"locked-function-labels":!1}}},question:r}),L=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!0,"locked-line-labels":!1,"locked-vector-labels":!1,"locked-ellipse-labels":!1,"locked-polygon-labels":!1,"locked-function-labels":!1}}},question:r}),P=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!1,"locked-line-labels":!0,"locked-vector-labels":!1,"locked-ellipse-labels":!1,"locked-polygon-labels":!1,"locked-function-labels":!1}}},question:r}),R=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!1,"locked-line-labels":!1,"locked-vector-labels":!0,"locked-ellipse-labels":!1,"locked-polygon-labels":!1,"locked-function-labels":!1}}},question:r}),I=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!1,"locked-line-labels":!1,"locked-vector-labels":!1,"locked-ellipse-labels":!0,"locked-polygon-labels":!1,"locked-function-labels":!1}}},question:r}),w=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!1,"locked-line-labels":!1,"locked-vector-labels":!1,"locked-ellipse-labels":!1,"locked-polygon-labels":!0,"locked-function-labels":!1}}},question:r}),E=()=>e(t,{apiOptions:{flags:{mafs:{...a.mafs,"interactive-graph-locked-features-labels":!0,"locked-point-labels":!1,"locked-line-labels":!1,"locked-vector-labels":!1,"locked-ellipse-labels":!1,"locked-polygon-labels":!1,"locked-function-labels":!0}}},question:r}),q=()=>e(t,{question:r}),n=()=>{const[Xe,Ze]=s.useState("phone"),[et,tt]=s.useState(!1),[ot,rt]=s.useState(),[M,at]=s.useState(r),[G,st]=s.useState(),[it,nt]=s.useState([]),_=s.useRef(null);return s.useEffect(()=>{if(_.current){const o=_.current.getSaveWarnings();nt(o)}},[_,M,G]),C(A,{style:F.container,children:[e(Et,{ref:_,apiOptions:{isMobile:!1,flags:a},previewDevice:Xe,onPreviewDeviceChange:o=>Ze(o),developerMode:!0,jsonMode:et,answerArea:ot,question:M,hints:G,frameSource:"about:blank",previewURL:"about:blank",itemId:"1",onChange:o=>{qt(o),"jsonMode"in o&&tt(o.jsonMode),"answerArea"in o&&rt(o.answerArea),"question"in o&&at(o.question),"hints"in o&&st(o.hints)}}),C(A,{style:F.errorContainer,children:[e(pt,{children:"Save Warnings:"}),e(ct,{size:l.small_12}),it.map((o,lt)=>e(dt,{style:F.errorMessage,children:o},lt))]})]})};n.parameters={chromatic:{disable:!0}};const F=ut.StyleSheet.create({container:{flexDirection:"row"},errorContainer:{border:`1px solid ${Q.offBlack}`,padding:l.medium_16,flexGrow:1,marginRight:l.xLarge_32,height:"80vh",position:"sticky",top:l.xLarge_32,overflowY:"auto"},errorMessage:{color:Q.red,marginBottom:l.small_12}});c.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphWithAriaLabel"};p.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphSegment"};d.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphSegments"};m.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphLinear"};u.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphLinearSystem"};f.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphRay"};g.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphCircle"};h.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphQuadratic"};b.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphSinusoid"};k.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphPoint"};v.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphPolygon"};S.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphAngle"};W.__docgenInfo={description:"",methods:[],displayName:"InteractiveGraphNone"};i.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedFiguresCurrent"};y.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedLabelsFlag"};L.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedPointLabelsFlag"};P.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedLineLabelsFlag"};R.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedVectorLabelsFlag"};I.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedEllipseLabelsFlag"};w.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedPolygonLabelsFlag"};E.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedFunctionLabelsFlag"};q.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedFigureLabelsAllFlags"};n.__docgenInfo={description:"",methods:[],displayName:"WithSaveWarnings"};var N,O,x;c.parameters={...c.parameters,docs:{...(N=c.parameters)==null?void 0:N.docs,source:{originalSource:"(): React.ReactElement => ",...(x=(O=c.parameters)==null?void 0:O.docs)==null?void 0:x.source}}};var D,j,V;p.parameters={...p.parameters,docs:{...(D=p.parameters)==null?void 0:D.docs,source:{originalSource:`(): React.ReactElement => { return ; }`,...(V=(j=p.parameters)==null?void 0:j.docs)==null?void 0:V.source}}};var B,H,J;d.parameters={...d.parameters,docs:{...(B=d.parameters)==null?void 0:B.docs,source:{originalSource:`(): React.ReactElement => { return ; @@ -187,4 +187,4 @@ import{j as e,a as C}from"./jsx-runtime-FVsy8kgq.js";import{V as A}from"./index- )} ; -}`,...(Ke=($e=n.parameters)==null?void 0:$e.docs)==null?void 0:Ke.source}}};const Qa=["InteractiveGraphWithAriaLabel","InteractiveGraphSegment","InteractiveGraphSegments","InteractiveGraphLinear","InteractiveGraphLinearSystem","InteractiveGraphRay","InteractiveGraphCircle","InteractiveGraphQuadratic","InteractiveGraphSinusoid","InteractiveGraphPoint","InteractiveGraphPolygon","InteractiveGraphAngle","InteractiveGraphNone","MafsWithLockedFiguresCurrent","MafsWithLockedLabelsFlag","MafsWithLockedPointLabelsFlag","MafsWithLockedLineLabelsFlag","MafsWithLockedVectorLabelsFlag","MafsWithLockedEllipseLabelsFlag","MafsWithLockedPolygonLabelsFlag","MafsWithLockedFunctionLabelsFlag","MafsWithLockedFigureLabelsAllFlags","WithSaveWarnings"];export{S as InteractiveGraphAngle,g as InteractiveGraphCircle,m as InteractiveGraphLinear,u as InteractiveGraphLinearSystem,W as InteractiveGraphNone,k as InteractiveGraphPoint,v as InteractiveGraphPolygon,h as InteractiveGraphQuadratic,f as InteractiveGraphRay,p as InteractiveGraphSegment,d as InteractiveGraphSegments,b as InteractiveGraphSinusoid,c as InteractiveGraphWithAriaLabel,I as MafsWithLockedEllipseLabelsFlag,q as MafsWithLockedFigureLabelsAllFlags,i as MafsWithLockedFiguresCurrent,E as MafsWithLockedFunctionLabelsFlag,y as MafsWithLockedLabelsFlag,P as MafsWithLockedLineLabelsFlag,L as MafsWithLockedPointLabelsFlag,w as MafsWithLockedPolygonLabelsFlag,R as MafsWithLockedVectorLabelsFlag,n as WithSaveWarnings,Qa as __namedExportsOrder,Aa as default}; +}`,...(Ke=($e=n.parameters)==null?void 0:$e.docs)==null?void 0:Ke.source}}};const Na=["InteractiveGraphWithAriaLabel","InteractiveGraphSegment","InteractiveGraphSegments","InteractiveGraphLinear","InteractiveGraphLinearSystem","InteractiveGraphRay","InteractiveGraphCircle","InteractiveGraphQuadratic","InteractiveGraphSinusoid","InteractiveGraphPoint","InteractiveGraphPolygon","InteractiveGraphAngle","InteractiveGraphNone","MafsWithLockedFiguresCurrent","MafsWithLockedLabelsFlag","MafsWithLockedPointLabelsFlag","MafsWithLockedLineLabelsFlag","MafsWithLockedVectorLabelsFlag","MafsWithLockedEllipseLabelsFlag","MafsWithLockedPolygonLabelsFlag","MafsWithLockedFunctionLabelsFlag","MafsWithLockedFigureLabelsAllFlags","WithSaveWarnings"];export{S as InteractiveGraphAngle,g as InteractiveGraphCircle,m as InteractiveGraphLinear,u as InteractiveGraphLinearSystem,W as InteractiveGraphNone,k as InteractiveGraphPoint,v as InteractiveGraphPolygon,h as InteractiveGraphQuadratic,f as InteractiveGraphRay,p as InteractiveGraphSegment,d as InteractiveGraphSegments,b as InteractiveGraphSinusoid,c as InteractiveGraphWithAriaLabel,I as MafsWithLockedEllipseLabelsFlag,q as MafsWithLockedFigureLabelsAllFlags,i as MafsWithLockedFiguresCurrent,E as MafsWithLockedFunctionLabelsFlag,y as MafsWithLockedLabelsFlag,P as MafsWithLockedLineLabelsFlag,L as MafsWithLockedPointLabelsFlag,w as MafsWithLockedPolygonLabelsFlag,R as MafsWithLockedVectorLabelsFlag,n as WithSaveWarnings,Na as __namedExportsOrder,Qa as default}; diff --git a/assets/interactive-graph-regression.stories-JcREPvIA.js b/assets/interactive-graph-regression.stories-GWSmyxK_.js similarity index 98% rename from assets/interactive-graph-regression.stories-JcREPvIA.js rename to assets/interactive-graph-regression.stories-GWSmyxK_.js index 594142bf2a..eb5b766f0b 100644 --- a/assets/interactive-graph-regression.stories-JcREPvIA.js +++ b/assets/interactive-graph-regression.stories-GWSmyxK_.js @@ -1,4 +1,4 @@ -import{j as e,F as k}from"./jsx-runtime-FVsy8kgq.js";import{R as os}from"./renderer-vBOYiNCS.js";import{m as ns}from"./strings-OAjNfY6D.js";import{i as t}from"./interactive-graph-question-builder-Mh2lh4tI.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./version-akiLXZts.js";import"./util-XcxTwqb0.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";const $s={title:"Perseus/Widgets/Interactive Graph Visual Regression Tests"},a=s=>e(r,{question:t().withAxisLabels("\\text{Custom $x$ label}","\\text{Custom $y$ label}").build()}),i=s=>e(r,{question:t().withGridStep(2.571,3.123).build()}),o=s=>e(r,{question:t().withTickStep(1.5,1.5).build()}),n=s=>e(r,{question:t().withMarkings("grid").build()}),c=s=>e(r,{question:t().withMarkings("none").build()}),d=s=>e(r,{question:t().withXRange(-2,2).withYRange(-2,2).build()}),u=s=>e(r,{question:t().withXRange(-50,50).withYRange(-50,50).build()}),m=s=>e(k,{children:e(r,{question:t().withXRange(0,20).addLockedLine([1,1],[5,2]).build()})}),p=s=>e(k,{children:e(r,{question:t().withXRange(-1,20).addLockedLine([1,1],[5,2]).build()})}),g=s=>e(k,{children:e(r,{question:t().withXRange(-3,20).addLockedLine([1,1],[5,2]).build()})}),l=s=>e(r,{question:t().withXRange(1,20).build()}),h=s=>e(r,{question:t().withXRange(6,20).build()}),f=s=>e(r,{question:t().withXRange(-20,0).build()}),R=s=>e(r,{question:t().withXRange(-20,-1).build()}),M=s=>e(r,{question:t().withYRange(0,20).build()}),A=s=>e(r,{question:t().withYRange(-1,20).build()}),W=s=>e(r,{question:t().withYRange(1,20).build()}),S=s=>e(k,{children:e(r,{question:t().withYRange(-3,20).addLockedLine([-3,2],[5,16]).build()})}),b=s=>e(r,{question:t().withYRange(-20,0).build()}),L=s=>e(r,{question:t().withYRange(-20,-1).build()}),w=s=>e("div",{className:"framework-perseus perseus-mobile",children:e(r,{question:t().build()})}),q=s=>e(r,{question:t().withSegments({numSegments:3}).build()}),_=s=>e("div",{className:"framework-perseus perseus-mobile",children:e(r,{question:t().withCircle().withXRange(-10,10).withYRange(-5,5).build()})}),x=s=>e(r,{question:t().addLockedLine([-3,-3],[3,3]).withXRange(-5,5).withYRange(-10,10).build()}),y=s=>e(r,{question:t().addLockedPointAt(3,2).addLockedPointAt(-1,1).addLockedPointAt(0,-4).build()}),Q=s=>e(r,{question:t().addLockedLine([-1,1],[2,3]).build()}),N=s=>e(r,{question:t().withProtractor().build()});function r(s){const{question:G}=s;return e(os,{strings:ns,content:G.content,widgets:G.widgets,images:G.images,apiOptions:{flags:{mafs:{segment:!0,circle:!0,linear:!0}}}})}a.__docgenInfo={description:"",methods:[],displayName:"MafsWithCustomAxisLabels"};i.__docgenInfo={description:"",methods:[],displayName:"MafsWithFractionalGridStep"};o.__docgenInfo={description:"",methods:[],displayName:"MafsWithFractionalAxisTicks"};n.__docgenInfo={description:"",methods:[],displayName:"MafsWithGridMarkings"};c.__docgenInfo={description:"",methods:[],displayName:"MafsWithNoMarkings"};d.__docgenInfo={description:"",methods:[],displayName:"MafsWithSmallRange"};u.__docgenInfo={description:"",methods:[],displayName:"MafsWithLargeRange"};m.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisAtLeft"};p.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisNearLeft"};g.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisJustOverLeft"};l.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisOffLeft"};h.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisOffFarLeft"};f.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisAtRight"};R.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisOffRight"};M.__docgenInfo={description:"",methods:[],displayName:"MafsWithXAxisAtBottom"};A.__docgenInfo={description:"",methods:[],displayName:"MafsWithXAxisNearBottom"};W.__docgenInfo={description:"",methods:[],displayName:"MafsWithXAxisOffBottom"};S.__docgenInfo={description:"",methods:[],displayName:"MafsWithXAxisJustOverBottom"};b.__docgenInfo={description:"",methods:[],displayName:"MafsWithXAxisAtTop"};L.__docgenInfo={description:"",methods:[],displayName:"MafsWithXAxisOffTop"};w.__docgenInfo={description:"",methods:[],displayName:"MafsInMobileContainer"};q.__docgenInfo={description:"",methods:[],displayName:"MafsWithMultipleSegments"};_.__docgenInfo={description:"",methods:[],displayName:"MafsCircleGraphWithNonsquareRange"};x.__docgenInfo={description:"",methods:[],displayName:"MafsLineGraphWithNonsquareRange"};y.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedPoints"};Q.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedLine"};N.__docgenInfo={description:"",methods:[],displayName:"MafsWithProtractor"};var v,Y,B;a.parameters={...a.parameters,docs:{...(v=a.parameters)==null?void 0:v.docs,source:{originalSource:'(args: StoryArgs): React.ReactElement => ',...(B=(Y=a.parameters)==null?void 0:Y.docs)==null?void 0:B.source}}};var X,I,E;i.parameters={...i.parameters,docs:{...(X=i.parameters)==null?void 0:X.docs,source:{originalSource:"(args: StoryArgs): React.ReactElement => ",...(E=(I=i.parameters)==null?void 0:I.docs)==null?void 0:E.source}}};var O,C,P;o.parameters={...o.parameters,docs:{...(O=o.parameters)==null?void 0:O.docs,source:{originalSource:"(args: StoryArgs): React.ReactElement => ",...(P=(C=o.parameters)==null?void 0:C.docs)==null?void 0:P.source}}};var T,F,$;n.parameters={...n.parameters,docs:{...(T=n.parameters)==null?void 0:T.docs,source:{originalSource:'(args: StoryArgs): React.ReactElement => ',...($=(F=n.parameters)==null?void 0:F.docs)==null?void 0:$.source}}};var J,j,V;c.parameters={...c.parameters,docs:{...(J=c.parameters)==null?void 0:J.docs,source:{originalSource:'(args: StoryArgs): React.ReactElement => ',...(V=(j=c.parameters)==null?void 0:j.docs)==null?void 0:V.source}}};var z,D,H;d.parameters={...d.parameters,docs:{...(z=d.parameters)==null?void 0:z.docs,source:{originalSource:"(args: StoryArgs): React.ReactElement => ",...(H=(D=d.parameters)==null?void 0:D.docs)==null?void 0:H.source}}};var K,U,Z;u.parameters={...u.parameters,docs:{...(K=u.parameters)==null?void 0:K.docs,source:{originalSource:"(args: StoryArgs): React.ReactElement => ",...(Z=(U=u.parameters)==null?void 0:U.docs)==null?void 0:Z.source}}};var ee,se,te;m.parameters={...m.parameters,docs:{...(ee=m.parameters)==null?void 0:ee.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => <> +import{j as e,F as k}from"./jsx-runtime-FVsy8kgq.js";import{R as os}from"./renderer-hPmI_Chp.js";import{m as ns}from"./strings-OAjNfY6D.js";import{i as t}from"./interactive-graph-question-builder-Mh2lh4tI.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./version-akiLXZts.js";import"./util-YrNvlCNO.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";const $s={title:"Perseus/Widgets/Interactive Graph Visual Regression Tests"},a=s=>e(r,{question:t().withAxisLabels("\\text{Custom $x$ label}","\\text{Custom $y$ label}").build()}),i=s=>e(r,{question:t().withGridStep(2.571,3.123).build()}),o=s=>e(r,{question:t().withTickStep(1.5,1.5).build()}),n=s=>e(r,{question:t().withMarkings("grid").build()}),c=s=>e(r,{question:t().withMarkings("none").build()}),d=s=>e(r,{question:t().withXRange(-2,2).withYRange(-2,2).build()}),u=s=>e(r,{question:t().withXRange(-50,50).withYRange(-50,50).build()}),m=s=>e(k,{children:e(r,{question:t().withXRange(0,20).addLockedLine([1,1],[5,2]).build()})}),p=s=>e(k,{children:e(r,{question:t().withXRange(-1,20).addLockedLine([1,1],[5,2]).build()})}),g=s=>e(k,{children:e(r,{question:t().withXRange(-3,20).addLockedLine([1,1],[5,2]).build()})}),l=s=>e(r,{question:t().withXRange(1,20).build()}),h=s=>e(r,{question:t().withXRange(6,20).build()}),f=s=>e(r,{question:t().withXRange(-20,0).build()}),R=s=>e(r,{question:t().withXRange(-20,-1).build()}),M=s=>e(r,{question:t().withYRange(0,20).build()}),A=s=>e(r,{question:t().withYRange(-1,20).build()}),W=s=>e(r,{question:t().withYRange(1,20).build()}),S=s=>e(k,{children:e(r,{question:t().withYRange(-3,20).addLockedLine([-3,2],[5,16]).build()})}),b=s=>e(r,{question:t().withYRange(-20,0).build()}),L=s=>e(r,{question:t().withYRange(-20,-1).build()}),w=s=>e("div",{className:"framework-perseus perseus-mobile",children:e(r,{question:t().build()})}),q=s=>e(r,{question:t().withSegments({numSegments:3}).build()}),_=s=>e("div",{className:"framework-perseus perseus-mobile",children:e(r,{question:t().withCircle().withXRange(-10,10).withYRange(-5,5).build()})}),x=s=>e(r,{question:t().addLockedLine([-3,-3],[3,3]).withXRange(-5,5).withYRange(-10,10).build()}),y=s=>e(r,{question:t().addLockedPointAt(3,2).addLockedPointAt(-1,1).addLockedPointAt(0,-4).build()}),Q=s=>e(r,{question:t().addLockedLine([-1,1],[2,3]).build()}),N=s=>e(r,{question:t().withProtractor().build()});function r(s){const{question:G}=s;return e(os,{strings:ns,content:G.content,widgets:G.widgets,images:G.images,apiOptions:{flags:{mafs:{segment:!0,circle:!0,linear:!0}}}})}a.__docgenInfo={description:"",methods:[],displayName:"MafsWithCustomAxisLabels"};i.__docgenInfo={description:"",methods:[],displayName:"MafsWithFractionalGridStep"};o.__docgenInfo={description:"",methods:[],displayName:"MafsWithFractionalAxisTicks"};n.__docgenInfo={description:"",methods:[],displayName:"MafsWithGridMarkings"};c.__docgenInfo={description:"",methods:[],displayName:"MafsWithNoMarkings"};d.__docgenInfo={description:"",methods:[],displayName:"MafsWithSmallRange"};u.__docgenInfo={description:"",methods:[],displayName:"MafsWithLargeRange"};m.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisAtLeft"};p.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisNearLeft"};g.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisJustOverLeft"};l.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisOffLeft"};h.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisOffFarLeft"};f.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisAtRight"};R.__docgenInfo={description:"",methods:[],displayName:"MafsWithYAxisOffRight"};M.__docgenInfo={description:"",methods:[],displayName:"MafsWithXAxisAtBottom"};A.__docgenInfo={description:"",methods:[],displayName:"MafsWithXAxisNearBottom"};W.__docgenInfo={description:"",methods:[],displayName:"MafsWithXAxisOffBottom"};S.__docgenInfo={description:"",methods:[],displayName:"MafsWithXAxisJustOverBottom"};b.__docgenInfo={description:"",methods:[],displayName:"MafsWithXAxisAtTop"};L.__docgenInfo={description:"",methods:[],displayName:"MafsWithXAxisOffTop"};w.__docgenInfo={description:"",methods:[],displayName:"MafsInMobileContainer"};q.__docgenInfo={description:"",methods:[],displayName:"MafsWithMultipleSegments"};_.__docgenInfo={description:"",methods:[],displayName:"MafsCircleGraphWithNonsquareRange"};x.__docgenInfo={description:"",methods:[],displayName:"MafsLineGraphWithNonsquareRange"};y.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedPoints"};Q.__docgenInfo={description:"",methods:[],displayName:"MafsWithLockedLine"};N.__docgenInfo={description:"",methods:[],displayName:"MafsWithProtractor"};var v,Y,B;a.parameters={...a.parameters,docs:{...(v=a.parameters)==null?void 0:v.docs,source:{originalSource:'(args: StoryArgs): React.ReactElement => ',...(B=(Y=a.parameters)==null?void 0:Y.docs)==null?void 0:B.source}}};var X,I,E;i.parameters={...i.parameters,docs:{...(X=i.parameters)==null?void 0:X.docs,source:{originalSource:"(args: StoryArgs): React.ReactElement => ",...(E=(I=i.parameters)==null?void 0:I.docs)==null?void 0:E.source}}};var O,C,P;o.parameters={...o.parameters,docs:{...(O=o.parameters)==null?void 0:O.docs,source:{originalSource:"(args: StoryArgs): React.ReactElement => ",...(P=(C=o.parameters)==null?void 0:C.docs)==null?void 0:P.source}}};var T,F,$;n.parameters={...n.parameters,docs:{...(T=n.parameters)==null?void 0:T.docs,source:{originalSource:'(args: StoryArgs): React.ReactElement => ',...($=(F=n.parameters)==null?void 0:F.docs)==null?void 0:$.source}}};var J,j,V;c.parameters={...c.parameters,docs:{...(J=c.parameters)==null?void 0:J.docs,source:{originalSource:'(args: StoryArgs): React.ReactElement => ',...(V=(j=c.parameters)==null?void 0:j.docs)==null?void 0:V.source}}};var z,D,H;d.parameters={...d.parameters,docs:{...(z=d.parameters)==null?void 0:z.docs,source:{originalSource:"(args: StoryArgs): React.ReactElement => ",...(H=(D=d.parameters)==null?void 0:D.docs)==null?void 0:H.source}}};var K,U,Z;u.parameters={...u.parameters,docs:{...(K=u.parameters)==null?void 0:K.docs,source:{originalSource:"(args: StoryArgs): React.ReactElement => ",...(Z=(U=u.parameters)==null?void 0:U.docs)==null?void 0:Z.source}}};var ee,se,te;m.parameters={...m.parameters,docs:{...(ee=m.parameters)==null?void 0:ee.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => <> `,...(te=(se=m.parameters)==null?void 0:se.docs)==null?void 0:te.source}}};var re,ae,ie;p.parameters={...p.parameters,docs:{...(re=p.parameters)==null?void 0:re.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => <> diff --git a/assets/interactive-graph-settings-aG03uuTu.js b/assets/interactive-graph-settings-bMgmMCqq.js similarity index 97% rename from assets/interactive-graph-settings-aG03uuTu.js rename to assets/interactive-graph-settings-bMgmMCqq.js index b7b4b2961a..dcf32a87e9 100644 --- a/assets/interactive-graph-settings-aG03uuTu.js +++ b/assets/interactive-graph-settings-bMgmMCqq.js @@ -1,4 +1,4 @@ -import{j as a,a as d,F as N}from"./jsx-runtime-FVsy8kgq.js";import{c as C}from"./article-renderer-6f7Dak4j.js";import{_ as l}from"./jquery-yG1GhClm.js";import{U as k}from"./util-XcxTwqb0.js";import{B as E}from"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as z}from"./components-GHvuFaIn.js";import{i as P}from"./constants-I_nlPaPx.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{V as v}from"./index-6h5t6F0w.js";import{C as B}from"./index-QCAhLhLD.js";import{s as m,c as q}from"./index-deFLJwr4.js";import{l as R}from"./index-awljIyHI.js";import{r as w}from"./index-TT1qJ6UJ.js";import{H}from"./heading-8aCiuWUg.js";import{b as G}from"./index-h_CiYGGb.js";const h=x=>{const{children:n,label:e,labelSide:t="left",style:s}=x;return a("label",{className:R.css(S.label),children:d(v,{style:[S.row,s],children:[t==="start"||a(G,{style:S.spaceEnd,children:e}),n,t==="end"&&a(G,{style:S.spaceStart,children:e})]})})},S=R.StyleSheet.create({label:{width:"fit-content"},row:{flexDirection:"row",marginTop:m.xSmall_8,alignItems:"center",width:"fit-content"},spaceStart:{marginInlineStart:m.xSmall_8},spaceEnd:{marginInlineEnd:m.xSmall_8}});h.__docgenInfo={description:"",methods:[],displayName:"LabeledRow",props:{id:{required:!1,tsType:{name:"string"},description:""},label:{required:!0,tsType:{name:"string"},description:""},labelSide:{required:!1,tsType:{name:"union",raw:'"start" | "end"',elements:[{name:"literal",value:'"start"'},{name:"literal",value:'"end"'}]},description:""},style:{required:!1,tsType:{name:"StyleType"},description:""},children:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""}}};const{ButtonGroup:V,InfoTip:_,RangeInput:b}=z,U={url:null,width:0,height:0};function A(x,n){return Math.floor((x[1]-x[0])/n)}const y=class y extends w.Component{constructor(n){super(n),this._isMounted=!1,this.bgUrlRef=w.createRef(),this.labelXRef=w.createRef(),this.labelYRef=w.createRef(),this.change=(...e)=>C.apply(this,e),this.changeBackgroundUrl=e=>{var i;if(e.type==="keypress"&&e.key!=="Enter")return;const t=(p,o,r)=>{const u={...this.props.backgroundImage};u.url=p,u.width=o,u.height=r,this.setState({backgroundImage:u},this.changeGraph)},s=(i=this.bgUrlRef.current)==null?void 0:i.value;s?k.getImageSize(s,(p,o)=>{this._isMounted&&t(s,p,o)}):t(null,0,0)},this.renderLabelChoices=e=>e.map(t=>a("option",{value:t[1],children:t[0]},t[1])),this.validRange=e=>l.every(e,function(s){return l.isFinite(s)})?e[0]>=e[1]?"Range must have a higher number on the right":!0:"Range must be a valid number",this.validateStepValue=e=>{const{step:t,range:s,name:i,minTicks:p,maxTicks:o}=e,r=A(s,t);return ro?i+" is too small, there can be at most "+o+" ticks.":!0},this.validSnapStep=(e,t)=>this.validateStepValue({step:e,range:t,name:"Snap step",minTicks:5,maxTicks:60}),this.validGridStep=(e,t)=>this.validateStepValue({step:e,range:t,name:"Grid step",minTicks:3,maxTicks:60}),this.validStep=(e,t)=>this.validateStepValue({step:e,range:t,name:"Step",minTicks:3,maxTicks:20}),this.validBackgroundImageSize=e=>e.url?e.width<=450&&e.height<=450?!0:"Image must be smaller than 450px x 450px.":!0,this.validateGraphSettings=(e,t,s,i,p)=>{const o=this;let r;if(!l.every(e,function(g){return r=o.validRange(g),r===!0})||!l.every(t,function(g,c){return r=o.validStep(g,e[c]),r===!0})||!l.every(s,function(g,c){return r=o.validGridStep(g,e[c]),r===!0})||!l.every(i,function(g,c){return r=o.validSnapStep(g,e[c]),r===!0}))return r;const I=this.validBackgroundImageSize(p);return I!==!0?(r=I,r):!0},this.changeLabel=(e,t)=>{const s=t.target.value,i=this.state.labelsTextbox.slice();i[e]=s,this.setState({labelsTextbox:i},this.changeGraph)},this.changeRange=(e,t)=>{const s=this.state.rangeTextbox.slice();s[e]=t;const i=this.state.stepTextbox.slice(),p=this.state.gridStepTextbox.slice(),o=this.state.snapStepTextbox.slice(),r=k.scaleFromExtent(s[e],this.props.box[e]);if(this.validRange(s[e])===!0){i[e]=k.tickStepFromExtent(s[e],this.props.box[e]);const u=k.gridStepFromTickStep(i[e],r);u&&(p[e]=u),o[e]=p[e]/2}this.setState({stepTextbox:i,gridStepTextbox:p,snapStepTextbox:o,rangeTextbox:s},this.changeGraph)},this.changeStep=e=>{this.setState({stepTextbox:e},this.changeGraph)},this.changeSnapStep=e=>{this.setState({snapStepTextbox:e},this.changeGraph)},this.changeGridStep=e=>{this.setState({gridStepTextbox:e,snapStepTextbox:l.map(e,function(t){return t/2})},this.changeGraph)},this.changeGraph=()=>{const e=this.state.labelsTextbox,t=l.map(this.state.rangeTextbox,function(u){return l.map(u,Number)}),s=l.map(this.state.stepTextbox,Number),i=this.state.gridStepTextbox,p=this.state.snapStepTextbox,o=this.state.backgroundImage,r=this.validateGraphSettings(t,s,i,p,o);r===!0?this.change({valid:!0,labels:e,range:t,step:s,gridStep:i,snapStep:p,backgroundImage:o}):this.change({valid:r})},this.state={isExpanded:!0,...y.stateFromProps(n)}}static stateFromProps(n){return{labelsTextbox:n.labels,gridStepTextbox:n.gridStep,snapStepTextbox:n.snapStep,stepTextbox:n.step,rangeTextbox:n.range,backgroundImage:{...n.backgroundImage}}}componentDidMount(){this._isMounted=!0,this.changeGraph=l.debounce(this.changeGraph,300)}UNSAFE_componentWillReceiveProps(n){(!l.isEqual(this.props.labels,n.labels)||!l.isEqual(this.props.gridStep,n.gridStep)||!l.isEqual(this.props.snapStep,n.snapStep)||!l.isEqual(this.props.step,n.step)||!l.isEqual(this.props.range,n.range)||!l.isEqual(this.props.backgroundImage,n.backgroundImage))&&this.setState(y.stateFromProps(n))}componentWillUnmount(){this._isMounted=!1}render(){return d(N,{children:[a(H,{title:"Common Graph Settings",isOpen:this.state.isExpanded,isCollapsible:!0,onToggle:()=>this.setState({isExpanded:!this.state.isExpanded})}),this.state.isExpanded&&d(v,{children:[d("div",{className:"graph-settings",children:[d("div",{className:"perseus-widget-row",children:[a("div",{className:"perseus-widget-left-col",children:a(h,{label:"x Label",children:a("input",{type:"text",className:"graph-settings-axis-label",ref:this.labelXRef,onChange:n=>this.changeLabel(0,n),value:this.state.labelsTextbox[0]||""})})}),a("div",{className:"perseus-widget-right-col",children:a(h,{label:"y Label",children:a("input",{type:"text",className:"graph-settings-axis-label",ref:this.labelYRef,onChange:n=>this.changeLabel(1,n),value:this.state.labelsTextbox[1]||""})})})]}),d("div",{className:"perseus-widget-row",children:[a("div",{className:"perseus-widget-left-col",children:a(h,{label:"x Range",children:a(b,{value:this.state.rangeTextbox[0],onChange:n=>this.changeRange(0,n)})})}),a("div",{className:"perseus-widget-right-col",children:a(h,{label:"y Range",children:a(b,{value:this.state.rangeTextbox[1],onChange:n=>this.changeRange(1,n)})})})]}),d("div",{className:"perseus-widget-row",children:[a("div",{className:"perseus-widget-left-col",children:a(h,{label:"Tick Step",children:a(b,{value:this.state.stepTextbox,onChange:this.changeStep})})}),a("div",{className:"perseus-widget-right-col",children:a(h,{label:"Grid Step",children:a(b,{value:this.state.gridStepTextbox,onChange:this.changeGridStep})})})]}),a("div",{className:"perseus-widget-row",children:a("div",{className:"perseus-widget-left-col",children:a(h,{label:"Snap Step",children:a(b,{value:this.state.snapStepTextbox,onChange:this.changeSnapStep})})})}),a("div",{className:"perseus-widget-row",children:a(h,{label:"Markings:",children:a(V,{value:this.props.markings,allowEmpty:!1,buttons:[{value:"graph",content:"Graph"},{value:"grid",content:"Grid"},{value:"none",content:"None"}],onChange:this.change("markings")})})}),a("div",{className:"perseus-widget-left-col",children:a(B,{label:"Show tooltips",checked:this.props.showTooltips,onChange:n=>{this.change({showTooltips:n})}})})]}),d(h,{label:"Background image URL:",style:f.resetSpaceTop,children:[a("input",{type:"text",className:R.css(f.backgroundUrlInput),ref:this.bgUrlRef,value:this.state.backgroundImage.url||"",onChange:n=>{const e={...this.props.backgroundImage};e.url=n.target.value,this.setState({backgroundImage:e})},onKeyPress:this.changeBackgroundUrl,onBlur:this.changeBackgroundUrl}),a(_,{children:a("p",{children:'Create an image in graphie, or use the "Add image" function to create a background.'})})]}),d(v,{style:f.protractorSection,children:[a(v,{style:f.checkboxRow,children:a(B,{label:"Show protractor",checked:this.props.showProtractor,onChange:n=>{this.change({showProtractor:n})},style:f.resetSpaceTop})}),this.props.showProtractor&&a(E,{layout:"floating",text:"The protractor is not accessible. Please consider an alternate approach.",kind:"warning"})]})]})]})}};y.defaultProps={box:[P.defaultBoxSizeSmall,P.defaultBoxSizeSmall],labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],gridStep:[1,1],snapStep:[1,1],valid:!0,backgroundImage:U,markings:"graph",showProtractor:!1,showTooltips:!1};let T=y;const f=R.StyleSheet.create({resetSpaceTop:{marginTop:0},backgroundUrlInput:{border:`1px solid ${q.offBlack32}`,borderRadius:m.xxxSmall_4,padding:m.xxxSmall_4},checkboxRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:m.xSmall_8},protractorSection:{marginTop:m.xSmall_8,borderTop:`1px solid ${q.offBlack16}`,paddingTop:m.xSmall_8,paddingBottom:m.xSmall_8,borderBottom:`1px solid ${q.offBlack16}`}}),ge=T;T.__docgenInfo={description:"",methods:[{name:"stateFromProps",docblock:null,modifiers:["static"],params:[{name:"props",optional:!1,type:{name:"signature",type:"object",raw:`{ +import{j as a,a as d,F as N}from"./jsx-runtime-FVsy8kgq.js";import{c as C}from"./article-renderer-TMdCDA85.js";import{_ as l}from"./jquery-yG1GhClm.js";import{U as k}from"./util-YrNvlCNO.js";import{B as E}from"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as z}from"./components-h6HHhmoA.js";import{i as P}from"./constants-I_nlPaPx.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{V as v}from"./index-6h5t6F0w.js";import{C as B}from"./index-QCAhLhLD.js";import{s as m,c as q}from"./index-deFLJwr4.js";import{l as R}from"./index-awljIyHI.js";import{r as w}from"./index-TT1qJ6UJ.js";import{H}from"./heading-8aCiuWUg.js";import{b as G}from"./index-h_CiYGGb.js";const h=x=>{const{children:n,label:e,labelSide:t="left",style:s}=x;return a("label",{className:R.css(S.label),children:d(v,{style:[S.row,s],children:[t==="start"||a(G,{style:S.spaceEnd,children:e}),n,t==="end"&&a(G,{style:S.spaceStart,children:e})]})})},S=R.StyleSheet.create({label:{width:"fit-content"},row:{flexDirection:"row",marginTop:m.xSmall_8,alignItems:"center",width:"fit-content"},spaceStart:{marginInlineStart:m.xSmall_8},spaceEnd:{marginInlineEnd:m.xSmall_8}});h.__docgenInfo={description:"",methods:[],displayName:"LabeledRow",props:{id:{required:!1,tsType:{name:"string"},description:""},label:{required:!0,tsType:{name:"string"},description:""},labelSide:{required:!1,tsType:{name:"union",raw:'"start" | "end"',elements:[{name:"literal",value:'"start"'},{name:"literal",value:'"end"'}]},description:""},style:{required:!1,tsType:{name:"StyleType"},description:""},children:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""}}};const{ButtonGroup:V,InfoTip:_,RangeInput:b}=z,U={url:null,width:0,height:0};function A(x,n){return Math.floor((x[1]-x[0])/n)}const y=class y extends w.Component{constructor(n){super(n),this._isMounted=!1,this.bgUrlRef=w.createRef(),this.labelXRef=w.createRef(),this.labelYRef=w.createRef(),this.change=(...e)=>C.apply(this,e),this.changeBackgroundUrl=e=>{var i;if(e.type==="keypress"&&e.key!=="Enter")return;const t=(p,o,r)=>{const u={...this.props.backgroundImage};u.url=p,u.width=o,u.height=r,this.setState({backgroundImage:u},this.changeGraph)},s=(i=this.bgUrlRef.current)==null?void 0:i.value;s?k.getImageSize(s,(p,o)=>{this._isMounted&&t(s,p,o)}):t(null,0,0)},this.renderLabelChoices=e=>e.map(t=>a("option",{value:t[1],children:t[0]},t[1])),this.validRange=e=>l.every(e,function(s){return l.isFinite(s)})?e[0]>=e[1]?"Range must have a higher number on the right":!0:"Range must be a valid number",this.validateStepValue=e=>{const{step:t,range:s,name:i,minTicks:p,maxTicks:o}=e,r=A(s,t);return ro?i+" is too small, there can be at most "+o+" ticks.":!0},this.validSnapStep=(e,t)=>this.validateStepValue({step:e,range:t,name:"Snap step",minTicks:5,maxTicks:60}),this.validGridStep=(e,t)=>this.validateStepValue({step:e,range:t,name:"Grid step",minTicks:3,maxTicks:60}),this.validStep=(e,t)=>this.validateStepValue({step:e,range:t,name:"Step",minTicks:3,maxTicks:20}),this.validBackgroundImageSize=e=>e.url?e.width<=450&&e.height<=450?!0:"Image must be smaller than 450px x 450px.":!0,this.validateGraphSettings=(e,t,s,i,p)=>{const o=this;let r;if(!l.every(e,function(g){return r=o.validRange(g),r===!0})||!l.every(t,function(g,c){return r=o.validStep(g,e[c]),r===!0})||!l.every(s,function(g,c){return r=o.validGridStep(g,e[c]),r===!0})||!l.every(i,function(g,c){return r=o.validSnapStep(g,e[c]),r===!0}))return r;const I=this.validBackgroundImageSize(p);return I!==!0?(r=I,r):!0},this.changeLabel=(e,t)=>{const s=t.target.value,i=this.state.labelsTextbox.slice();i[e]=s,this.setState({labelsTextbox:i},this.changeGraph)},this.changeRange=(e,t)=>{const s=this.state.rangeTextbox.slice();s[e]=t;const i=this.state.stepTextbox.slice(),p=this.state.gridStepTextbox.slice(),o=this.state.snapStepTextbox.slice(),r=k.scaleFromExtent(s[e],this.props.box[e]);if(this.validRange(s[e])===!0){i[e]=k.tickStepFromExtent(s[e],this.props.box[e]);const u=k.gridStepFromTickStep(i[e],r);u&&(p[e]=u),o[e]=p[e]/2}this.setState({stepTextbox:i,gridStepTextbox:p,snapStepTextbox:o,rangeTextbox:s},this.changeGraph)},this.changeStep=e=>{this.setState({stepTextbox:e},this.changeGraph)},this.changeSnapStep=e=>{this.setState({snapStepTextbox:e},this.changeGraph)},this.changeGridStep=e=>{this.setState({gridStepTextbox:e,snapStepTextbox:l.map(e,function(t){return t/2})},this.changeGraph)},this.changeGraph=()=>{const e=this.state.labelsTextbox,t=l.map(this.state.rangeTextbox,function(u){return l.map(u,Number)}),s=l.map(this.state.stepTextbox,Number),i=this.state.gridStepTextbox,p=this.state.snapStepTextbox,o=this.state.backgroundImage,r=this.validateGraphSettings(t,s,i,p,o);r===!0?this.change({valid:!0,labels:e,range:t,step:s,gridStep:i,snapStep:p,backgroundImage:o}):this.change({valid:r})},this.state={isExpanded:!0,...y.stateFromProps(n)}}static stateFromProps(n){return{labelsTextbox:n.labels,gridStepTextbox:n.gridStep,snapStepTextbox:n.snapStep,stepTextbox:n.step,rangeTextbox:n.range,backgroundImage:{...n.backgroundImage}}}componentDidMount(){this._isMounted=!0,this.changeGraph=l.debounce(this.changeGraph,300)}UNSAFE_componentWillReceiveProps(n){(!l.isEqual(this.props.labels,n.labels)||!l.isEqual(this.props.gridStep,n.gridStep)||!l.isEqual(this.props.snapStep,n.snapStep)||!l.isEqual(this.props.step,n.step)||!l.isEqual(this.props.range,n.range)||!l.isEqual(this.props.backgroundImage,n.backgroundImage))&&this.setState(y.stateFromProps(n))}componentWillUnmount(){this._isMounted=!1}render(){return d(N,{children:[a(H,{title:"Common Graph Settings",isOpen:this.state.isExpanded,isCollapsible:!0,onToggle:()=>this.setState({isExpanded:!this.state.isExpanded})}),this.state.isExpanded&&d(v,{children:[d("div",{className:"graph-settings",children:[d("div",{className:"perseus-widget-row",children:[a("div",{className:"perseus-widget-left-col",children:a(h,{label:"x Label",children:a("input",{type:"text",className:"graph-settings-axis-label",ref:this.labelXRef,onChange:n=>this.changeLabel(0,n),value:this.state.labelsTextbox[0]||""})})}),a("div",{className:"perseus-widget-right-col",children:a(h,{label:"y Label",children:a("input",{type:"text",className:"graph-settings-axis-label",ref:this.labelYRef,onChange:n=>this.changeLabel(1,n),value:this.state.labelsTextbox[1]||""})})})]}),d("div",{className:"perseus-widget-row",children:[a("div",{className:"perseus-widget-left-col",children:a(h,{label:"x Range",children:a(b,{value:this.state.rangeTextbox[0],onChange:n=>this.changeRange(0,n)})})}),a("div",{className:"perseus-widget-right-col",children:a(h,{label:"y Range",children:a(b,{value:this.state.rangeTextbox[1],onChange:n=>this.changeRange(1,n)})})})]}),d("div",{className:"perseus-widget-row",children:[a("div",{className:"perseus-widget-left-col",children:a(h,{label:"Tick Step",children:a(b,{value:this.state.stepTextbox,onChange:this.changeStep})})}),a("div",{className:"perseus-widget-right-col",children:a(h,{label:"Grid Step",children:a(b,{value:this.state.gridStepTextbox,onChange:this.changeGridStep})})})]}),a("div",{className:"perseus-widget-row",children:a("div",{className:"perseus-widget-left-col",children:a(h,{label:"Snap Step",children:a(b,{value:this.state.snapStepTextbox,onChange:this.changeSnapStep})})})}),a("div",{className:"perseus-widget-row",children:a(h,{label:"Markings:",children:a(V,{value:this.props.markings,allowEmpty:!1,buttons:[{value:"graph",content:"Graph"},{value:"grid",content:"Grid"},{value:"none",content:"None"}],onChange:this.change("markings")})})}),a("div",{className:"perseus-widget-left-col",children:a(B,{label:"Show tooltips",checked:this.props.showTooltips,onChange:n=>{this.change({showTooltips:n})}})})]}),d(h,{label:"Background image URL:",style:f.resetSpaceTop,children:[a("input",{type:"text",className:R.css(f.backgroundUrlInput),ref:this.bgUrlRef,value:this.state.backgroundImage.url||"",onChange:n=>{const e={...this.props.backgroundImage};e.url=n.target.value,this.setState({backgroundImage:e})},onKeyPress:this.changeBackgroundUrl,onBlur:this.changeBackgroundUrl}),a(_,{children:a("p",{children:'Create an image in graphie, or use the "Add image" function to create a background.'})})]}),d(v,{style:f.protractorSection,children:[a(v,{style:f.checkboxRow,children:a(B,{label:"Show protractor",checked:this.props.showProtractor,onChange:n=>{this.change({showProtractor:n})},style:f.resetSpaceTop})}),this.props.showProtractor&&a(E,{layout:"floating",text:"The protractor is not accessible. Please consider an alternate approach.",kind:"warning"})]})]})]})}};y.defaultProps={box:[P.defaultBoxSizeSmall,P.defaultBoxSizeSmall],labels:["x","y"],range:[[-10,10],[-10,10]],step:[1,1],gridStep:[1,1],snapStep:[1,1],valid:!0,backgroundImage:U,markings:"graph",showProtractor:!1,showTooltips:!1};let T=y;const f=R.StyleSheet.create({resetSpaceTop:{marginTop:0},backgroundUrlInput:{border:`1px solid ${q.offBlack32}`,borderRadius:m.xxxSmall_4,padding:m.xxxSmall_4},checkboxRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:m.xSmall_8},protractorSection:{marginTop:m.xSmall_8,borderTop:`1px solid ${q.offBlack16}`,paddingTop:m.xSmall_8,paddingBottom:m.xSmall_8,borderBottom:`1px solid ${q.offBlack16}`}}),ge=T;T.__docgenInfo={description:"",methods:[{name:"stateFromProps",docblock:null,modifiers:["static"],params:[{name:"props",optional:!1,type:{name:"signature",type:"object",raw:`{ /** * The size of the graph area in pixels. */ diff --git a/assets/interactive-graph-settings.stories-4qH2dugu.js b/assets/interactive-graph-settings.stories-gK43P-JE.js similarity index 76% rename from assets/interactive-graph-settings.stories-4qH2dugu.js rename to assets/interactive-graph-settings.stories-gK43P-JE.js index 1caaba3ee8..ef5d0c7b99 100644 --- a/assets/interactive-graph-settings.stories-4qH2dugu.js +++ b/assets/interactive-graph-settings.stories-gK43P-JE.js @@ -1,4 +1,4 @@ -import{j as u}from"./jsx-runtime-FVsy8kgq.js";import{r as x}from"./index-TT1qJ6UJ.js";import{I as o}from"./interactive-graph-settings-aG03uuTu.js";import{I}from"./interactive-graph-settings.argtypes-6T40gg9D.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./heading-8aCiuWUg.js";import"./index-tFzzSRL2.js";import"./toggleable-caret-lFiCktzo.js";const ut={title:"PerseusEditor/Components/Interactive Graph Settings",component:o,argTypes:I},r=p=>u(o,{...p});r.args={box:[288,288],gridStep:[1,1],labels:["x","y"],markings:"graph",range:[[-10,10],[-10,10]],rulerLabel:"",rulerTicks:10,showProtractor:!1,showRuler:!1,showTooltips:!1,snapStep:[1,1],step:[1,1]};const t={render:function(){const l=(f,S)=>({...f,...S}),[h,g]=x.useReducer(l,{});return u(o,{...h,onChange:g})}};r.__docgenInfo={description:"",methods:[],displayName:"Default"};var i,e,m;r.parameters={...r.parameters,docs:{...(i=r.parameters)==null?void 0:i.docs,source:{originalSource:`(args): React.ReactElement => { +import{j as u}from"./jsx-runtime-FVsy8kgq.js";import{r as x}from"./index-TT1qJ6UJ.js";import{I as o}from"./interactive-graph-settings-bMgmMCqq.js";import{I}from"./interactive-graph-settings.argtypes-6T40gg9D.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./heading-8aCiuWUg.js";import"./index-tFzzSRL2.js";import"./toggleable-caret-lFiCktzo.js";const ut={title:"PerseusEditor/Components/Interactive Graph Settings",component:o,argTypes:I},r=p=>u(o,{...p});r.args={box:[288,288],gridStep:[1,1],labels:["x","y"],markings:"graph",range:[[-10,10],[-10,10]],rulerLabel:"",rulerTicks:10,showProtractor:!1,showRuler:!1,showTooltips:!1,snapStep:[1,1],step:[1,1]};const t={render:function(){const l=(f,S)=>({...f,...S}),[h,g]=x.useReducer(l,{});return u(o,{...h,onChange:g})}};r.__docgenInfo={description:"",methods:[],displayName:"Default"};var i,e,m;r.parameters={...r.parameters,docs:{...(i=r.parameters)==null?void 0:i.docs,source:{originalSource:`(args): React.ReactElement => { return ; }`,...(m=(e=r.parameters)==null?void 0:e.docs)==null?void 0:m.source}}};var s,a,n,c,d;t.parameters={...t.parameters,docs:{...(s=t.parameters)==null?void 0:s.docs,source:{originalSource:`{ render: function Render() { diff --git a/assets/interactive-graph.stories-fGiKvBZS.js b/assets/interactive-graph.stories-48PUZi0-.js similarity index 95% rename from assets/interactive-graph.stories-fGiKvBZS.js rename to assets/interactive-graph.stories-48PUZi0-.js index e0b5bee916..ccb41489eb 100644 --- a/assets/interactive-graph.stories-fGiKvBZS.js +++ b/assets/interactive-graph.stories-48PUZi0-.js @@ -1,4 +1,4 @@ -import{j as o,a as y,F as X}from"./jsx-runtime-FVsy8kgq.js";import{B as Kt}from"./phet-simulation-fZpYIOCA.js";import{B as ne}from"./choice-E4eyMygy.js";import{b as pe,a as Dt,_ as k,V as b}from"./index-6h5t6F0w.js";import{r as c}from"./index-TT1qJ6UJ.js";import{l as Z}from"./index-awljIyHI.js";import{L as Ht,c as Jt}from"./react-router-dom-W_e8xVUu.js";import{i as Yt}from"./index-o3wWn3Y5.js";import{P as he}from"./index-xuPsLuPk.js";import{m as Xt,c as Zt,u as eo,T as to}from"./index-rfN0X25E.js";import{c as n,b as L,s as g}from"./index-deFLJwr4.js";import{S as oe}from"./index-qUyqkRvh.js";import{L as oo}from"./video-transcript-link-WVgIZGhp.js";import{a as ro,S as no}from"./index-CkAxGj88.js";import{b as so,L as io,H as ao}from"./index-h_CiYGGb.js";import{T as fe}from"./index-K9BSJPWl.js";import{w as co}from"./index-J2t_5nK1.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import{a as lo}from"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import{R as uo}from"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import{S as po}from"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{m as mo}from"./strings-OAjNfY6D.js";import{R as d}from"./renderer-with-debug-ui-fbym8U_I.js";import{j as Mt,k as go,m as ho,n as fo,o as yo,t as me,u as bo,v as So,w as vo,x as ko,y as Ro,z as Io,A as wo,B as xo,C as Lo,D as qo,E as _o,F as Co,G as Wo,H as Ao}from"./interactive-graph.testdata-QKEIR03d.js";import"./index-ngddCaVG.js";import"./arrow-square-out-bold-090vdhrx.js";import"./constants-I_nlPaPx.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-YCTzZMik.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./media-queries-MaBBbpNq.js";import"./choice-icon-LAaL9HdM.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./index-tvtfaFq4.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./shared-3pf9YZIg.js";import"./answer-choices-uB4giKvU.js";import"./minus-bold-ONmDo3Ve.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-tmJoP6pY.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./bundle.esm-7jAAHVxW.js";import"./side-by-side-kpK-8vW0.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";import"./interactive-graph-question-builder-Mh2lh4tI.js";const Eo=e=>{switch(e){case"xsmall":return"small";case"small":return"medium";case"medium":return"medium";case"large":return"medium"}},Oo=e=>({xsmall:24,small:32,medium:40,large:48})[e],se={color:{bg:{hovered:"transparent",active:"transparent",disabled:"transparent",filled:{action:{hovered:"transparent",active:"transparent"},critical:{hovered:"transparent",active:"transparent"}}},stroke:{disabled:{default:n.offBlack32,inverse:n.white50},inverse:n.white,action:{default:n.blue,active:n.activeBlue,inverse:n.fadedBlue},critical:{default:n.red,active:n.activeRed,inverse:n.fadedRed},primary:{action:{hovered:n.blue,active:n.activeBlue},critical:{hovered:n.red,active:n.activeRed},inverse:{default:n.white,hovered:n.white}},secondary:{default:n.offBlack},tertiary:{default:n.offBlack64},filled:{action:{hovered:n.blue,active:n.activeBlue},critical:{hovered:n.red,active:n.activeRed}}}},border:{width:{default:L.width.thin,active:L.width.none,hovered:L.width.thin,hoveredInverse:L.width.thin},radius:{default:L.radius.medium_4}}},No=Xt(se,{color:{bg:{hovered:n.white,active:n.white64,filled:{action:{hovered:n.blue,active:n.activeBlue},critical:{hovered:n.red,active:n.activeRed}}},stroke:{action:{inverse:n.eggplant},critical:{inverse:n.eggplant},primary:{action:{hovered:n.eggplant,active:n.eggplant},critical:{hovered:n.eggplant,active:n.eggplant},inverse:{hovered:n.eggplant}},filled:{action:{hovered:n.white,active:n.white},critical:{hovered:n.white,active:n.white}}}},border:{width:{hovered:L.width.none,hoveredInverse:L.width.none}}}),Qo={default:se,khanmigo:No},Tt=Zt(se);function Po(e){var t;const s=c.useContext(to),a=(t=Qo[s])!=null?t:se;return c.createElement(Tt.Provider,{value:a},e.children)}const Bo=["color","disabled","href","icon","kind","light","size","skipClientNav","style","testId"];function Do({icon:e,size:t}){switch(Eo(t)){case"small":return c.createElement(he,{size:"small",color:"currentColor",icon:e});case"medium":default:return c.createElement(he,{size:"medium",color:"currentColor",icon:e})}}const Mo=pe("a"),To=pe("button"),Uo=pe(Ht),zo=c.forwardRef(function(t,s){const{color:a,disabled:r,href:l,icon:u,kind:m="primary",light:p=!1,size:i="medium",skipClientNav:v,style:q,testId:I}=t,w=Dt(t,Bo),{theme:x,themeName:S}=eo(Tt),R=ce=>{const ge=Fo(a,m,p,i,x,S),jt=[Go.shared,ge.default,r&&ge.disabled],le=c.createElement(Do,{size:i,icon:u}),de=k({"data-testid":I,style:[jt,q]},w);return l&&!r?ce&&!v&&Yt(l)?c.createElement(Uo,k({},de,{to:l,ref:s}),le):c.createElement(Mo,k({},de,{href:l,ref:s}),le):c.createElement(To,k({type:"button"},de,{onClick:r?void 0:w.onClick,"aria-disabled":r,ref:s}),le)};return c.createElement(Jt.Consumer,null,ce=>R(ce))}),Go=Z.StyleSheet.create({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",padding:0,cursor:"pointer",border:"none",outline:"none",textDecoration:"none",background:"none",margin:-8,touchAction:"manipulation"}}),re={};function $o(e,t,s,a,r){switch(e){case"primary":const l=r==="destructive"?t.color.stroke.primary.critical.hovered:t.color.stroke.primary.action.hovered;return{":hover":{backgroundColor:t.color.bg.hovered,color:a?t.color.stroke.primary.inverse.hovered:l,outlineColor:a?t.color.stroke.inverse:s,outlineOffset:1,outlineStyle:"solid",outlineWidth:a?t.border.width.hoveredInverse:t.border.width.hovered},":active":{backgroundColor:t.color.bg.active}};case"secondary":case"tertiary":return{":hover":{backgroundColor:r==="destructive"?t.color.bg.filled.critical.hovered:t.color.bg.filled.action.hovered,color:r==="destructive"?t.color.stroke.filled.critical.hovered:t.color.stroke.filled.action.hovered,outlineWidth:t.border.width.active},":active":{backgroundColor:r==="destructive"?t.color.bg.filled.critical.active:t.color.bg.filled.action.active,color:r==="destructive"?t.color.stroke.filled.critical.active:t.color.stroke.filled.action.active,outlineWidth:t.border.width.active}};default:return{":focus-visible":{},":hover":{},":active":{}}}}const Fo=(e="default",t,s,a,r,l)=>{const u=e==="destructive"?r.color.stroke.critical.default:r.color.stroke.action.default,m=`${u}-${t}-${s}-${a}-${l}`;if(re[m])return re[m];if(s&&t!=="primary")throw new Error("Light is only supported for primary IconButtons");const p=(()=>{switch(t){case"primary":return s?r.color.stroke.primary.inverse.default:u;case"secondary":return r.color.stroke.secondary.default;case"tertiary":return r.color.stroke.tertiary.default;default:throw new Error("IconButton kind not recognized")}})(),i=Oo(a),v=$o(t,r,u,s,e),q=e==="destructive"?r.color.stroke.critical.inverse:r.color.stroke.action.inverse,I=e==="destructive"?r.color.stroke.critical.active:r.color.stroke.action.active,w=s?r.color.stroke.inverse:u,x=s?r.color.stroke.disabled.inverse:r.color.stroke.disabled.default,S={backgroundColor:r.color.bg.disabled,color:x,outlineColor:x},R={default:{height:i,width:i,color:p,borderRadius:r.border.radius.default,":hover":k({boxShadow:"none",color:w,borderRadius:r.border.radius.default,outlineWidth:r.border.width.default},v[":hover"]),"@media not (hover: hover)":{":hover":{boxShadow:"none",color:p,borderRadius:r.border.radius.default,outline:"none",backgroundColor:"transparent"}},":focus":{boxShadow:`0 0 0 ${r.border.width.default}px ${w}`,borderRadius:r.border.radius.default},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":k({boxShadow:"none",outlineWidth:r.border.width.default,outlineColor:w,outlineOffset:1,outlineStyle:"solid",borderRadius:r.border.radius.default},v[":focus-visible"]),":active":k({color:s?q:I,outlineWidth:r.border.width.default,outlineColor:s?q:I,outlineOffset:1,outlineStyle:"solid",borderRadius:r.border.radius.default},v[":active"])},disabled:{color:x,cursor:"not-allowed",":hover":k({},S,{outline:"none"}),":active":k({},S,{outline:"none"}),":focus":{boxShadow:`0 0 0 ${r.border.width.default}px ${x}`,borderRadius:r.border.radius.default},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":S}};return re[m]=Z.StyleSheet.create(R),re[m]},Vo=["color","disabled","href","kind","light","size","skipClientNav","tabIndex","target"],ye=c.forwardRef(function(t,s){const{color:a="default",disabled:r=!1,href:l,kind:u="primary",light:m=!1,size:p="medium",skipClientNav:i,tabIndex:v,target:q}=t,I=Dt(t,Vo);function w(S){const R=S.key;!l&&(R==="Enter"||R==="Space")&&S.preventDefault()}function x(S){const R=S.key;!l&&(R==="Enter"||R==="Space")&&I.onClick&&I.onClick(S)}return c.createElement(Po,null,c.createElement(zo,k({},I,{color:a,disabled:r,href:l,kind:u,light:m,ref:s,skipClientNav:i,size:p,target:q,tabIndex:v,onKeyDown:w,onKeyUp:x})))});class ie extends c.Component{render(){const{color:t,leftContent:s,rightContent:a,size:r,subtitle:l,title:u}=this.props,m=l?io:ao;return c.createElement(b,{style:[h.container,t==="dark"&&h.dark,r==="small"&&h.small]},c.createElement(b,{style:[h.column,h.leftColumn,u?h.withTitle:null]},s),u&&c.createElement(b,{style:[h.column,h.wideColumn]},c.createElement(b,{style:[h.titles,h.center]},c.createElement(m,{id:"wb-toolbar-title"},u),l&&c.createElement(so,{style:t==="light"&&h.subtitle},l))),c.createElement(b,{style:[h.column,h.rightColumn,u?h.withTitle:null]},a))}}ie.defaultProps={color:"light",leftContent:null,rightContent:null,size:"medium"};const h=Z.StyleSheet.create({container:{border:`1px solid ${n.offBlack16}`,flex:1,flexDirection:"row",justifyContent:"space-between",minHeight:66,paddingLeft:g.medium_16,paddingRight:g.medium_16,width:"100%"},small:{minHeight:50},dark:{backgroundColor:n.darkBlue,boxShadow:`0 1px 0 0 ${n.white64}`,color:"white"},column:{justifyContent:"center"},withTitle:{flex:1},wideColumn:{flex:1,flexBasis:"50%"},leftColumn:{alignItems:"center",flexDirection:"row",flexShrink:0,justifyContent:"flex-start"},rightColumn:{alignItems:"center",flexDirection:"row",justifyContent:"flex-end"},center:{textAlign:"center"},subtitle:{color:n.offBlack64},titles:{padding:g.small_12}}),jo=""+new URL("camera-slash-Oge78uaV.svg",import.meta.url).href,Ko=""+new URL("graph-RU2fqeKx.svg",import.meta.url).href,Ho=""+new URL("image-PFUjt3DK.svg",import.meta.url).href,Jo=["angle","segment","linear","linear-system","ray","polygon","point","circle","quadratic","sinusoid","unlimited-point"],Yo=Jo.reduce((e,t)=>(e[t]=!0,e),{});function Ut(e){const{value:t,onInput:s,...a}=e,[r,l]=c.useState(!1),[u,m]=c.useState("");return o("input",{...a,value:r?u:t,onChange:p=>{m(p.target.value),s(p.target.value)},onFocus:()=>{m(t),l(!0)},onBlur:()=>{l(!1)}})}Ut.__docgenInfo={description:"",methods:[],displayName:"EditableControlledInput",props:{value:{required:!0,tsType:{name:"string"},description:""},onInput:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValue: string) => unknown",signature:{arguments:[{type:{name:"string"},name:"newValue"}],return:{name:"unknown"}}},description:""}}};function ee(e){let t;return s=>((t==null||s!==t.arg)&&(t={arg:s,result:e(s)}),t.result)}const Xo={type:"next"},Zo={type:"previous"},er=e=>lr(e)?{type:"jump-to-index",index:parseInt(e,10)-1}:{type:"noop"};function tr(e){return{type:"set-questions",questions:e}}function or(e){return{type:"load-questions-from-storage",questions:e}}const rr={type:"remove-current-question"};function nr(e,t){switch(t.type){case"next":return ue(e,s=>s+1);case"previous":return ue(e,s=>s-1);case"jump-to-index":return ue(e,()=>t.index);case"set-questions":return{...e,questions:t.questions};case"load-questions-from-storage":return e.questions||!t.questions?e:{...e,questions:t.questions};case"remove-current-question":{const s=te(e);return{...e,questions:e.questions.split(` +import{j as o,a as y,F as X}from"./jsx-runtime-FVsy8kgq.js";import{B as Kt}from"./phet-simulation-4u5-UljK.js";import{B as ne}from"./choice-E4eyMygy.js";import{b as pe,a as Dt,_ as k,V as b}from"./index-6h5t6F0w.js";import{r as c}from"./index-TT1qJ6UJ.js";import{l as Z}from"./index-awljIyHI.js";import{L as Ht,c as Jt}from"./react-router-dom-W_e8xVUu.js";import{i as Yt}from"./index-o3wWn3Y5.js";import{P as he}from"./index-xuPsLuPk.js";import{m as Xt,c as Zt,u as eo,T as to}from"./index-rfN0X25E.js";import{c as n,b as L,s as g}from"./index-deFLJwr4.js";import{S as oe}from"./index-qUyqkRvh.js";import{L as oo}from"./video-transcript-link-WVgIZGhp.js";import{a as ro,S as no}from"./index-CkAxGj88.js";import{b as so,L as io,H as ao}from"./index-h_CiYGGb.js";import{T as fe}from"./index-K9BSJPWl.js";import{w as co}from"./index-J2t_5nK1.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import{a as lo}from"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import{R as uo}from"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import{S as po}from"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{m as mo}from"./strings-OAjNfY6D.js";import{R as d}from"./renderer-with-debug-ui-YzY7YHzw.js";import{j as Mt,k as go,m as ho,n as fo,o as yo,t as me,u as bo,v as So,w as vo,x as ko,y as Ro,z as Io,A as wo,B as xo,C as Lo,D as qo,E as _o,F as Co,G as Wo,H as Ao}from"./interactive-graph.testdata-QKEIR03d.js";import"./index-ngddCaVG.js";import"./arrow-square-out-bold-090vdhrx.js";import"./constants-I_nlPaPx.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-YCTzZMik.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./media-queries-MaBBbpNq.js";import"./choice-icon-LAaL9HdM.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./index-tvtfaFq4.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./shared-3pf9YZIg.js";import"./answer-choices-xSqM961S.js";import"./minus-bold-ONmDo3Ve.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-HXEAXx7K.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./bundle.esm-7jAAHVxW.js";import"./side-by-side-kpK-8vW0.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";import"./interactive-graph-question-builder-Mh2lh4tI.js";const Eo=e=>{switch(e){case"xsmall":return"small";case"small":return"medium";case"medium":return"medium";case"large":return"medium"}},Oo=e=>({xsmall:24,small:32,medium:40,large:48})[e],se={color:{bg:{hovered:"transparent",active:"transparent",disabled:"transparent",filled:{action:{hovered:"transparent",active:"transparent"},critical:{hovered:"transparent",active:"transparent"}}},stroke:{disabled:{default:n.offBlack32,inverse:n.white50},inverse:n.white,action:{default:n.blue,active:n.activeBlue,inverse:n.fadedBlue},critical:{default:n.red,active:n.activeRed,inverse:n.fadedRed},primary:{action:{hovered:n.blue,active:n.activeBlue},critical:{hovered:n.red,active:n.activeRed},inverse:{default:n.white,hovered:n.white}},secondary:{default:n.offBlack},tertiary:{default:n.offBlack64},filled:{action:{hovered:n.blue,active:n.activeBlue},critical:{hovered:n.red,active:n.activeRed}}}},border:{width:{default:L.width.thin,active:L.width.none,hovered:L.width.thin,hoveredInverse:L.width.thin},radius:{default:L.radius.medium_4}}},No=Xt(se,{color:{bg:{hovered:n.white,active:n.white64,filled:{action:{hovered:n.blue,active:n.activeBlue},critical:{hovered:n.red,active:n.activeRed}}},stroke:{action:{inverse:n.eggplant},critical:{inverse:n.eggplant},primary:{action:{hovered:n.eggplant,active:n.eggplant},critical:{hovered:n.eggplant,active:n.eggplant},inverse:{hovered:n.eggplant}},filled:{action:{hovered:n.white,active:n.white},critical:{hovered:n.white,active:n.white}}}},border:{width:{hovered:L.width.none,hoveredInverse:L.width.none}}}),Qo={default:se,khanmigo:No},Tt=Zt(se);function Po(e){var t;const s=c.useContext(to),a=(t=Qo[s])!=null?t:se;return c.createElement(Tt.Provider,{value:a},e.children)}const Bo=["color","disabled","href","icon","kind","light","size","skipClientNav","style","testId"];function Do({icon:e,size:t}){switch(Eo(t)){case"small":return c.createElement(he,{size:"small",color:"currentColor",icon:e});case"medium":default:return c.createElement(he,{size:"medium",color:"currentColor",icon:e})}}const Mo=pe("a"),To=pe("button"),Uo=pe(Ht),zo=c.forwardRef(function(t,s){const{color:a,disabled:r,href:l,icon:u,kind:m="primary",light:p=!1,size:i="medium",skipClientNav:v,style:q,testId:I}=t,w=Dt(t,Bo),{theme:x,themeName:S}=eo(Tt),R=ce=>{const ge=Fo(a,m,p,i,x,S),jt=[Go.shared,ge.default,r&&ge.disabled],le=c.createElement(Do,{size:i,icon:u}),de=k({"data-testid":I,style:[jt,q]},w);return l&&!r?ce&&!v&&Yt(l)?c.createElement(Uo,k({},de,{to:l,ref:s}),le):c.createElement(Mo,k({},de,{href:l,ref:s}),le):c.createElement(To,k({type:"button"},de,{onClick:r?void 0:w.onClick,"aria-disabled":r,ref:s}),le)};return c.createElement(Jt.Consumer,null,ce=>R(ce))}),Go=Z.StyleSheet.create({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",padding:0,cursor:"pointer",border:"none",outline:"none",textDecoration:"none",background:"none",margin:-8,touchAction:"manipulation"}}),re={};function $o(e,t,s,a,r){switch(e){case"primary":const l=r==="destructive"?t.color.stroke.primary.critical.hovered:t.color.stroke.primary.action.hovered;return{":hover":{backgroundColor:t.color.bg.hovered,color:a?t.color.stroke.primary.inverse.hovered:l,outlineColor:a?t.color.stroke.inverse:s,outlineOffset:1,outlineStyle:"solid",outlineWidth:a?t.border.width.hoveredInverse:t.border.width.hovered},":active":{backgroundColor:t.color.bg.active}};case"secondary":case"tertiary":return{":hover":{backgroundColor:r==="destructive"?t.color.bg.filled.critical.hovered:t.color.bg.filled.action.hovered,color:r==="destructive"?t.color.stroke.filled.critical.hovered:t.color.stroke.filled.action.hovered,outlineWidth:t.border.width.active},":active":{backgroundColor:r==="destructive"?t.color.bg.filled.critical.active:t.color.bg.filled.action.active,color:r==="destructive"?t.color.stroke.filled.critical.active:t.color.stroke.filled.action.active,outlineWidth:t.border.width.active}};default:return{":focus-visible":{},":hover":{},":active":{}}}}const Fo=(e="default",t,s,a,r,l)=>{const u=e==="destructive"?r.color.stroke.critical.default:r.color.stroke.action.default,m=`${u}-${t}-${s}-${a}-${l}`;if(re[m])return re[m];if(s&&t!=="primary")throw new Error("Light is only supported for primary IconButtons");const p=(()=>{switch(t){case"primary":return s?r.color.stroke.primary.inverse.default:u;case"secondary":return r.color.stroke.secondary.default;case"tertiary":return r.color.stroke.tertiary.default;default:throw new Error("IconButton kind not recognized")}})(),i=Oo(a),v=$o(t,r,u,s,e),q=e==="destructive"?r.color.stroke.critical.inverse:r.color.stroke.action.inverse,I=e==="destructive"?r.color.stroke.critical.active:r.color.stroke.action.active,w=s?r.color.stroke.inverse:u,x=s?r.color.stroke.disabled.inverse:r.color.stroke.disabled.default,S={backgroundColor:r.color.bg.disabled,color:x,outlineColor:x},R={default:{height:i,width:i,color:p,borderRadius:r.border.radius.default,":hover":k({boxShadow:"none",color:w,borderRadius:r.border.radius.default,outlineWidth:r.border.width.default},v[":hover"]),"@media not (hover: hover)":{":hover":{boxShadow:"none",color:p,borderRadius:r.border.radius.default,outline:"none",backgroundColor:"transparent"}},":focus":{boxShadow:`0 0 0 ${r.border.width.default}px ${w}`,borderRadius:r.border.radius.default},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":k({boxShadow:"none",outlineWidth:r.border.width.default,outlineColor:w,outlineOffset:1,outlineStyle:"solid",borderRadius:r.border.radius.default},v[":focus-visible"]),":active":k({color:s?q:I,outlineWidth:r.border.width.default,outlineColor:s?q:I,outlineOffset:1,outlineStyle:"solid",borderRadius:r.border.radius.default},v[":active"])},disabled:{color:x,cursor:"not-allowed",":hover":k({},S,{outline:"none"}),":active":k({},S,{outline:"none"}),":focus":{boxShadow:`0 0 0 ${r.border.width.default}px ${x}`,borderRadius:r.border.radius.default},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":S}};return re[m]=Z.StyleSheet.create(R),re[m]},Vo=["color","disabled","href","kind","light","size","skipClientNav","tabIndex","target"],ye=c.forwardRef(function(t,s){const{color:a="default",disabled:r=!1,href:l,kind:u="primary",light:m=!1,size:p="medium",skipClientNav:i,tabIndex:v,target:q}=t,I=Dt(t,Vo);function w(S){const R=S.key;!l&&(R==="Enter"||R==="Space")&&S.preventDefault()}function x(S){const R=S.key;!l&&(R==="Enter"||R==="Space")&&I.onClick&&I.onClick(S)}return c.createElement(Po,null,c.createElement(zo,k({},I,{color:a,disabled:r,href:l,kind:u,light:m,ref:s,skipClientNav:i,size:p,target:q,tabIndex:v,onKeyDown:w,onKeyUp:x})))});class ie extends c.Component{render(){const{color:t,leftContent:s,rightContent:a,size:r,subtitle:l,title:u}=this.props,m=l?io:ao;return c.createElement(b,{style:[h.container,t==="dark"&&h.dark,r==="small"&&h.small]},c.createElement(b,{style:[h.column,h.leftColumn,u?h.withTitle:null]},s),u&&c.createElement(b,{style:[h.column,h.wideColumn]},c.createElement(b,{style:[h.titles,h.center]},c.createElement(m,{id:"wb-toolbar-title"},u),l&&c.createElement(so,{style:t==="light"&&h.subtitle},l))),c.createElement(b,{style:[h.column,h.rightColumn,u?h.withTitle:null]},a))}}ie.defaultProps={color:"light",leftContent:null,rightContent:null,size:"medium"};const h=Z.StyleSheet.create({container:{border:`1px solid ${n.offBlack16}`,flex:1,flexDirection:"row",justifyContent:"space-between",minHeight:66,paddingLeft:g.medium_16,paddingRight:g.medium_16,width:"100%"},small:{minHeight:50},dark:{backgroundColor:n.darkBlue,boxShadow:`0 1px 0 0 ${n.white64}`,color:"white"},column:{justifyContent:"center"},withTitle:{flex:1},wideColumn:{flex:1,flexBasis:"50%"},leftColumn:{alignItems:"center",flexDirection:"row",flexShrink:0,justifyContent:"flex-start"},rightColumn:{alignItems:"center",flexDirection:"row",justifyContent:"flex-end"},center:{textAlign:"center"},subtitle:{color:n.offBlack64},titles:{padding:g.small_12}}),jo=""+new URL("camera-slash-Oge78uaV.svg",import.meta.url).href,Ko=""+new URL("graph-RU2fqeKx.svg",import.meta.url).href,Ho=""+new URL("image-PFUjt3DK.svg",import.meta.url).href,Jo=["angle","segment","linear","linear-system","ray","polygon","point","circle","quadratic","sinusoid","unlimited-point"],Yo=Jo.reduce((e,t)=>(e[t]=!0,e),{});function Ut(e){const{value:t,onInput:s,...a}=e,[r,l]=c.useState(!1),[u,m]=c.useState("");return o("input",{...a,value:r?u:t,onChange:p=>{m(p.target.value),s(p.target.value)},onFocus:()=>{m(t),l(!0)},onBlur:()=>{l(!1)}})}Ut.__docgenInfo={description:"",methods:[],displayName:"EditableControlledInput",props:{value:{required:!0,tsType:{name:"string"},description:""},onInput:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValue: string) => unknown",signature:{arguments:[{type:{name:"string"},name:"newValue"}],return:{name:"unknown"}}},description:""}}};function ee(e){let t;return s=>((t==null||s!==t.arg)&&(t={arg:s,result:e(s)}),t.result)}const Xo={type:"next"},Zo={type:"previous"},er=e=>lr(e)?{type:"jump-to-index",index:parseInt(e,10)-1}:{type:"noop"};function tr(e){return{type:"set-questions",questions:e}}function or(e){return{type:"load-questions-from-storage",questions:e}}const rr={type:"remove-current-question"};function nr(e,t){switch(t.type){case"next":return ue(e,s=>s+1);case"previous":return ue(e,s=>s-1);case"jump-to-index":return ue(e,()=>t.index);case"set-questions":return{...e,questions:t.questions};case"load-questions-from-storage":return e.questions||!t.questions?e:{...e,questions:t.questions};case"remove-current-question":{const s=te(e);return{...e,questions:e.questions.split(` `).filter((a,r)=>r!==s).join(` `)}}}return e}function ue(e,t){const s=te(e),a=ae(e);return{...e,requestedIndex:zt(t(s),a)}}function zt(e,t){return t.length===0||e<0?0:e>=t.length?t.length-1:e}const Gt=ee(e=>e.questions.split(` `).map(t=>t.trim()).filter(Boolean)),ae=ee(e=>Gt(e).map(cr)),sr=ee(e=>ae(e)[te(e)]??null),ir=ee(e=>Gt(e)[te(e)]??null),ar=ee(e=>ae(e).length),te=e=>zt(e.requestedIndex,ae(e));function cr(e){try{return JSON.parse(e)}catch{return{content:"**Could not parse the JSON for this question.**\n\n```\n"+e+"\n```",widgets:{},images:{}}}}function lr(e){return/^\d+$/.test(e)&&+e>0}const dr=Z.StyleSheet.create({header:{display:"flex",alignItems:"center",boxShadow:"0 0 10px #0002",borderBlockEnd:`1px solid ${n.offBlack32}`,background:n.offBlack8,padding:g.small_12,justifyContent:"space-between",flexDirection:"row-reverse",flexWrap:"wrap"}}),$t=({children:e})=>o("header",{className:Z.css(dr.header),children:e});$t.__docgenInfo={description:"",methods:[],displayName:"Header"};const ur=` diff --git a/assets/item-X9tjzx12.js b/assets/item-X9tjzx12.js index 86eb13fcb9..e87bf561de 100644 --- a/assets/item-X9tjzx12.js +++ b/assets/item-X9tjzx12.js @@ -1,4 +1,4 @@ -import{j as e,a as h}from"./jsx-runtime-FVsy8kgq.js";import{C as w}from"./index-WNT3sUKf.js";import{V as m}from"./index-6h5t6F0w.js";import{c as a}from"./index-deFLJwr4.js";import{l as g}from"./index-awljIyHI.js";import{r as f}from"./index-TT1qJ6UJ.js";const b=function({tintColor:l,type:n}){switch(n){case"Geometry":return e("svg",{width:"32",height:"32",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.57584 7.09442c.35139-.16458.76626-.11103 1.06434.13737L26.6402 22.2318c.3234.2695.4434.7128.3001 1.1086C26.7969 23.7363 26.421 24 26 24H8c-.55228 0-1-.4477-1-1V8.00001c0-.38802.22446-.74101.57584-.90559zM9 10.1351V17h4c.5523 0 1 .4477 1 1v4h9.238L9 10.1351zM12 22v-3H9v3h3z",fill:l})});case"Operators":return e("svg",{width:"32",height:"32",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M29 6h1v1h-1V6zm-2 0c0-1.10457.8954-2 2-2h1c1.1046 0 2 .89543 2 2v1c0 1.10457-.8954 2-2 2h-1c-1.1046 0-2-.89543-2-2V6zm-15.8682.50386C11.3098 6.19229 11.6411 6 12 6h2c.5523 0 1 .44772 1 1s-.4477 1-1 1h-1.4197l-3.71206 6.4961c-.18297.3202-.52733.5137-.89599.5035-.36865-.0102-.70175-.2225-.86668-.5524l-2-4c-.24699-.49396-.04676-1.09464.44722-1.34163.49397-.24699 1.09465-.04676 1.34164.44722L8.0588 11.8815l3.073-5.37764zM7.70676 16.2925c.39072.3904.39103 1.0235.00069 1.4143-.42202.4224-.86362 1.0235-1.19588 1.659C6.17039 20.0184 6 20.601 6 21c0 .3789.17235.9897.51638 1.6649.33677.661.7685 1.2472 1.15148 1.5908.41106.3689.44528 1.0011.07643 1.4122-.36885.411-1.00109.4452-1.41215.0764-.61604-.5528-1.18431-1.3599-1.5978-2.1715C4.32813 22.7755 3.99999 21.8345 4 21c.00001-.8609.3301-1.7783.73917-2.5608.41798-.7995.97637-1.5684 1.55338-2.146.39033-.3907 1.0235-.391 1.41421-.0007zm3.58644 0c.3908-.3903 1.0239-.39 1.4143.0007.577.5776 1.1353 1.3465 1.5533 2.146C14.6699 19.2217 15 20.1391 15 21c0 .8345-.3281 1.7755-.7343 2.5728-.4135.8116-.9818 1.6187-1.5978 2.1715-.4111.3688-1.0433.3346-1.4122-.0764-.3688-.4111-.3346-1.0433.0764-1.4122.383-.3436.8148-.9298 1.1515-1.5908.344-.6752.5164-1.286.5164-1.6649 0-.399-.1704-.9816-.5116-1.6342-.3322-.6355-.7738-1.2366-1.1959-1.659-.3903-.3908-.39-1.0239.0007-1.4143zm16.6431 1.3564c.1939.5171-.0681 1.0935-.5852 1.2874L21.848 21l5.5031 2.0637c.5171.1939.7791.7703.5852 1.2874-.1939.5171-.7703.7791-1.2874.5852l-8-3C18.2586 21.79 18 21.4168 18 21c0-.4168.2586-.79.6489-.9363l8-3c.5171-.1939 1.0935.0681 1.2874.5852zM21 8v5h3V8h-3zm-1-2c-.5523 0-1 .44772-1 1v7c0 .5523.4477 1 1 1h5c.5523 0 1-.4477 1-1V7c0-.55228-.4477-1-1-1h-5z",fill:l})});case"Numbers":return e("svg",{width:"32",height:"32",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e("path",{d:"M10.4123 19.5794v1.421H4.71434v-1.421h2.016v-5.558c0-.1213.00233-.245.007-.371.00466-.126.01166-.2543.021-.385l-1.33 1.106c-.09334.07-.18434.1144-.273.133-.08867.0187-.17267.021-.252.007-.07934-.0186-.14934-.0466-.21-.084-.06067-.042-.10734-.084-.14-.126l-.609-.819 3.122-2.646h1.589v8.743h1.75696zm8.3801-.35c.21 0 .3734.0584.49.175.1214.1167.182.2707.182.462v1.134h-7.042v-.63c0-.1213.0257-.252.077-.392.0514-.1446.1377-.2753.259-.392l3.01-3.017c.2567-.2566.483-.5016.679-.735.196-.238.3594-.469.49-.693.1307-.2286.2287-.4596.294-.693.0654-.2333.098-.4783.098-.735 0-.4526-.1166-.7956-.35-1.029-.2333-.238-.5623-.357-.987-.357-.1866 0-.3593.028-.518.084-.154.0514-.294.1237-.42.217-.1213.0934-.2263.203-.315.329-.0886.126-.154.2637-.196.413-.084.2334-.1983.3897-.343.469-.14.0747-.3406.091-.602.049l-1.022-.182c.0747-.4946.2147-.9286.42-1.302.2054-.3733.462-.6836.77-.931.308-.2473.6604-.4316 1.057-.553.3967-.126.8237-.189 1.281-.189.4807 0 .917.0724 1.309.217.3967.14.735.3384 1.015.595.28.252.497.5577.651.917.154.3594.231.756.231 1.19 0 .3734-.0536.7187-.161 1.036-.1073.3174-.2543.6207-.441.91-.182.2847-.3943.5624-.637.833-.2426.2707-.4993.5437-.77.819l-2.156 2.205c.238-.07.4737-.1236.707-.161.2334-.042.4527-.063.658-.063h2.282zm2.6611-5.523c.0747-.4946.2147-.9286.42-1.302.2054-.3733.462-.6836.77-.931.308-.2473.658-.4316 1.05-.553.3967-.126.8237-.189 1.281-.189.4854 0 .9194.07 1.302.21.3874.1354.714.322.98.56.266.238.469.5157.609.833.1447.3174.217.658.217 1.022 0 .322-.035.6067-.105.854-.0653.2427-.1656.455-.301.637-.1306.182-.294.336-.49.462-.1913.126-.413.231-.665.315 1.1667.3827 1.75 1.1597 1.75 2.331 0 .518-.0956.9754-.287 1.372-.1913.392-.448.721-.77.987s-.6976.4667-1.127.602c-.4246.1307-.8703.196-1.337.196-.4946 0-.931-.056-1.309-.168-.378-.112-.7116-.28-1.001-.504-.2846-.224-.5296-.504-.735-.84-.2053-.3406-.385-.7373-.539-1.19l.854-.35c.224-.0933.4317-.119.623-.077.196.042.336.1447.42.308.0934.1774.1914.3407.294.49.1074.1494.2264.28.357.392.1307.1074.2777.1914.441.252.168.0607.3594.091.574.091.2707 0 .5064-.0443.707-.133.2007-.0886.3687-.203.504-.343.1354-.1446.2357-.3056.301-.483.07-.182.105-.3616.105-.539 0-.2333-.021-.4433-.063-.63-.042-.1913-.14-.3523-.294-.483-.1493-.1353-.3733-.238-.672-.308-.294-.0746-.6953-.112-1.204-.112v-1.358c.4247 0 .7724-.035 1.043-.105.2707-.07.483-.168.637-.294.154-.126.259-.2776.315-.455.0607-.1773.091-.371.091-.581 0-.4433-.1166-.7816-.35-1.015-.2286-.2333-.5553-.35-.98-.35-.1866 0-.3593.028-.518.084-.154.0514-.294.1237-.42.217-.1213.0934-.2263.203-.315.329-.0886.126-.154.2637-.196.413-.0886.2334-.203.3897-.343.469-.14.0747-.343.091-.609.049l-1.015-.182z",fill:l})});case"Extras":return h("svg",{xmlns:"http://www.w3.org/2000/svg",width:"32",height:"32",fill:"none",viewBox:"0 0 32 32",children:[h("g",{clipPath:"url(#a)",children:[e("path",{fill:l,fillRule:"evenodd",d:"M6.127 10.454c.224-.032.403-.05.53-.05.591 0 1.137.153 1.63.459.398.239.713.529.94.872l.188-.248.005-.007.006-.006c.619-.703 1.347-1.07 2.178-1.07.691 0 1.269.204 1.71.626.454.403.686.91.686 1.51 0 .533-.156.994-.476 1.37-.312.383-.738.574-1.254.574-.345 0-.643-.101-.878-.317a1.1 1.1 0 0 1-.353-.843c0-.405.11-.76.342-1.051.153-.193.354-.352.596-.479a1.416 1.416 0 0 0-.492-.07c-.195 0-.316.016-.38.035-.53.226-.938.694-1.208 1.445l-.001.003c-.02.05-.085.289-.202.74-.115.443-.275 1.077-.481 1.901-.414 1.641-.633 2.547-.662 2.74l-.002.01a3.423 3.423 0 0 0-.067.673c0 .337.097.581.272.756.176.177.413.272.733.272.6 0 1.15-.247 1.657-.768.518-.549.864-1.146 1.044-1.791l.001-.004a1.2 1.2 0 0 1 .088-.224.368.368 0 0 1 .161-.164.564.564 0 0 1 .198-.056 2.19 2.19 0 0 1 .276-.014c.159 0 .305.016.42.064.059.025.12.063.167.122.05.063.073.137.073.213 0 .023-.004.048-.005.057a12.52 12.52 0 0 1-.046.245l-.004.015c-.281 1.026-.86 1.917-1.73 2.67l-.007.007c-.776.611-1.605.925-2.484.925-1.08 0-1.93-.45-2.53-1.33-.453.605-1.015 1.024-1.685 1.248l-.01.003-.011.002a3.23 3.23 0 0 1-.664.053c-.974 0-1.703-.35-2.13-1.078A2.05 2.05 0 0 1 2 19.437c0-.52.158-.975.478-1.349.326-.38.749-.572 1.252-.572.372 0 .69.091.913.31.224.218.318.531.318.898 0 .327-.078.621-.241.874a1.706 1.706 0 0 1-.707.597l-.018.009c.158.063.331.095.52.095.467 0 .902-.285 1.295-.966l.002-.005c.071-.115.185-.417.341-.938.154-.51.341-1.209.563-2.096v-.002c.095-.364.198-.767.31-1.21.11-.444.188-.78.235-1.014l.002-.013c.058-.216.098-.36.119-.425.077-.42.113-.709.113-.877 0-.342-.092-.588-.254-.762-.159-.171-.384-.267-.704-.267-.652 0-1.217.251-1.704.768l-.002.002A4.215 4.215 0 0 0 3.79 14.28a1.084 1.084 0 0 1-.065.207.41.41 0 0 1-.14.176l-.01.007-.012.006a.35.35 0 0 1-.104.03 1.16 1.16 0 0 1-.095.01 5.04 5.04 0 0 1-.275.006H2.67l-.061-.061c-.109-.11-.204-.247-.204-.41v-.015l.003-.015c.07-.472.335-1.05.768-1.723l.001-.002c.771-1.165 1.754-1.857 2.949-2.042h.002Z",clipRule:"evenodd"}),e("path",{fill:l,d:"M21.084 10.284c.932-.008 2.301-.013 4.107-.013 1.325 0 2.327.003 3.007.007a75.812 75.812 0 0 1 .99.013c.025 0 .047.002.065.003h.002c.01 0 .04.003.067.01l.01.002.011.004c.201.07.37.183.488.347a.966.966 0 0 1 .169.574c0 .3-.078.568-.248.79-.168.221-.411.377-.708.479h-.002a1.01 1.01 0 0 1-.221.034 8.213 8.213 0 0 1-.35.016c-.29.008-.696.012-1.219.012h-1.39l-.038.223v.001c-.198 1.185-.295 2.156-.295 2.916 0 1.446.251 2.746.75 3.905l.004.007c.059.153.105.284.137.393.03.103.053.205.053.29 0 .359-.16.68-.44.961-.278.296-.63.445-1.041.445-.255 0-.492-.03-.654-.139l-.009-.006-.008-.006c-.126-.101-.236-.274-.338-.477l-.006-.012c-.331-.768-.49-1.722-.49-2.852 0-.595.007-1.002.025-1.212v-.005c.118-1.157.377-2.551.776-4.18v-.002c.024-.096.045-.18.061-.25h-1.948c-.008.038-.02.086-.034.143l-.002.007a35.14 35.14 0 0 0-.146.537c-.05.232-.1.448-.15.648v.001a230.673 230.673 0 0 1-1.312 4.936 41.285 41.285 0 0 1-.411 1.384c-.104.322-.19.557-.256.681-.115.262-.28.473-.5.617-.225.146-.49.212-.783.212-.449 0-.807-.173-1.006-.549l-.006-.011-.005-.012a1.37 1.37 0 0 1-.067-.486v-.326l.346-.745c1.24-2.61 2.136-4.858 2.695-6.747l.002-.008.094-.281h-.463c-.662 0-1.105.025-1.346.07-.198.04-.47.173-.824.43l-.007.005-.007.005c-.366.228-.69.542-.97.947-.044.069-.085.13-.125.18a.651.651 0 0 1-.141.136l-.027.017-.03.01a.8.8 0 0 1-.19.03c-.07.005-.156.008-.258.008-.17 0-.335-.021-.465-.09a.437.437 0 0 1-.216-.546c.014-.042.034-.086.057-.132.047-.093.113-.208.198-.343l.003-.005c1.147-1.745 2.311-2.774 3.508-2.96a2.345 2.345 0 0 1 .158-.015 60.295 60.295 0 0 1 1.369-.026Z"})]}),e("defs",{children:e("clipPath",{id:"a",children:e("path",{fill:"#fff",d:"M0 0h28v11.457H0z",transform:"translate(2 10.271)"})})})]});case"Dismiss":return e("svg",{width:"44",height:"44",viewBox:"0 0 44 44",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M28.7071 15.2929C28.3166 14.9024 27.6834 14.9024 27.2929 15.2929L22 20.5858L16.7071 15.2929C16.3166 14.9024 15.6834 14.9024 15.2929 15.2929C14.9024 15.6834 14.9024 16.3166 15.2929 16.7071L20.5858 22L15.2929 27.2929C14.9024 27.6834 14.9024 28.3166 15.2929 28.7071C15.6834 29.0976 16.3166 29.0976 16.7071 28.7071L22 23.4142L27.2929 28.7071C27.6834 29.0976 28.3166 29.0976 28.7071 28.7071C29.0976 28.3166 29.0976 27.6834 28.7071 27.2929L23.4142 22L28.7071 16.7071C29.0976 16.3166 29.0976 15.6834 28.7071 15.2929Z",fill:l})});case"Fractions":return e("svg",{width:"44",height:"44",viewBox:"0 0 44 44",fill:"none",xmlns:"http://www.w3.org/2000/svg"});default:throw new Error(`Invalid icon type: ${n}`)}};b.__docgenInfo={description:"",methods:[],displayName:"IconAsset",props:{tintColor:{required:!0,tsType:{name:"string"},description:""},type:{required:!0,tsType:{name:"union",raw:`| "Geometry" +import{j as e,a as h}from"./jsx-runtime-FVsy8kgq.js";import{C as w}from"./index-2dmvOE3q.js";import{V as m}from"./index-6h5t6F0w.js";import{c as a}from"./index-deFLJwr4.js";import{l as g}from"./index-awljIyHI.js";import{r as f}from"./index-TT1qJ6UJ.js";const b=function({tintColor:l,type:n}){switch(n){case"Geometry":return e("svg",{width:"32",height:"32",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.57584 7.09442c.35139-.16458.76626-.11103 1.06434.13737L26.6402 22.2318c.3234.2695.4434.7128.3001 1.1086C26.7969 23.7363 26.421 24 26 24H8c-.55228 0-1-.4477-1-1V8.00001c0-.38802.22446-.74101.57584-.90559zM9 10.1351V17h4c.5523 0 1 .4477 1 1v4h9.238L9 10.1351zM12 22v-3H9v3h3z",fill:l})});case"Operators":return e("svg",{width:"32",height:"32",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M29 6h1v1h-1V6zm-2 0c0-1.10457.8954-2 2-2h1c1.1046 0 2 .89543 2 2v1c0 1.10457-.8954 2-2 2h-1c-1.1046 0-2-.89543-2-2V6zm-15.8682.50386C11.3098 6.19229 11.6411 6 12 6h2c.5523 0 1 .44772 1 1s-.4477 1-1 1h-1.4197l-3.71206 6.4961c-.18297.3202-.52733.5137-.89599.5035-.36865-.0102-.70175-.2225-.86668-.5524l-2-4c-.24699-.49396-.04676-1.09464.44722-1.34163.49397-.24699 1.09465-.04676 1.34164.44722L8.0588 11.8815l3.073-5.37764zM7.70676 16.2925c.39072.3904.39103 1.0235.00069 1.4143-.42202.4224-.86362 1.0235-1.19588 1.659C6.17039 20.0184 6 20.601 6 21c0 .3789.17235.9897.51638 1.6649.33677.661.7685 1.2472 1.15148 1.5908.41106.3689.44528 1.0011.07643 1.4122-.36885.411-1.00109.4452-1.41215.0764-.61604-.5528-1.18431-1.3599-1.5978-2.1715C4.32813 22.7755 3.99999 21.8345 4 21c.00001-.8609.3301-1.7783.73917-2.5608.41798-.7995.97637-1.5684 1.55338-2.146.39033-.3907 1.0235-.391 1.41421-.0007zm3.58644 0c.3908-.3903 1.0239-.39 1.4143.0007.577.5776 1.1353 1.3465 1.5533 2.146C14.6699 19.2217 15 20.1391 15 21c0 .8345-.3281 1.7755-.7343 2.5728-.4135.8116-.9818 1.6187-1.5978 2.1715-.4111.3688-1.0433.3346-1.4122-.0764-.3688-.4111-.3346-1.0433.0764-1.4122.383-.3436.8148-.9298 1.1515-1.5908.344-.6752.5164-1.286.5164-1.6649 0-.399-.1704-.9816-.5116-1.6342-.3322-.6355-.7738-1.2366-1.1959-1.659-.3903-.3908-.39-1.0239.0007-1.4143zm16.6431 1.3564c.1939.5171-.0681 1.0935-.5852 1.2874L21.848 21l5.5031 2.0637c.5171.1939.7791.7703.5852 1.2874-.1939.5171-.7703.7791-1.2874.5852l-8-3C18.2586 21.79 18 21.4168 18 21c0-.4168.2586-.79.6489-.9363l8-3c.5171-.1939 1.0935.0681 1.2874.5852zM21 8v5h3V8h-3zm-1-2c-.5523 0-1 .44772-1 1v7c0 .5523.4477 1 1 1h5c.5523 0 1-.4477 1-1V7c0-.55228-.4477-1-1-1h-5z",fill:l})});case"Numbers":return e("svg",{width:"32",height:"32",viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e("path",{d:"M10.4123 19.5794v1.421H4.71434v-1.421h2.016v-5.558c0-.1213.00233-.245.007-.371.00466-.126.01166-.2543.021-.385l-1.33 1.106c-.09334.07-.18434.1144-.273.133-.08867.0187-.17267.021-.252.007-.07934-.0186-.14934-.0466-.21-.084-.06067-.042-.10734-.084-.14-.126l-.609-.819 3.122-2.646h1.589v8.743h1.75696zm8.3801-.35c.21 0 .3734.0584.49.175.1214.1167.182.2707.182.462v1.134h-7.042v-.63c0-.1213.0257-.252.077-.392.0514-.1446.1377-.2753.259-.392l3.01-3.017c.2567-.2566.483-.5016.679-.735.196-.238.3594-.469.49-.693.1307-.2286.2287-.4596.294-.693.0654-.2333.098-.4783.098-.735 0-.4526-.1166-.7956-.35-1.029-.2333-.238-.5623-.357-.987-.357-.1866 0-.3593.028-.518.084-.154.0514-.294.1237-.42.217-.1213.0934-.2263.203-.315.329-.0886.126-.154.2637-.196.413-.084.2334-.1983.3897-.343.469-.14.0747-.3406.091-.602.049l-1.022-.182c.0747-.4946.2147-.9286.42-1.302.2054-.3733.462-.6836.77-.931.308-.2473.6604-.4316 1.057-.553.3967-.126.8237-.189 1.281-.189.4807 0 .917.0724 1.309.217.3967.14.735.3384 1.015.595.28.252.497.5577.651.917.154.3594.231.756.231 1.19 0 .3734-.0536.7187-.161 1.036-.1073.3174-.2543.6207-.441.91-.182.2847-.3943.5624-.637.833-.2426.2707-.4993.5437-.77.819l-2.156 2.205c.238-.07.4737-.1236.707-.161.2334-.042.4527-.063.658-.063h2.282zm2.6611-5.523c.0747-.4946.2147-.9286.42-1.302.2054-.3733.462-.6836.77-.931.308-.2473.658-.4316 1.05-.553.3967-.126.8237-.189 1.281-.189.4854 0 .9194.07 1.302.21.3874.1354.714.322.98.56.266.238.469.5157.609.833.1447.3174.217.658.217 1.022 0 .322-.035.6067-.105.854-.0653.2427-.1656.455-.301.637-.1306.182-.294.336-.49.462-.1913.126-.413.231-.665.315 1.1667.3827 1.75 1.1597 1.75 2.331 0 .518-.0956.9754-.287 1.372-.1913.392-.448.721-.77.987s-.6976.4667-1.127.602c-.4246.1307-.8703.196-1.337.196-.4946 0-.931-.056-1.309-.168-.378-.112-.7116-.28-1.001-.504-.2846-.224-.5296-.504-.735-.84-.2053-.3406-.385-.7373-.539-1.19l.854-.35c.224-.0933.4317-.119.623-.077.196.042.336.1447.42.308.0934.1774.1914.3407.294.49.1074.1494.2264.28.357.392.1307.1074.2777.1914.441.252.168.0607.3594.091.574.091.2707 0 .5064-.0443.707-.133.2007-.0886.3687-.203.504-.343.1354-.1446.2357-.3056.301-.483.07-.182.105-.3616.105-.539 0-.2333-.021-.4433-.063-.63-.042-.1913-.14-.3523-.294-.483-.1493-.1353-.3733-.238-.672-.308-.294-.0746-.6953-.112-1.204-.112v-1.358c.4247 0 .7724-.035 1.043-.105.2707-.07.483-.168.637-.294.154-.126.259-.2776.315-.455.0607-.1773.091-.371.091-.581 0-.4433-.1166-.7816-.35-1.015-.2286-.2333-.5553-.35-.98-.35-.1866 0-.3593.028-.518.084-.154.0514-.294.1237-.42.217-.1213.0934-.2263.203-.315.329-.0886.126-.154.2637-.196.413-.0886.2334-.203.3897-.343.469-.14.0747-.343.091-.609.049l-1.015-.182z",fill:l})});case"Extras":return h("svg",{xmlns:"http://www.w3.org/2000/svg",width:"32",height:"32",fill:"none",viewBox:"0 0 32 32",children:[h("g",{clipPath:"url(#a)",children:[e("path",{fill:l,fillRule:"evenodd",d:"M6.127 10.454c.224-.032.403-.05.53-.05.591 0 1.137.153 1.63.459.398.239.713.529.94.872l.188-.248.005-.007.006-.006c.619-.703 1.347-1.07 2.178-1.07.691 0 1.269.204 1.71.626.454.403.686.91.686 1.51 0 .533-.156.994-.476 1.37-.312.383-.738.574-1.254.574-.345 0-.643-.101-.878-.317a1.1 1.1 0 0 1-.353-.843c0-.405.11-.76.342-1.051.153-.193.354-.352.596-.479a1.416 1.416 0 0 0-.492-.07c-.195 0-.316.016-.38.035-.53.226-.938.694-1.208 1.445l-.001.003c-.02.05-.085.289-.202.74-.115.443-.275 1.077-.481 1.901-.414 1.641-.633 2.547-.662 2.74l-.002.01a3.423 3.423 0 0 0-.067.673c0 .337.097.581.272.756.176.177.413.272.733.272.6 0 1.15-.247 1.657-.768.518-.549.864-1.146 1.044-1.791l.001-.004a1.2 1.2 0 0 1 .088-.224.368.368 0 0 1 .161-.164.564.564 0 0 1 .198-.056 2.19 2.19 0 0 1 .276-.014c.159 0 .305.016.42.064.059.025.12.063.167.122.05.063.073.137.073.213 0 .023-.004.048-.005.057a12.52 12.52 0 0 1-.046.245l-.004.015c-.281 1.026-.86 1.917-1.73 2.67l-.007.007c-.776.611-1.605.925-2.484.925-1.08 0-1.93-.45-2.53-1.33-.453.605-1.015 1.024-1.685 1.248l-.01.003-.011.002a3.23 3.23 0 0 1-.664.053c-.974 0-1.703-.35-2.13-1.078A2.05 2.05 0 0 1 2 19.437c0-.52.158-.975.478-1.349.326-.38.749-.572 1.252-.572.372 0 .69.091.913.31.224.218.318.531.318.898 0 .327-.078.621-.241.874a1.706 1.706 0 0 1-.707.597l-.018.009c.158.063.331.095.52.095.467 0 .902-.285 1.295-.966l.002-.005c.071-.115.185-.417.341-.938.154-.51.341-1.209.563-2.096v-.002c.095-.364.198-.767.31-1.21.11-.444.188-.78.235-1.014l.002-.013c.058-.216.098-.36.119-.425.077-.42.113-.709.113-.877 0-.342-.092-.588-.254-.762-.159-.171-.384-.267-.704-.267-.652 0-1.217.251-1.704.768l-.002.002A4.215 4.215 0 0 0 3.79 14.28a1.084 1.084 0 0 1-.065.207.41.41 0 0 1-.14.176l-.01.007-.012.006a.35.35 0 0 1-.104.03 1.16 1.16 0 0 1-.095.01 5.04 5.04 0 0 1-.275.006H2.67l-.061-.061c-.109-.11-.204-.247-.204-.41v-.015l.003-.015c.07-.472.335-1.05.768-1.723l.001-.002c.771-1.165 1.754-1.857 2.949-2.042h.002Z",clipRule:"evenodd"}),e("path",{fill:l,d:"M21.084 10.284c.932-.008 2.301-.013 4.107-.013 1.325 0 2.327.003 3.007.007a75.812 75.812 0 0 1 .99.013c.025 0 .047.002.065.003h.002c.01 0 .04.003.067.01l.01.002.011.004c.201.07.37.183.488.347a.966.966 0 0 1 .169.574c0 .3-.078.568-.248.79-.168.221-.411.377-.708.479h-.002a1.01 1.01 0 0 1-.221.034 8.213 8.213 0 0 1-.35.016c-.29.008-.696.012-1.219.012h-1.39l-.038.223v.001c-.198 1.185-.295 2.156-.295 2.916 0 1.446.251 2.746.75 3.905l.004.007c.059.153.105.284.137.393.03.103.053.205.053.29 0 .359-.16.68-.44.961-.278.296-.63.445-1.041.445-.255 0-.492-.03-.654-.139l-.009-.006-.008-.006c-.126-.101-.236-.274-.338-.477l-.006-.012c-.331-.768-.49-1.722-.49-2.852 0-.595.007-1.002.025-1.212v-.005c.118-1.157.377-2.551.776-4.18v-.002c.024-.096.045-.18.061-.25h-1.948c-.008.038-.02.086-.034.143l-.002.007a35.14 35.14 0 0 0-.146.537c-.05.232-.1.448-.15.648v.001a230.673 230.673 0 0 1-1.312 4.936 41.285 41.285 0 0 1-.411 1.384c-.104.322-.19.557-.256.681-.115.262-.28.473-.5.617-.225.146-.49.212-.783.212-.449 0-.807-.173-1.006-.549l-.006-.011-.005-.012a1.37 1.37 0 0 1-.067-.486v-.326l.346-.745c1.24-2.61 2.136-4.858 2.695-6.747l.002-.008.094-.281h-.463c-.662 0-1.105.025-1.346.07-.198.04-.47.173-.824.43l-.007.005-.007.005c-.366.228-.69.542-.97.947-.044.069-.085.13-.125.18a.651.651 0 0 1-.141.136l-.027.017-.03.01a.8.8 0 0 1-.19.03c-.07.005-.156.008-.258.008-.17 0-.335-.021-.465-.09a.437.437 0 0 1-.216-.546c.014-.042.034-.086.057-.132.047-.093.113-.208.198-.343l.003-.005c1.147-1.745 2.311-2.774 3.508-2.96a2.345 2.345 0 0 1 .158-.015 60.295 60.295 0 0 1 1.369-.026Z"})]}),e("defs",{children:e("clipPath",{id:"a",children:e("path",{fill:"#fff",d:"M0 0h28v11.457H0z",transform:"translate(2 10.271)"})})})]});case"Dismiss":return e("svg",{width:"44",height:"44",viewBox:"0 0 44 44",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M28.7071 15.2929C28.3166 14.9024 27.6834 14.9024 27.2929 15.2929L22 20.5858L16.7071 15.2929C16.3166 14.9024 15.6834 14.9024 15.2929 15.2929C14.9024 15.6834 14.9024 16.3166 15.2929 16.7071L20.5858 22L15.2929 27.2929C14.9024 27.6834 14.9024 28.3166 15.2929 28.7071C15.6834 29.0976 16.3166 29.0976 16.7071 28.7071L22 23.4142L27.2929 28.7071C27.6834 29.0976 28.3166 29.0976 28.7071 28.7071C29.0976 28.3166 29.0976 27.6834 28.7071 27.2929L23.4142 22L28.7071 16.7071C29.0976 16.3166 29.0976 15.6834 28.7071 15.2929Z",fill:l})});case"Fractions":return e("svg",{width:"44",height:"44",viewBox:"0 0 44 44",fill:"none",xmlns:"http://www.w3.org/2000/svg"});default:throw new Error(`Invalid icon type: ${n}`)}};b.__docgenInfo={description:"",methods:[],displayName:"IconAsset",props:{tintColor:{required:!0,tsType:{name:"string"},description:""},type:{required:!0,tsType:{name:"union",raw:`| "Geometry" | "Operators" | "Numbers" | "Fractions" diff --git a/assets/item-editor.stories-9IrCZRhE.js b/assets/item-editor.stories-JVhhip1k.js similarity index 64% rename from assets/item-editor.stories-9IrCZRhE.js rename to assets/item-editor.stories-JVhhip1k.js index 86e3c05dcf..4d314cb291 100644 --- a/assets/item-editor.stories-9IrCZRhE.js +++ b/assets/item-editor.stories-JVhhip1k.js @@ -1,4 +1,4 @@ -import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{r as E}from"./index-TT1qJ6UJ.js";import{I as o}from"./item-extras-editor-2WxH27E_.js";/* empty css */import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";const g=t=>{const{onChange:x,...n}=t,[c,d]=E.useState(n);return s(o,{...c,onChange:m=>{var i;(i=t.onChange)==null||i.call(t,m),d(u=>({...u,...m}))}})},pr={title:"PerseusEditor/Item Extras Editor",component:o,render:t=>s(g,{...t}),argTypes:{onChange:{action:"changed"}}},r={args:{...o.defaultProps}};var p,e,a;r.parameters={...r.parameters,docs:{...(p=r.parameters)==null?void 0:p.docs,source:{originalSource:`{ +import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{r as E}from"./index-TT1qJ6UJ.js";import{I as o}from"./item-extras-editor-cTVEyrYD.js";/* empty css */import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";const g=t=>{const{onChange:x,...n}=t,[c,d]=E.useState(n);return s(o,{...c,onChange:m=>{var i;(i=t.onChange)==null||i.call(t,m),d(u=>({...u,...m}))}})},pr={title:"PerseusEditor/Item Extras Editor",component:o,render:t=>s(g,{...t}),argTypes:{onChange:{action:"changed"}}},r={args:{...o.defaultProps}};var p,e,a;r.parameters={...r.parameters,docs:{...(p=r.parameters)==null?void 0:p.docs,source:{originalSource:`{ args: { ...ItemExtrasEditor.defaultProps } diff --git a/assets/item-extras-editor-2WxH27E_.js b/assets/item-extras-editor-cTVEyrYD.js similarity index 91% rename from assets/item-extras-editor-2WxH27E_.js rename to assets/item-extras-editor-cTVEyrYD.js index 506a5dbb33..d743c19365 100644 --- a/assets/item-extras-editor-2WxH27E_.js +++ b/assets/item-extras-editor-cTVEyrYD.js @@ -1 +1 @@ -import{j as a,a as o,F as h}from"./jsx-runtime-FVsy8kgq.js";import{I as u}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as p}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{V as r}from"./index-6h5t6F0w.js";import{C as f}from"./index-QCAhLhLD.js";import{s as d}from"./index-deFLJwr4.js";import{l as m}from"./index-awljIyHI.js";import{r as b}from"./index-TT1qJ6UJ.js";const{InfoTip:T}=p,l=class l extends b.Component{constructor(){super(...arguments),this.serialize=()=>{const e={...l.defaultProps};for(const s of u)e[s]=!!this.props[s];return e}}shouldShowFinancialCalculatorOptions(){return this.props.financialCalculatorMonthlyPayment||this.props.financialCalculatorTotalAmount||this.props.financialCalculatorTimeToPayOff}render(){return a("div",{className:"perseus-answer-editor",children:o("div",{className:"perseus-answer-options",children:[a(t,{label:"Show calculator",infoTip:"Use the calculator when completing difficult calculations is NOT the intent of the question. DON’T use the calculator when testing the student’s ability to complete different types of computations.",checked:this.props.calculator,onChange:e=>{this.props.onChange({calculator:e})}}),a(t,{label:"Show financial calculator",infoTip:"This provides the student with the ability to view a financial calculator, e.g., for answering financial questions. Once checked, requires at least one of the three options below to be checked.",checked:this.shouldShowFinancialCalculatorOptions(),onChange:e=>{this.props.onChange({financialCalculatorMonthlyPayment:e,financialCalculatorTotalAmount:e,financialCalculatorTimeToPayOff:e})}}),this.shouldShowFinancialCalculatorOptions()&&o(h,{children:[a(t,{label:"Include monthly payment",infoTip:"This provides the student with the ability to view a monthly payment calculator; e.g., given a loan amount, interest rate, and term, what is the monthly payment?",checked:this.props.financialCalculatorMonthlyPayment,onChange:e=>{this.props.onChange({financialCalculatorMonthlyPayment:e})},indent:!0}),a(t,{label:"Include total amount",infoTip:"This provides the student with the ability to view a total amount calculator; e.g., given a monthly payment, interest rate, and term, what is the total amount to be paid?",checked:this.props.financialCalculatorTotalAmount,onChange:e=>{this.props.onChange({financialCalculatorTotalAmount:e})},indent:!0}),a(t,{label:"Include time-to-pay-off",infoTip:"This provides the student with the ability to view a time to pay off calculator; e.g., given a loan amount, interest rate, and monthly payment, how long will it take to pay off the loan?",checked:this.props.financialCalculatorTimeToPayOff,onChange:e=>{this.props.onChange({financialCalculatorTimeToPayOff:e})},indent:!0})]}),a(t,{label:"Show periodic table",infoTip:"This provides the student with the ability to view a periodic table of the elements, e.g., for answering chemistry questions.",checked:this.props.periodicTable,onChange:e=>{this.props.onChange({periodicTable:e,periodicTableWithKey:!1})}}),this.props.periodicTable&&a(t,{label:"Include key/legend with periodic table",infoTip:"Include a key for HS courses; omit for AP chemistry.",checked:this.props.periodicTableWithKey,onChange:e=>{this.props.onChange({periodicTableWithKey:e})},indent:!0}),a(t,{label:"Show z table (statistics)",infoTip:"This provides the student with the ability to view a table of critical values for the z distribution, e.g. for answering statistics questions.",checked:this.props.zTable,onChange:e=>{this.props.onChange({zTable:e})}}),a(t,{label:"Show t table (statistics)",infoTip:"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.",checked:this.props.tTable,onChange:e=>{this.props.onChange({tTable:e})}}),a(t,{label:"Show chi-squared table (statistics)",infoTip:"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.",checked:this.props.chi2Table,onChange:e=>{this.props.onChange({chi2Table:e})}})]})})}};l.defaultProps={calculator:!1,chi2Table:!1,financialCalculatorMonthlyPayment:!1,financialCalculatorTotalAmount:!1,financialCalculatorTimeToPayOff:!1,periodicTable:!1,periodicTableWithKey:!1,tTable:!1,zTable:!1};let n=l;const t=i=>a(r,{style:[c.checkbox,i.indent?c.indented:void 0],children:a(f,{label:o(r,{style:{flexDirection:"row"},children:[i.label," ",a(T,{children:i.infoTip})]}),checked:i.checked,onChange:e=>i.onChange(e)})}),c=m.StyleSheet.create({indented:{marginInlineStart:d.large_24}});n.__docgenInfo={description:"",methods:[{name:"shouldShowFinancialCalculatorOptions",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"ItemExtrasEditor",props:{onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(props: Partial) => void",signature:{arguments:[{type:{name:"Partial",elements:[{name:"PerseusAnswerArea"}],raw:"Partial"},name:"props"}],return:{name:"void"}}},description:""},calculator:{defaultValue:{value:"false",computed:!1},required:!1},chi2Table:{defaultValue:{value:"false",computed:!1},required:!1},financialCalculatorMonthlyPayment:{defaultValue:{value:"false",computed:!1},required:!1},financialCalculatorTotalAmount:{defaultValue:{value:"false",computed:!1},required:!1},financialCalculatorTimeToPayOff:{defaultValue:{value:"false",computed:!1},required:!1},periodicTable:{defaultValue:{value:"false",computed:!1},required:!1},periodicTableWithKey:{defaultValue:{value:"false",computed:!1},required:!1},tTable:{defaultValue:{value:"false",computed:!1},required:!1},zTable:{defaultValue:{value:"false",computed:!1},required:!1}}};export{n as I}; +import{j as a,a as o,F as h}from"./jsx-runtime-FVsy8kgq.js";import{I as u}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as p}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{V as r}from"./index-6h5t6F0w.js";import{C as f}from"./index-QCAhLhLD.js";import{s as d}from"./index-deFLJwr4.js";import{l as m}from"./index-awljIyHI.js";import{r as b}from"./index-TT1qJ6UJ.js";const{InfoTip:T}=p,l=class l extends b.Component{constructor(){super(...arguments),this.serialize=()=>{const e={...l.defaultProps};for(const s of u)e[s]=!!this.props[s];return e}}shouldShowFinancialCalculatorOptions(){return this.props.financialCalculatorMonthlyPayment||this.props.financialCalculatorTotalAmount||this.props.financialCalculatorTimeToPayOff}render(){return a("div",{className:"perseus-answer-editor",children:o("div",{className:"perseus-answer-options",children:[a(t,{label:"Show calculator",infoTip:"Use the calculator when completing difficult calculations is NOT the intent of the question. DON’T use the calculator when testing the student’s ability to complete different types of computations.",checked:this.props.calculator,onChange:e=>{this.props.onChange({calculator:e})}}),a(t,{label:"Show financial calculator",infoTip:"This provides the student with the ability to view a financial calculator, e.g., for answering financial questions. Once checked, requires at least one of the three options below to be checked.",checked:this.shouldShowFinancialCalculatorOptions(),onChange:e=>{this.props.onChange({financialCalculatorMonthlyPayment:e,financialCalculatorTotalAmount:e,financialCalculatorTimeToPayOff:e})}}),this.shouldShowFinancialCalculatorOptions()&&o(h,{children:[a(t,{label:"Include monthly payment",infoTip:"This provides the student with the ability to view a monthly payment calculator; e.g., given a loan amount, interest rate, and term, what is the monthly payment?",checked:this.props.financialCalculatorMonthlyPayment,onChange:e=>{this.props.onChange({financialCalculatorMonthlyPayment:e})},indent:!0}),a(t,{label:"Include total amount",infoTip:"This provides the student with the ability to view a total amount calculator; e.g., given a monthly payment, interest rate, and term, what is the total amount to be paid?",checked:this.props.financialCalculatorTotalAmount,onChange:e=>{this.props.onChange({financialCalculatorTotalAmount:e})},indent:!0}),a(t,{label:"Include time-to-pay-off",infoTip:"This provides the student with the ability to view a time to pay off calculator; e.g., given a loan amount, interest rate, and monthly payment, how long will it take to pay off the loan?",checked:this.props.financialCalculatorTimeToPayOff,onChange:e=>{this.props.onChange({financialCalculatorTimeToPayOff:e})},indent:!0})]}),a(t,{label:"Show periodic table",infoTip:"This provides the student with the ability to view a periodic table of the elements, e.g., for answering chemistry questions.",checked:this.props.periodicTable,onChange:e=>{this.props.onChange({periodicTable:e,periodicTableWithKey:!1})}}),this.props.periodicTable&&a(t,{label:"Include key/legend with periodic table",infoTip:"Include a key for HS courses; omit for AP chemistry.",checked:this.props.periodicTableWithKey,onChange:e=>{this.props.onChange({periodicTableWithKey:e})},indent:!0}),a(t,{label:"Show z table (statistics)",infoTip:"This provides the student with the ability to view a table of critical values for the z distribution, e.g. for answering statistics questions.",checked:this.props.zTable,onChange:e=>{this.props.onChange({zTable:e})}}),a(t,{label:"Show t table (statistics)",infoTip:"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.",checked:this.props.tTable,onChange:e=>{this.props.onChange({tTable:e})}}),a(t,{label:"Show chi-squared table (statistics)",infoTip:"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.",checked:this.props.chi2Table,onChange:e=>{this.props.onChange({chi2Table:e})}})]})})}};l.defaultProps={calculator:!1,chi2Table:!1,financialCalculatorMonthlyPayment:!1,financialCalculatorTotalAmount:!1,financialCalculatorTimeToPayOff:!1,periodicTable:!1,periodicTableWithKey:!1,tTable:!1,zTable:!1};let n=l;const t=i=>a(r,{style:[c.checkbox,i.indent?c.indented:void 0],children:a(f,{label:o(r,{style:{flexDirection:"row"},children:[i.label," ",a(T,{children:i.infoTip})]}),checked:i.checked,onChange:e=>i.onChange(e)})}),c=m.StyleSheet.create({indented:{marginInlineStart:d.large_24}});n.__docgenInfo={description:"",methods:[{name:"shouldShowFinancialCalculatorOptions",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"ItemExtrasEditor",props:{onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(props: Partial) => void",signature:{arguments:[{type:{name:"Partial",elements:[{name:"PerseusAnswerArea"}],raw:"Partial"},name:"props"}],return:{name:"void"}}},description:""},calculator:{defaultValue:{value:"false",computed:!1},required:!1},chi2Table:{defaultValue:{value:"false",computed:!1},required:!1},financialCalculatorMonthlyPayment:{defaultValue:{value:"false",computed:!1},required:!1},financialCalculatorTotalAmount:{defaultValue:{value:"false",computed:!1},required:!1},financialCalculatorTimeToPayOff:{defaultValue:{value:"false",computed:!1},required:!1},periodicTable:{defaultValue:{value:"false",computed:!1},required:!1},periodicTableWithKey:{defaultValue:{value:"false",computed:!1},required:!1},tTable:{defaultValue:{value:"false",computed:!1},required:!1},zTable:{defaultValue:{value:"false",computed:!1},required:!1}}};export{n as I}; diff --git a/assets/keypad-button-rKskH7oM.js b/assets/keypad-button-rKskH7oM.js index ad0f0cf8bc..f2c7457bae 100644 --- a/assets/keypad-button-rKskH7oM.js +++ b/assets/keypad-button-rKskH7oM.js @@ -1,4 +1,4 @@ -import{j as n}from"./jsx-runtime-FVsy8kgq.js";import{C as c}from"./index-WNT3sUKf.js";import{V as i}from"./index-6h5t6F0w.js";import{c as t}from"./index-deFLJwr4.js";import{l as m}from"./index-awljIyHI.js";import{B as g}from"./button-assets-txIojR3b.js";const h=({coord:a,keyConfig:o,onClickKey:s,style:u,secondary:l,action:p})=>{const d=l?"#F6F6F7":p?"#DBDCDD":void 0;return n(i,{style:{gridColumn:a[0]+1,gridRow:a[1]+1,...u},testId:o.id,children:n(c,{onClick:r=>s(o.id,r),onMouseDown:r=>r.preventDefault(),style:e.clickable,"aria-label":o.ariaLabel,children:({hovered:r,focused:y,pressed:b})=>n(i,{style:[e.outerBoxBase],children:n(i,{style:[e.base,d!=null?{background:d}:void 0,r&&e.hovered,y&&e.focused,b&&e.pressed],children:n(g,{id:o.id})})})})})},e=m.StyleSheet.create({base:{display:"flex",justifyContent:"center",alignItems:"center",boxShadow:`0px 1px 0px ${t.offBlack32}`,boxSizing:"border-box",background:t.white,borderRadius:4,borderWidth:2,borderStyle:"solid",borderColor:"transparent",flex:1,minHeight:42,minWidth:42,padding:1,fontFamily:'Lato, "Noto Sans", sans-serif'},hovered:{borderColor:t.blue,padding:1,boxShadow:"none"},focused:{borderColor:t.blue,padding:0,boxShadow:"none"},pressed:{border:"2px solid #1B50B3",padding:0,background:`linear-gradient(0deg, rgba(24, 101, 242, 0.32), rgba(24, 101, 242, 0.32)), ${t.white}`,boxShadow:"none"},outerBoxBase:{padding:1,height:"100%",width:"100%",boxSizing:"border-box",borderRadius:7,border:"2px solid transparent"},clickable:{width:"100%",height:"100%",boxSizing:"border-box",":focus":{outline:"none"}}});h.__docgenInfo={description:"",methods:[],displayName:"KeypadButton",props:{coord:{required:!0,tsType:{name:"unknown"},description:""},keyConfig:{required:!0,tsType:{name:"signature",type:"object",raw:`{ +import{j as n}from"./jsx-runtime-FVsy8kgq.js";import{C as c}from"./index-2dmvOE3q.js";import{V as i}from"./index-6h5t6F0w.js";import{c as t}from"./index-deFLJwr4.js";import{l as m}from"./index-awljIyHI.js";import{B as g}from"./button-assets-txIojR3b.js";const h=({coord:a,keyConfig:o,onClickKey:s,style:u,secondary:l,action:p})=>{const d=l?"#F6F6F7":p?"#DBDCDD":void 0;return n(i,{style:{gridColumn:a[0]+1,gridRow:a[1]+1,...u},testId:o.id,children:n(c,{onClick:r=>s(o.id,r),onMouseDown:r=>r.preventDefault(),style:e.clickable,"aria-label":o.ariaLabel,children:({hovered:r,focused:y,pressed:b})=>n(i,{style:[e.outerBoxBase],children:n(i,{style:[e.base,d!=null?{background:d}:void 0,r&&e.hovered,y&&e.focused,b&&e.pressed],children:n(g,{id:o.id})})})})})},e=m.StyleSheet.create({base:{display:"flex",justifyContent:"center",alignItems:"center",boxShadow:`0px 1px 0px ${t.offBlack32}`,boxSizing:"border-box",background:t.white,borderRadius:4,borderWidth:2,borderStyle:"solid",borderColor:"transparent",flex:1,minHeight:42,minWidth:42,padding:1,fontFamily:'Lato, "Noto Sans", sans-serif'},hovered:{borderColor:t.blue,padding:1,boxShadow:"none"},focused:{borderColor:t.blue,padding:0,boxShadow:"none"},pressed:{border:"2px solid #1B50B3",padding:0,background:`linear-gradient(0deg, rgba(24, 101, 242, 0.32), rgba(24, 101, 242, 0.32)), ${t.white}`,boxShadow:"none"},outerBoxBase:{padding:1,height:"100%",width:"100%",boxSizing:"border-box",borderRadius:7,border:"2px solid transparent"},clickable:{width:"100%",height:"100%",boxSizing:"border-box",":focus":{outline:"none"}}});h.__docgenInfo={description:"",methods:[],displayName:"KeypadButton",props:{coord:{required:!0,tsType:{name:"unknown"},description:""},keyConfig:{required:!0,tsType:{name:"signature",type:"object",raw:`{ id: Key; type: KeyType; icon: IconConfig; diff --git a/assets/keypad-button.stories-tDGMB8WS.js b/assets/keypad-button.stories-tDGMB8WS.js index cb0f418cbb..2d3485d3b0 100644 --- a/assets/keypad-button.stories-tDGMB8WS.js +++ b/assets/keypad-button.stories-tDGMB8WS.js @@ -1,4 +1,4 @@ -import{j as t,a as g}from"./jsx-runtime-FVsy8kgq.js";import{a as c}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{K as m,m as k}from"./button-assets-txIojR3b.js";import{K as l}from"./keypad-button-rKskH7oM.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./index-WNT3sUKf.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-deFLJwr4.js";const a=m(k),E={title:"math-input/components/Keypad Button",args:{keyConfig:a.PLUS,coord:[0,0]},argTypes:{keyConfig:{control:"select",options:{...a}}}},n=({keyConfig:o=m.PLUS,coord:e=[0,0]})=>t("div",{style:{width:200,height:200,backgroundColor:"#DBDCDD",display:"flex"},children:t("div",{style:{width:58,margin:"auto"},children:t(l,{keyConfig:o,coord:e,onClickKey:c("pressed")})})}),r=({...o})=>t("div",{style:{backgroundColor:"#DBDCDD",display:"grid",gridTemplateColumns:"repeat(6, 1fr)",gap:"25px"},children:Object.keys(a).map(e=>g("div",{style:{width:58,margin:"auto",overflowWrap:"break-word"},children:[e,t(l,{keyConfig:a[e],onClickKey:c("pressed"),coord:[0,0]})]},e))});n.__docgenInfo={description:"",methods:[],displayName:"Default",props:{coord:{required:!1,tsType:{name:"unknown"},description:"",defaultValue:{value:"[0, 0]",computed:!1}},keyConfig:{required:!1,tsType:{name:"signature",type:"object",raw:`{ +import{j as t,a as g}from"./jsx-runtime-FVsy8kgq.js";import{a as c}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{K as m,m as k}from"./button-assets-txIojR3b.js";import{K as l}from"./keypad-button-rKskH7oM.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./index-2dmvOE3q.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-deFLJwr4.js";const a=m(k),E={title:"math-input/components/Keypad Button",args:{keyConfig:a.PLUS,coord:[0,0]},argTypes:{keyConfig:{control:"select",options:{...a}}}},n=({keyConfig:o=m.PLUS,coord:e=[0,0]})=>t("div",{style:{width:200,height:200,backgroundColor:"#DBDCDD",display:"flex"},children:t("div",{style:{width:58,margin:"auto"},children:t(l,{keyConfig:o,coord:e,onClickKey:c("pressed")})})}),r=({...o})=>t("div",{style:{backgroundColor:"#DBDCDD",display:"grid",gridTemplateColumns:"repeat(6, 1fr)",gap:"25px"},children:Object.keys(a).map(e=>g("div",{style:{width:58,margin:"auto",overflowWrap:"break-word"},children:[e,t(l,{keyConfig:a[e],onClickKey:c("pressed"),coord:[0,0]})]},e))});n.__docgenInfo={description:"",methods:[],displayName:"Default",props:{coord:{required:!1,tsType:{name:"unknown"},description:"",defaultValue:{value:"[0, 0]",computed:!1}},keyConfig:{required:!1,tsType:{name:"signature",type:"object",raw:`{ id: Key; type: KeyType; icon: IconConfig; diff --git a/assets/keypad-mathquill.stories-f3PwEzb7.js b/assets/keypad-mathquill.stories-f3PwEzb7.js index 497cc3734f..8ff5cc686b 100644 --- a/assets/keypad-mathquill.stories-f3PwEzb7.js +++ b/assets/keypad-mathquill.stories-f3PwEzb7.js @@ -1,4 +1,4 @@ -import{a as k,j as n}from"./jsx-runtime-FVsy8kgq.js";import{P as F,a as g}from"./index-BPSWBbj5.js";import{c as K}from"./index-deFLJwr4.js";import{r as o}from"./index-TT1qJ6UJ.js";import{m as v}from"./button-assets-txIojR3b.js";import{C as b,K as M}from"./mobile-keypad-hKjeQGNp.js";import{c as R,g as p,a as S}from"./key-translator-IA-2V2LV.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-h_CiYGGb.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";const te={title:"math-input/components/v2 Keypad With Mathquill"};function a(){const i=o.useRef(null),[t,h]=o.useState(),[s,l]=o.useState(!0),[y,d]=o.useState(b.NONE);o.useEffect(()=>{if(!t&&i.current){const e=R(i.current,"en",v,r=>({...r,handlers:{edit:x=>{d(p(x))}}}));h(e)}},[t]);const f=S("en",{sin:"sin",cos:"cos",tan:"tan"});function C(e){if(!t)return;e==="DISMISS"&&l(!1);const r=f[e];r?(r(t,e),d(p(t))):console.warn(`No translation to Mathquill for: ${e}`)}return k("div",{style:{maxWidth:"400px",margin:"2em"},children:[n(F,{content:n(g,{style:{padding:10,maxWidth:"initial"},children:n(M,{extraKeys:["x","y","PI","THETA"],onClickKey:C,cursorContext:y,advancedRelations:!0,basicRelations:!0,divisionKey:!0,logarithms:!0,convertDotToTimes:!0,preAlgebra:!0,trigonometry:!0,onAnalyticsEvent:async()=>{},showDismiss:!0})}),dismissEnabled:!0,opened:s,children:n("div",{style:{width:"100%",marginBottom:"1em",border:`1px solid ${K.offBlack16}`},ref:i})}),n("button",{onClick:()=>l(!s),children:s?"close keypad":"open keypad"})]})}a.__docgenInfo={description:"",methods:[],displayName:"V2KeypadWithMathquill"};var c,m,u;a.parameters={...a.parameters,docs:{...(c=a.parameters)==null?void 0:c.docs,source:{originalSource:`function V2KeypadWithMathquill() { +import{a as k,j as n}from"./jsx-runtime-FVsy8kgq.js";import{P as F,a as g}from"./index-BPSWBbj5.js";import{c as K}from"./index-deFLJwr4.js";import{r as o}from"./index-TT1qJ6UJ.js";import{m as v}from"./button-assets-txIojR3b.js";import{C as b,K as M}from"./mobile-keypad-hKjeQGNp.js";import{c as R,g as p,a as S}from"./key-translator-IA-2V2LV.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-h_CiYGGb.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";const te={title:"math-input/components/v2 Keypad With Mathquill"};function a(){const i=o.useRef(null),[t,h]=o.useState(),[s,l]=o.useState(!0),[y,d]=o.useState(b.NONE);o.useEffect(()=>{if(!t&&i.current){const e=R(i.current,"en",v,r=>({...r,handlers:{edit:x=>{d(p(x))}}}));h(e)}},[t]);const f=S("en",{sin:"sin",cos:"cos",tan:"tan"});function C(e){if(!t)return;e==="DISMISS"&&l(!1);const r=f[e];r?(r(t,e),d(p(t))):console.warn(`No translation to Mathquill for: ${e}`)}return k("div",{style:{maxWidth:"400px",margin:"2em"},children:[n(F,{content:n(g,{style:{padding:10,maxWidth:"initial"},children:n(M,{extraKeys:["x","y","PI","THETA"],onClickKey:C,cursorContext:y,advancedRelations:!0,basicRelations:!0,divisionKey:!0,logarithms:!0,convertDotToTimes:!0,preAlgebra:!0,trigonometry:!0,onAnalyticsEvent:async()=>{},showDismiss:!0})}),dismissEnabled:!0,opened:s,children:n("div",{style:{width:"100%",marginBottom:"1em",border:`1px solid ${K.offBlack16}`},ref:i})}),n("button",{onClick:()=>l(!s),children:s?"close keypad":"open keypad"})]})}a.__docgenInfo={description:"",methods:[],displayName:"V2KeypadWithMathquill"};var c,m,u;a.parameters={...a.parameters,docs:{...(c=a.parameters)==null?void 0:c.docs,source:{originalSource:`function V2KeypadWithMathquill() { const mathFieldWrapperRef = React.useRef(null); const [mathField, setMathField] = React.useState(); const [keypadOpen, setKeypadOpen] = React.useState(true); diff --git a/assets/keypad-pages.stories-UYZo0hoJ.js b/assets/keypad-pages.stories-UYZo0hoJ.js index 309cf4a229..2a86655245 100644 --- a/assets/keypad-pages.stories-UYZo0hoJ.js +++ b/assets/keypad-pages.stories-UYZo0hoJ.js @@ -1 +1 @@ -import{j as o}from"./jsx-runtime-FVsy8kgq.js";import{a}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{I as g}from"./index-VDi1Le_1.js";import{N as y,O as I,G as k}from"./operators-page-C_EsmjPW.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./index-WNT3sUKf.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-deFLJwr4.js";const x={title:"math-input/components/Keypad pages",parameters:{backgrounds:{values:[{name:"light background",value:"white",default:!0}]},viewport:{defaultViewport:"iphone6",viewports:g}}},e=()=>o(y,{onClickKey:a("onClickKey")}),r=()=>o(I,{onClickKey:a("onClickKey"),preAlgebra:!0,logarithms:!0,basicRelations:!0,advancedRelations:!0}),t=()=>o(k,{onClickKey:a("onClickKey")});e.__docgenInfo={description:"",methods:[],displayName:"NumericInput"};r.__docgenInfo={description:"",methods:[],displayName:"PreAlgebraInput"};t.__docgenInfo={description:"",methods:[],displayName:"TrigonometryInput"};var i,s,n;e.parameters={...e.parameters,docs:{...(i=e.parameters)==null?void 0:i.docs,source:{originalSource:'(): React.ReactElement => ',...(n=(s=e.parameters)==null?void 0:s.docs)==null?void 0:n.source}}};var c,p,m;r.parameters={...r.parameters,docs:{...(c=r.parameters)==null?void 0:c.docs,source:{originalSource:'(): React.ReactElement => ',...(m=(p=r.parameters)==null?void 0:p.docs)==null?void 0:m.source}}};var u,l,d;t.parameters={...t.parameters,docs:{...(u=t.parameters)==null?void 0:u.docs,source:{originalSource:'(): React.ReactElement => ',...(d=(l=t.parameters)==null?void 0:l.docs)==null?void 0:d.source}}};const G=["NumericInput","PreAlgebraInput","TrigonometryInput"];export{e as NumericInput,r as PreAlgebraInput,t as TrigonometryInput,G as __namedExportsOrder,x as default}; +import{j as o}from"./jsx-runtime-FVsy8kgq.js";import{a}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{I as g}from"./index-VDi1Le_1.js";import{N as y,O as I,G as k}from"./operators-page-C_EsmjPW.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./index-2dmvOE3q.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-deFLJwr4.js";const x={title:"math-input/components/Keypad pages",parameters:{backgrounds:{values:[{name:"light background",value:"white",default:!0}]},viewport:{defaultViewport:"iphone6",viewports:g}}},e=()=>o(y,{onClickKey:a("onClickKey")}),r=()=>o(I,{onClickKey:a("onClickKey"),preAlgebra:!0,logarithms:!0,basicRelations:!0,advancedRelations:!0}),t=()=>o(k,{onClickKey:a("onClickKey")});e.__docgenInfo={description:"",methods:[],displayName:"NumericInput"};r.__docgenInfo={description:"",methods:[],displayName:"PreAlgebraInput"};t.__docgenInfo={description:"",methods:[],displayName:"TrigonometryInput"};var i,s,n;e.parameters={...e.parameters,docs:{...(i=e.parameters)==null?void 0:i.docs,source:{originalSource:'(): React.ReactElement => ',...(n=(s=e.parameters)==null?void 0:s.docs)==null?void 0:n.source}}};var c,p,m;r.parameters={...r.parameters,docs:{...(c=r.parameters)==null?void 0:c.docs,source:{originalSource:'(): React.ReactElement => ',...(m=(p=r.parameters)==null?void 0:p.docs)==null?void 0:m.source}}};var u,l,d;t.parameters={...t.parameters,docs:{...(u=t.parameters)==null?void 0:u.docs,source:{originalSource:'(): React.ReactElement => ',...(d=(l=t.parameters)==null?void 0:l.docs)==null?void 0:d.source}}};const G=["NumericInput","PreAlgebraInput","TrigonometryInput"];export{e as NumericInput,r as PreAlgebraInput,t as TrigonometryInput,G as __namedExportsOrder,x as default}; diff --git a/assets/label-image-editor-mryVz6qt.js b/assets/label-image-editor-cReH8dJ4.js similarity index 83% rename from assets/label-image-editor-mryVz6qt.js rename to assets/label-image-editor-cReH8dJ4.js index a705fca842..1c5b857e52 100644 --- a/assets/label-image-editor-mryVz6qt.js +++ b/assets/label-image-editor-cReH8dJ4.js @@ -1 +1 @@ -import{a as g,j as i}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import{U as f}from"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{E as y}from"./editor-jsonify-iuVqcZSO.js";import{l}from"./index-awljIyHI.js";import{r as C}from"./index-TT1qJ6UJ.js";import{F as k}from"./form-wrapped-text-field-DtGz9PJ5.js";import{A}from"./answer-choices-SJhxKMzc.js";import{B as v}from"./behavior-X6OD0iDh.js";import{Q as w}from"./question-markers-WvVDMwno.js";import{S as b}from"./select-image-cimnxdnG.js";const h=class h extends C.Component{constructor(){super(...arguments),this.getSaveWarnings=()=>{const{choices:e,imageAlt:t,imageUrl:s,markers:a}=this.props,r=[];if(e.length<2&&r.push("Question requires at least two answer choices"),s?t||r.push("Question image has no alt text"):r.push("Image is not specified for question"),!a.length)r.push("Question has no markers, to label answers on image");else{let n=0,o=0;for(const m of a)m.answers.length||n++,m.label||o++;n&&r.push(`Question has ${n} markers with no answers selected`),o&&r.push(`Question has ${o} markers with no ARIA label`)}return r},this.handleImageChange=e=>{this.props.onChange({imageUrl:e,imageWidth:0,imageHeight:0}),e&&f.getImageSize(e,(t,s)=>{this.props.onChange({imageWidth:t,imageHeight:s})})},this.handleAltChange=e=>{this.props.onChange({imageAlt:e})},this.handleChoicesChange=e=>{this.props.onChange({choices:e})},this.handleMarkersChange=e=>{this.props.onChange({markers:e})},this.handleBehaviorChange=e=>{this.props.onChange(e)}}componentDidUpdate(e){const t={};e.markers.forEach(a=>t[`${a.x}.${a.y}`]=a);const s=this.props.markers.map((a,r)=>t.hasOwnProperty(`${a.x}.${a.y}`)?-1:r).filter(a=>a!==-1);s.length&&this._questionMarkers&&this._questionMarkers.openDropdownForMarkerIndices(s)}serialize(){return y.serialize.call(this)}render(){const{choices:e,imageAlt:t,imageUrl:s,imageWidth:a,imageHeight:r,markers:n,multipleAnswers:o,hideChoicesFromInstructions:m}=this.props,c=s&&a>0&&r>0;return g("div",{children:[i(b,{onChange:this.handleImageChange,url:s}),i("div",{className:l.css(p.smallSpacer)}),c&&i(k,{placeholder:"Alt text (for screen readers)",onChange:d=>this.handleAltChange(d.target.value),value:t,width:"100%"}),i("div",{className:l.css(p.largeSpacer)}),i(w,{choices:e,imageUrl:c?s:"",imageWidth:a,imageHeight:r,markers:n,onChange:this.handleMarkersChange,ref:d=>this._questionMarkers=d}),i("div",{className:l.css(p.largeSpacer)}),i(A,{choices:e,onChange:this.handleChoicesChange}),i("div",{className:l.css(p.largeSpacer)}),i(v,{preferredPopoverDirection:"NONE",multipleAnswers:o,hideChoicesFromInstructions:m,onChange:this.handleBehaviorChange})]})}};h.defaultProps={choices:[],imageAlt:"",imageUrl:"",imageWidth:0,imageHeight:0,markers:[],multipleAnswers:!1,hideChoicesFromInstructions:!1},h.widgetName="label-image";let u=h;const p=l.StyleSheet.create({largeSpacer:{height:32},smallSpacer:{height:16}});u.__docgenInfo={description:"",methods:[{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:{type:{name:"any"}}},{name:"handleImageChange",docblock:null,modifiers:[],params:[{name:"url",optional:!1,type:{name:"string"}}],returns:null},{name:"handleAltChange",docblock:null,modifiers:[],params:[{name:"alt",optional:!1,type:{name:"string"}}],returns:null},{name:"handleChoicesChange",docblock:null,modifiers:[],params:[{name:"choices",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}}],returns:null},{name:"handleMarkersChange",docblock:null,modifiers:[],params:[{name:"markers",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"MarkerType"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}}],returns:null},{name:"handleBehaviorChange",docblock:null,modifiers:[],params:[{name:"options",optional:!1,type:{name:"any"}}],returns:null}],displayName:"LabelImageEditor",props:{choices:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[]",computed:!1}},imageAlt:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},imageUrl:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},imageWidth:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"0",computed:!1}},imageHeight:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"0",computed:!1}},markers:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"MarkerType"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[]",computed:!1}},multipleAnswers:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},hideChoicesFromInstructions:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(options: any) => void",signature:{arguments:[{type:{name:"any"},name:"options"}],return:{name:"void"}}},description:""}}};export{u as L}; +import{a as g,j as i}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import{U as f}from"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{E as y}from"./editor-jsonify-SX5E4P_Y.js";import{l}from"./index-awljIyHI.js";import{r as C}from"./index-TT1qJ6UJ.js";import{F as k}from"./form-wrapped-text-field-BopYavUW.js";import{A}from"./answer-choices-2q3o0s95.js";import{B as v}from"./behavior-bUq-LmpJ.js";import{Q as w}from"./question-markers-h3QT0QS4.js";import{S as b}from"./select-image--koiUF2W.js";const h=class h extends C.Component{constructor(){super(...arguments),this.getSaveWarnings=()=>{const{choices:e,imageAlt:t,imageUrl:s,markers:a}=this.props,r=[];if(e.length<2&&r.push("Question requires at least two answer choices"),s?t||r.push("Question image has no alt text"):r.push("Image is not specified for question"),!a.length)r.push("Question has no markers, to label answers on image");else{let n=0,o=0;for(const m of a)m.answers.length||n++,m.label||o++;n&&r.push(`Question has ${n} markers with no answers selected`),o&&r.push(`Question has ${o} markers with no ARIA label`)}return r},this.handleImageChange=e=>{this.props.onChange({imageUrl:e,imageWidth:0,imageHeight:0}),e&&f.getImageSize(e,(t,s)=>{this.props.onChange({imageWidth:t,imageHeight:s})})},this.handleAltChange=e=>{this.props.onChange({imageAlt:e})},this.handleChoicesChange=e=>{this.props.onChange({choices:e})},this.handleMarkersChange=e=>{this.props.onChange({markers:e})},this.handleBehaviorChange=e=>{this.props.onChange(e)}}componentDidUpdate(e){const t={};e.markers.forEach(a=>t[`${a.x}.${a.y}`]=a);const s=this.props.markers.map((a,r)=>t.hasOwnProperty(`${a.x}.${a.y}`)?-1:r).filter(a=>a!==-1);s.length&&this._questionMarkers&&this._questionMarkers.openDropdownForMarkerIndices(s)}serialize(){return y.serialize.call(this)}render(){const{choices:e,imageAlt:t,imageUrl:s,imageWidth:a,imageHeight:r,markers:n,multipleAnswers:o,hideChoicesFromInstructions:m}=this.props,c=s&&a>0&&r>0;return g("div",{children:[i(b,{onChange:this.handleImageChange,url:s}),i("div",{className:l.css(p.smallSpacer)}),c&&i(k,{placeholder:"Alt text (for screen readers)",onChange:d=>this.handleAltChange(d.target.value),value:t,width:"100%"}),i("div",{className:l.css(p.largeSpacer)}),i(w,{choices:e,imageUrl:c?s:"",imageWidth:a,imageHeight:r,markers:n,onChange:this.handleMarkersChange,ref:d=>this._questionMarkers=d}),i("div",{className:l.css(p.largeSpacer)}),i(A,{choices:e,onChange:this.handleChoicesChange}),i("div",{className:l.css(p.largeSpacer)}),i(v,{preferredPopoverDirection:"NONE",multipleAnswers:o,hideChoicesFromInstructions:m,onChange:this.handleBehaviorChange})]})}};h.defaultProps={choices:[],imageAlt:"",imageUrl:"",imageWidth:0,imageHeight:0,markers:[],multipleAnswers:!1,hideChoicesFromInstructions:!1},h.widgetName="label-image";let u=h;const p=l.StyleSheet.create({largeSpacer:{height:32},smallSpacer:{height:16}});u.__docgenInfo={description:"",methods:[{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:{type:{name:"any"}}},{name:"handleImageChange",docblock:null,modifiers:[],params:[{name:"url",optional:!1,type:{name:"string"}}],returns:null},{name:"handleAltChange",docblock:null,modifiers:[],params:[{name:"alt",optional:!1,type:{name:"string"}}],returns:null},{name:"handleChoicesChange",docblock:null,modifiers:[],params:[{name:"choices",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}}],returns:null},{name:"handleMarkersChange",docblock:null,modifiers:[],params:[{name:"markers",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"MarkerType"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}}],returns:null},{name:"handleBehaviorChange",docblock:null,modifiers:[],params:[{name:"options",optional:!1,type:{name:"any"}}],returns:null}],displayName:"LabelImageEditor",props:{choices:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[]",computed:!1}},imageAlt:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},imageUrl:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},imageWidth:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"0",computed:!1}},imageHeight:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"0",computed:!1}},markers:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"MarkerType"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[]",computed:!1}},multipleAnswers:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},hideChoicesFromInstructions:{required:!1,tsType:{name:"boolean"},description:"",defaultValue:{value:"false",computed:!1}},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(options: any) => void",signature:{arguments:[{type:{name:"any"},name:"options"}],return:{name:"void"}}},description:""}}};export{u as L}; diff --git a/assets/label-image-editor.stories-uSv6gsx4.js b/assets/label-image-editor.stories-riY_AgOu.js similarity index 66% rename from assets/label-image-editor.stories-uSv6gsx4.js rename to assets/label-image-editor.stories-riY_AgOu.js index d667431bd6..74da785173 100644 --- a/assets/label-image-editor.stories-uSv6gsx4.js +++ b/assets/label-image-editor.stories-riY_AgOu.js @@ -1,3 +1,3 @@ -import{j as o}from"./jsx-runtime-FVsy8kgq.js";import{l as e}from"./index-awljIyHI.js";import{r as s}from"./index-TT1qJ6UJ.js";import{L as n}from"./label-image-editor-mryVz6qt.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./editor-jsonify-iuVqcZSO.js";import"./form-wrapped-text-field-DtGz9PJ5.js";import"./answer-choices-SJhxKMzc.js";import"./components-GHvuFaIn.js";import"./behavior-X6OD0iDh.js";import"./question-markers-WvVDMwno.js";import"./marker-ika3cQ1R.js";import"./util-qk2aeK8X.js";import"./select-image-cimnxdnG.js";const st={title:"PerseusEditor/Widgets/Label Image Editor"},l=e.StyleSheet.create({wrapper:{width:338}});class c extends s.Component{constructor(){super(...arguments),this.state={imageAlt:"Map of Europe",choices:["Lamborghini","BMW","Volkswagen","Fiat","Porsche","Ferrari"],imageUrl:"https://ka-perseus-images.s3.amazonaws.com/2ee5fc32e35c5178373b39fd304b325b2994c913.png",imageWidth:1280,imageHeight:1024,markers:[{answers:["BMW","Volkswagen","Porsche"],label:"Germany",x:37.3,y:53.6},{answers:[],label:"",x:21,y:46},{answers:["Lamborghini","Fiat","Ferrari"],label:"Italy",x:41.4,y:78.8}]}}render(){return o("div",{className:e.css(l.wrapper),children:o(n,{...this.state,onChange:t=>this.setState({...this._widget.serialize(),...t}),ref:t=>this._widget=t})})}}const r=a=>o(c,{});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var i,m,p;r.parameters={...r.parameters,docs:{...(i=r.parameters)==null?void 0:i.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as o}from"./jsx-runtime-FVsy8kgq.js";import{l as e}from"./index-awljIyHI.js";import{r as s}from"./index-TT1qJ6UJ.js";import{L as n}from"./label-image-editor-cReH8dJ4.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./editor-jsonify-SX5E4P_Y.js";import"./form-wrapped-text-field-BopYavUW.js";import"./answer-choices-2q3o0s95.js";import"./components-h6HHhmoA.js";import"./behavior-bUq-LmpJ.js";import"./question-markers-h3QT0QS4.js";import"./marker-o8uSzdrK.js";import"./util-qk2aeK8X.js";import"./select-image--koiUF2W.js";const st={title:"PerseusEditor/Widgets/Label Image Editor"},l=e.StyleSheet.create({wrapper:{width:338}});class c extends s.Component{constructor(){super(...arguments),this.state={imageAlt:"Map of Europe",choices:["Lamborghini","BMW","Volkswagen","Fiat","Porsche","Ferrari"],imageUrl:"https://ka-perseus-images.s3.amazonaws.com/2ee5fc32e35c5178373b39fd304b325b2994c913.png",imageWidth:1280,imageHeight:1024,markers:[{answers:["BMW","Volkswagen","Porsche"],label:"Germany",x:37.3,y:53.6},{answers:[],label:"",x:21,y:46},{answers:["Lamborghini","Fiat","Ferrari"],label:"Italy",x:41.4,y:78.8}]}}render(){return o("div",{className:e.css(l.wrapper),children:o(n,{...this.state,onChange:t=>this.setState({...this._widget.serialize(),...t}),ref:t=>this._widget=t})})}}const r=a=>o(c,{});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var i,m,p;r.parameters={...r.parameters,docs:{...(i=r.parameters)==null?void 0:i.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(p=(m=r.parameters)==null?void 0:m.docs)==null?void 0:p.source}}};const nt=["Default"];export{r as Default,nt as __namedExportsOrder,st as default}; diff --git a/assets/label-image.stories-N_VL3eUK.js b/assets/label-image.stories-Ac84OpP3.js similarity index 90% rename from assets/label-image.stories-N_VL3eUK.js rename to assets/label-image.stories-Ac84OpP3.js index 2d488301a0..84367e6c01 100644 --- a/assets/label-image.stories-N_VL3eUK.js +++ b/assets/label-image.stories-Ac84OpP3.js @@ -1,4 +1,4 @@ -import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{R as l}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const W={content:`Carol created a chart and a bar graph to show how many of each type of vehicle were in her supermarket parking lot. +import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{R as l}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const W={content:`Carol created a chart and a bar graph to show how many of each type of vehicle were in her supermarket parking lot. Vehicle Type | Number in the parking lot :- | :-: diff --git a/assets/labeled-switch--NF5de2V.js b/assets/labeled-switch-Qne5XsM1.js similarity index 94% rename from assets/labeled-switch--NF5de2V.js rename to assets/labeled-switch-Qne5XsM1.js index 6c11ba1fe9..4251f937d9 100644 --- a/assets/labeled-switch--NF5de2V.js +++ b/assets/labeled-switch-Qne5XsM1.js @@ -1 +1 @@ -import{a as n,j as e}from"./jsx-runtime-FVsy8kgq.js";import{u as l,V as c}from"./index-6h5t6F0w.js";import{S as m}from"./index-qUyqkRvh.js";import{S as d}from"./article-renderer-6f7Dak4j.js";import{s as p}from"./index-deFLJwr4.js";import{a as u}from"./index-h_CiYGGb.js";import{l as h}from"./index-awljIyHI.js";const y=r=>{const{checked:s,label:i,style:o,onChange:a}=r,t=l().get("switch");return n(c,{style:[w.row,o],children:[e(d,{id:t,checked:s,onChange:a}),e(m,{size:p.xSmall_8}),e(u,{tag:"label",htmlFor:t,children:i})]})},w=h.StyleSheet.create({row:{flexDirection:"row",alignItems:"center"}});y.__docgenInfo={description:"",methods:[],displayName:"LabeledSwitch",props:{label:{required:!0,tsType:{name:"string"},description:""},checked:{required:!0,tsType:{name:"boolean"},description:""},style:{required:!1,tsType:{name:"StyleType"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValue: boolean) => void",signature:{arguments:[{type:{name:"boolean"},name:"newValue"}],return:{name:"void"}}},description:""}}};export{y as L}; +import{a as n,j as e}from"./jsx-runtime-FVsy8kgq.js";import{u as l,V as c}from"./index-6h5t6F0w.js";import{S as m}from"./index-qUyqkRvh.js";import{S as d}from"./article-renderer-TMdCDA85.js";import{s as p}from"./index-deFLJwr4.js";import{a as u}from"./index-h_CiYGGb.js";import{l as h}from"./index-awljIyHI.js";const y=r=>{const{checked:s,label:i,style:o,onChange:a}=r,t=l().get("switch");return n(c,{style:[w.row,o],children:[e(d,{id:t,checked:s,onChange:a}),e(m,{size:p.xSmall_8}),e(u,{tag:"label",htmlFor:t,children:i})]})},w=h.StyleSheet.create({row:{flexDirection:"row",alignItems:"center"}});y.__docgenInfo={description:"",methods:[],displayName:"LabeledSwitch",props:{label:{required:!0,tsType:{name:"string"},description:""},checked:{required:!0,tsType:{name:"boolean"},description:""},style:{required:!1,tsType:{name:"StyleType"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValue: boolean) => void",signature:{arguments:[{type:{name:"boolean"},name:"newValue"}],return:{name:"void"}}},description:""}}};export{y as L}; diff --git a/assets/line-stroke-select-CC0fFBuz.js b/assets/line-stroke-select-8a9MPfaw.js similarity index 94% rename from assets/line-stroke-select-CC0fFBuz.js rename to assets/line-stroke-select-8a9MPfaw.js index 5557b30744..7b0c988269 100644 --- a/assets/line-stroke-select-CC0fFBuz.js +++ b/assets/line-stroke-select-8a9MPfaw.js @@ -1 +1 @@ -import{a as t,j as e}from"./jsx-runtime-FVsy8kgq.js";import{S as i,O as a}from"./answer-choices-uB4giKvU.js";import{S as n}from"./index-qUyqkRvh.js";import{s as o}from"./index-deFLJwr4.js";import{a as d}from"./index-h_CiYGGb.js";import{l as m}from"./index-awljIyHI.js";const c=l=>{const{selectedValue:r,onChange:s}=l;return t(d,{tag:"label",style:p.lineStrokeSelect,children:["stroke",e(n,{size:o.xxxSmall_4}),t(i,{selectedValue:r,onChange:s,placeholder:"",children:[e(a,{value:"solid",label:"solid"}),e(a,{value:"dashed",label:"dashed"})]})]})},p=m.StyleSheet.create({lineStrokeSelect:{display:"flex",flexDirection:"row",alignItems:"center",minWidth:0}});c.__docgenInfo={description:"",methods:[],displayName:"LineStrokeSelect",props:{selectedValue:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValue: string) => void",signature:{arguments:[{type:{name:"string"},name:"newValue"}],return:{name:"void"}}},description:""}}};export{c as L}; +import{a as t,j as e}from"./jsx-runtime-FVsy8kgq.js";import{S as i,O as a}from"./answer-choices-xSqM961S.js";import{S as n}from"./index-qUyqkRvh.js";import{s as o}from"./index-deFLJwr4.js";import{a as d}from"./index-h_CiYGGb.js";import{l as m}from"./index-awljIyHI.js";const c=l=>{const{selectedValue:r,onChange:s}=l;return t(d,{tag:"label",style:p.lineStrokeSelect,children:["stroke",e(n,{size:o.xxxSmall_4}),t(i,{selectedValue:r,onChange:s,placeholder:"",children:[e(a,{value:"solid",label:"solid"}),e(a,{value:"dashed",label:"dashed"})]})]})},p=m.StyleSheet.create({lineStrokeSelect:{display:"flex",flexDirection:"row",alignItems:"center",minWidth:0}});c.__docgenInfo={description:"",methods:[],displayName:"LineStrokeSelect",props:{selectedValue:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newValue: string) => void",signature:{arguments:[{type:{name:"string"},name:"newValue"}],return:{name:"void"}}},description:""}}};export{c as L}; diff --git a/assets/line-swatch-xLt6fclZ.js b/assets/line-swatch-0Zcc1GCG.js similarity index 62% rename from assets/line-swatch-xLt6fclZ.js rename to assets/line-swatch-0Zcc1GCG.js index 26cf6b0092..34dde20478 100644 --- a/assets/line-swatch-xLt6fclZ.js +++ b/assets/line-swatch-0Zcc1GCG.js @@ -1 +1 @@ -import{j as t}from"./jsx-runtime-FVsy8kgq.js";import{l}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{V as i}from"./index-6h5t6F0w.js";import{c as a,s as e}from"./index-deFLJwr4.js";import{l as s}from"./index-awljIyHI.js";const n=p=>{const{color:r,lineStyle:o}=p;return t(i,{style:m.container,children:t(i,{"aria-label":`${r}, ${o}`,style:[m.lineSwatch,{border:`5px ${o} ${l[r]}`}]})})},m=s.StyleSheet.create({container:{backgroundColor:a.white,justifyContent:"center",padding:e.xSmall_8,borderRadius:e.xxxSmall_4},lineSwatch:{width:40}});n.__docgenInfo={description:"",methods:[],displayName:"LineSwatch",props:{color:{required:!0,tsType:{name:"LockedFigureColor"},description:""},lineStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""}}};export{n as L}; +import{j as t}from"./jsx-runtime-FVsy8kgq.js";import{l}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{V as i}from"./index-6h5t6F0w.js";import{c as a,s as e}from"./index-deFLJwr4.js";import{l as s}from"./index-awljIyHI.js";const n=p=>{const{color:r,lineStyle:o}=p;return t(i,{style:m.container,children:t(i,{"aria-label":`${r}, ${o}`,style:[m.lineSwatch,{border:`5px ${o} ${l[r]}`}]})})},m=s.StyleSheet.create({container:{backgroundColor:a.white,justifyContent:"center",padding:e.xSmall_8,borderRadius:e.xxxSmall_4},lineSwatch:{width:40}});n.__docgenInfo={description:"",methods:[],displayName:"LineSwatch",props:{color:{required:!0,tsType:{name:"LockedFigureColor"},description:""},lineStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""}}};export{n as L}; diff --git a/assets/locked-ellipse-settings-kWVnJxri.js b/assets/locked-ellipse-settings-TfTFulml.js similarity index 87% rename from assets/locked-ellipse-settings-kWVnJxri.js rename to assets/locked-ellipse-settings-TfTFulml.js index 5a5a56bea6..43788d9c39 100644 --- a/assets/locked-ellipse-settings-kWVnJxri.js +++ b/assets/locked-ellipse-settings-TfTFulml.js @@ -1,4 +1,4 @@ -import{a as m,j as t,F as T}from"./jsx-runtime-FVsy8kgq.js";import{l as _,h as I}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as G}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{B as H}from"./choice-E4eyMygy.js";import{V as u}from"./index-6h5t6F0w.js";import{S as J,O as K}from"./answer-choices-uB4giKvU.js";import{S as c}from"./index-qUyqkRvh.js";import{s as l,c as b}from"./index-deFLJwr4.js";import{a as C,L as Q}from"./index-h_CiYGGb.js";import{L as X,p as Y}from"./locked-figure-aria-RWwSDIb0.js";import{l as w}from"./index-awljIyHI.js";import{r as Z}from"./index-TT1qJ6UJ.js";import{S as ee}from"./scrollless-number-text-field-U5Bx_xXb.js";import{r as E,d as te}from"./util-qk2aeK8X.js";import{P as re,C as $,L as oe,a as ne}from"./locked-label-settings-X4RKk04F.js";import{C as ie}from"./color-select-G-xDxP7-.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{L as ae}from"./line-stroke-select-CC0fFBuz.js";import{g as le}from"./util-3pmDu6r6.js";const q=g=>{const{angle:s,onChange:n}=g,[i,h]=Z.useState(E(s).toString());function f(r){h(r),!(isNaN(+r)||r==="")&&n(te(r))}return m(C,{tag:"label",style:P.row,children:["angle (degrees)",t(c,{size:l.xxSmall_6}),t(ee,{value:i,onChange:f,style:P.textField}),t(c,{size:l.xxSmall_6})]})},P=w.StyleSheet.create({row:{display:"flex",flexDirection:"row",alignItems:"center"},textField:{width:l.xxxLarge_64}});q.__docgenInfo={description:"",methods:[],displayName:"AngleInput",props:{angle:{required:!0,tsType:{name:"number"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(angle: number) => void",signature:{arguments:[{type:{name:"number"},name:"angle"}],return:{name:"void"}}},description:""}}};const z=g=>{const{color:s,fillStyle:n,strokeStyle:i}=g;return t(u,{"aria-label":`${s}, stroke ${i}, fill ${n}`,style:[F.container,{border:`4px ${i} ${_[s]}`}],children:t(u,{style:[F.innerCircle,{backgroundColor:_[s],opacity:n==="white"?0:I[n]}]})})},F=w.StyleSheet.create({container:{outline:`2px solid ${b.offWhite}`,borderRadius:"50%",width:l.xLarge_32,height:l.large_24,backgroundColor:b.white,alignItems:"center",justifyContent:"center"},innerCircle:{width:28,height:20,borderRadius:"50%"}});z.__docgenInfo={description:"",methods:[],displayName:"EllipseSwatch",props:{color:{required:!0,tsType:{name:"LockedFigureColor"},description:""},fillStyle:{required:!0,tsType:{name:"LockedFigureFillType"},description:""},strokeStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""}}};const{InfoTip:se}=G,A=g=>{var L,v;const{flags:s,center:n,radius:i,angle:h,color:f,labels:r,ariaLabel:R,fillStyle:x,strokeStyle:k,expanded:O,onToggle:j,onChangeProps:p,onMove:B,onRemove:N}=g;function U(){const e=i[0]===i[1];let o="";return e?o+=`Circle with radius ${i[0]}`:o+=`Ellipse with x radius ${i[0]} and y radius ${i[1]}`,o+=`, centered at (${n[0]}, ${n[1]})`,!e&&h!==0&&(o+=`, rotated by ${E(h)} degrees`),r&&r.length>0&&(o+=", with label",r.length>1&&(o+="s"),o+=` ${r.map(d=>d.text).join(", ")}`),o}function W(e){const o=e[0]-n[0],d=e[1]-n[1],y={center:e};y.labels=r==null?void 0:r.map(S=>({...S,coord:[S.coord[0]+o,S.coord[1]+d]})),p(y)}function D(e){const o={color:e};o.labels=r==null?void 0:r.map(d=>({...d,color:e})),p(o)}function M(e,o){if(!r)return;const d=[...r];d[o]={...r[o],...e},p({labels:d})}function V(e){if(!r)return;const o=r.filter((d,y)=>y!==e);p({labels:o})}return m(re,{expanded:O,onToggle:j,header:m(u,{style:a.row,children:[t(Q,{children:`Ellipse (${n[0]}, ${n[1]}), radius ${i[0]}, ${i[1]}`}),t(c,{size:l.xSmall_8}),t(z,{color:g.color,fillStyle:x,strokeStyle:k})]}),children:[m(u,{style:a.row,children:[t($,{coord:n,style:a.spaceUnder,onChange:W}),t(u,{style:a.spaceUnder,children:t(se,{children:"The coordinates for the center of the ellipse."})})]}),t($,{coord:i,labels:["x radius","y radius"],style:a.spaceUnder,onChange:e=>p({radius:e})}),t(q,{angle:h,onChange:e=>p({angle:e})}),t(c,{size:l.xSmall_8}),m(u,{style:[a.row,a.spaceUnder],children:[t(ie,{selectedValue:f,onChange:D}),t(c,{size:l.medium_16}),m(C,{tag:"label",style:[a.row,a.truncatedWidth],children:["fill",t(c,{size:l.xxSmall_6}),t(J,{selectedValue:x,onChange:e=>p({fillStyle:e}),placeholder:"",children:Object.keys(I).map(e=>t(K,{value:e,label:e},e))})]})]}),t(ae,{selectedValue:k,onChange:e=>p({strokeStyle:e})}),((L=s==null?void 0:s.mafs)==null?void 0:L["locked-figures-aria"])&&m(T,{children:[t(c,{size:l.small_12}),t(u,{style:a.horizontalRule}),t(X,{ariaLabel:R,prePopulatedAriaLabel:U(),onChangeProps:e=>{p(e)}})]}),((v=s==null?void 0:s.mafs)==null?void 0:v["locked-ellipse-labels"])&&m(T,{children:[t(c,{size:l.xxxSmall_4}),t(u,{style:a.horizontalRule}),t(c,{size:l.small_12}),t(C,{children:"Visible labels"}),r==null?void 0:r.map((e,o)=>t(oe,{...e,expanded:!0,onChangeProps:d=>{M(d,o)},onRemove:()=>{V(o)},containerStyle:a.labelContainer})),t(H,{kind:"tertiary",startIcon:Y,onClick:()=>{const e={...le("label"),coord:[n[0],n[1]-((r==null?void 0:r.length)??0)],color:f};p({labels:[...r??[],e]})},style:a.addButton,children:"Add visible label"})]}),t(ne,{figureType:g.type,onMove:B,onRemove:N})]})},a=w.StyleSheet.create({row:{display:"flex",flexDirection:"row",alignItems:"center"},spaceUnder:{marginBottom:l.xSmall_8},truncatedWidth:{minWidth:0},addButton:{alignSelf:"start"},labelContainer:{backgroundColor:b.white},horizontalRule:{height:1,backgroundColor:b.offBlack16}}),Ze=A;A.__docgenInfo={description:"",methods:[],displayName:"LockedEllipseSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:""},showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" +import{a as m,j as t,F as T}from"./jsx-runtime-FVsy8kgq.js";import{l as _,f as I}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as G}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{B as H}from"./choice-E4eyMygy.js";import{V as u}from"./index-6h5t6F0w.js";import{S as J,O as K}from"./answer-choices-xSqM961S.js";import{S as c}from"./index-qUyqkRvh.js";import{s as l,c as b}from"./index-deFLJwr4.js";import{a as C,L as Q}from"./index-h_CiYGGb.js";import{L as X,p as Y}from"./locked-figure-aria-7tCktpI9.js";import{l as w}from"./index-awljIyHI.js";import{r as Z}from"./index-TT1qJ6UJ.js";import{S as ee}from"./scrollless-number-text-field-U5Bx_xXb.js";import{r as E,d as te}from"./util-qk2aeK8X.js";import{P as re,C as $,L as oe,a as ne}from"./locked-label-settings-mrPkDK9u.js";import{C as ie}from"./color-select-GgikiV2v.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{L as ae}from"./line-stroke-select-8a9MPfaw.js";import{g as le}from"./util-yTFMWwoT.js";const q=g=>{const{angle:s,onChange:n}=g,[i,h]=Z.useState(E(s).toString());function f(r){h(r),!(isNaN(+r)||r==="")&&n(te(r))}return m(C,{tag:"label",style:P.row,children:["angle (degrees)",t(c,{size:l.xxSmall_6}),t(ee,{value:i,onChange:f,style:P.textField}),t(c,{size:l.xxSmall_6})]})},P=w.StyleSheet.create({row:{display:"flex",flexDirection:"row",alignItems:"center"},textField:{width:l.xxxLarge_64}});q.__docgenInfo={description:"",methods:[],displayName:"AngleInput",props:{angle:{required:!0,tsType:{name:"number"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(angle: number) => void",signature:{arguments:[{type:{name:"number"},name:"angle"}],return:{name:"void"}}},description:""}}};const z=g=>{const{color:s,fillStyle:n,strokeStyle:i}=g;return t(u,{"aria-label":`${s}, stroke ${i}, fill ${n}`,style:[F.container,{border:`4px ${i} ${_[s]}`}],children:t(u,{style:[F.innerCircle,{backgroundColor:_[s],opacity:n==="white"?0:I[n]}]})})},F=w.StyleSheet.create({container:{outline:`2px solid ${b.offWhite}`,borderRadius:"50%",width:l.xLarge_32,height:l.large_24,backgroundColor:b.white,alignItems:"center",justifyContent:"center"},innerCircle:{width:28,height:20,borderRadius:"50%"}});z.__docgenInfo={description:"",methods:[],displayName:"EllipseSwatch",props:{color:{required:!0,tsType:{name:"LockedFigureColor"},description:""},fillStyle:{required:!0,tsType:{name:"LockedFigureFillType"},description:""},strokeStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""}}};const{InfoTip:se}=G,A=g=>{var L,v;const{flags:s,center:n,radius:i,angle:h,color:f,labels:r,ariaLabel:R,fillStyle:x,strokeStyle:k,expanded:O,onToggle:j,onChangeProps:p,onMove:B,onRemove:N}=g;function U(){const e=i[0]===i[1];let o="";return e?o+=`Circle with radius ${i[0]}`:o+=`Ellipse with x radius ${i[0]} and y radius ${i[1]}`,o+=`, centered at (${n[0]}, ${n[1]})`,!e&&h!==0&&(o+=`, rotated by ${E(h)} degrees`),r&&r.length>0&&(o+=", with label",r.length>1&&(o+="s"),o+=` ${r.map(d=>d.text).join(", ")}`),o}function W(e){const o=e[0]-n[0],d=e[1]-n[1],y={center:e};y.labels=r==null?void 0:r.map(S=>({...S,coord:[S.coord[0]+o,S.coord[1]+d]})),p(y)}function D(e){const o={color:e};o.labels=r==null?void 0:r.map(d=>({...d,color:e})),p(o)}function M(e,o){if(!r)return;const d=[...r];d[o]={...r[o],...e},p({labels:d})}function V(e){if(!r)return;const o=r.filter((d,y)=>y!==e);p({labels:o})}return m(re,{expanded:O,onToggle:j,header:m(u,{style:a.row,children:[t(Q,{children:`Ellipse (${n[0]}, ${n[1]}), radius ${i[0]}, ${i[1]}`}),t(c,{size:l.xSmall_8}),t(z,{color:g.color,fillStyle:x,strokeStyle:k})]}),children:[m(u,{style:a.row,children:[t($,{coord:n,style:a.spaceUnder,onChange:W}),t(u,{style:a.spaceUnder,children:t(se,{children:"The coordinates for the center of the ellipse."})})]}),t($,{coord:i,labels:["x radius","y radius"],style:a.spaceUnder,onChange:e=>p({radius:e})}),t(q,{angle:h,onChange:e=>p({angle:e})}),t(c,{size:l.xSmall_8}),m(u,{style:[a.row,a.spaceUnder],children:[t(ie,{selectedValue:f,onChange:D}),t(c,{size:l.medium_16}),m(C,{tag:"label",style:[a.row,a.truncatedWidth],children:["fill",t(c,{size:l.xxSmall_6}),t(J,{selectedValue:x,onChange:e=>p({fillStyle:e}),placeholder:"",children:Object.keys(I).map(e=>t(K,{value:e,label:e},e))})]})]}),t(ae,{selectedValue:k,onChange:e=>p({strokeStyle:e})}),((L=s==null?void 0:s.mafs)==null?void 0:L["locked-figures-aria"])&&m(T,{children:[t(c,{size:l.small_12}),t(u,{style:a.horizontalRule}),t(X,{ariaLabel:R,prePopulatedAriaLabel:U(),onChangeProps:e=>{p(e)}})]}),((v=s==null?void 0:s.mafs)==null?void 0:v["locked-ellipse-labels"])&&m(T,{children:[t(c,{size:l.xxxSmall_4}),t(u,{style:a.horizontalRule}),t(c,{size:l.small_12}),t(C,{children:"Visible labels"}),r==null?void 0:r.map((e,o)=>t(oe,{...e,expanded:!0,onChangeProps:d=>{M(d,o)},onRemove:()=>{V(o)},containerStyle:a.labelContainer})),t(H,{kind:"tertiary",startIcon:Y,onClick:()=>{const e={...le("label"),coord:[n[0],n[1]-((r==null?void 0:r.length)??0)],color:f};p({labels:[...r??[],e]})},style:a.addButton,children:"Add visible label"})]}),t(ne,{figureType:g.type,onMove:B,onRemove:N})]})},a=w.StyleSheet.create({row:{display:"flex",flexDirection:"row",alignItems:"center"},spaceUnder:{marginBottom:l.xSmall_8},truncatedWidth:{minWidth:0},addButton:{alignSelf:"start"},labelContainer:{backgroundColor:b.white},horizontalRule:{height:1,backgroundColor:b.offBlack16}}),Ze=A;A.__docgenInfo={description:"",methods:[],displayName:"LockedEllipseSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:""},showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" | "backward" | "forward" | "front"`,elements:[{name:"literal",value:'"back"'},{name:"literal",value:'"backward"'},{name:"literal",value:'"forward"'},{name:"literal",value:'"front"'}]},name:"movement"}],return:{name:"void"}}},description:"Called when a movement button (top, up, down, bottom) is pressed."},onRemove:{required:!0,tsType:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},description:"Called when the delete button is pressed."},expanded:{required:!1,tsType:{name:"boolean"},description:"Whether this accordion is expanded."},onToggle:{required:!1,tsType:{name:"signature",type:"function",raw:"(expanded: boolean) => void",signature:{arguments:[{type:{name:"boolean"},name:"expanded"}],return:{name:"void"}}},description:"Called when the accordion is expanded or collapsed."},onChangeProps:{required:!0,tsType:{name:"signature",type:"function",raw:"(newProps: Partial) => void",signature:{arguments:[{type:{name:"Partial",elements:[{name:"LockedEllipseType"}],raw:"Partial"},name:"newProps"}],return:{name:"void"}}},description:"Called when the props (coords, color, etc.) are updated."}}};export{Ze as L}; diff --git a/assets/locked-ellipse-settings.stories-WfNLgvVC.js b/assets/locked-ellipse-settings.stories-cgdX0Erx.js similarity index 73% rename from assets/locked-ellipse-settings.stories-WfNLgvVC.js rename to assets/locked-ellipse-settings.stories-cgdX0Erx.js index 5d8402c698..e7642d0ce0 100644 --- a/assets/locked-ellipse-settings.stories-WfNLgvVC.js +++ b/assets/locked-ellipse-settings.stories-cgdX0Erx.js @@ -1,4 +1,4 @@ -import{j as d}from"./jsx-runtime-FVsy8kgq.js";import{r as a}from"./index-TT1qJ6UJ.js";import{L as e}from"./locked-ellipse-settings-kWVnJxri.js";import{g as C}from"./util-3pmDu6r6.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./locked-figure-aria-RWwSDIb0.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-X4RKk04F.js";import"./color-select-G-xDxP7-.js";import"./line-stroke-select-CC0fFBuz.js";const xo={title:"PerseusEditor/Components/Locked Ellipse Settings",component:e},r=i=>d(e,{...i}),c={...C("ellipse"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};r.args=c;const o={render:function(){const[t,m]=a.useState(c);return d(e,{...t,onChangeProps:n=>{m({...t,...n})}})}};o.parameters={chromatic:{disableSnapshot:!0}};const p={render:function(){const[t,m]=a.useState(!0),[s,n]=a.useState(c);return d(e,{...s,expanded:t,onToggle:m,onChangeProps:R=>{n({...s,...R})}})}};r.__docgenInfo={description:"",methods:[],displayName:"Default"};var l,u,P;r.parameters={...r.parameters,docs:{...(l=r.parameters)==null?void 0:l.docs,source:{originalSource:`(args): React.ReactElement => { +import{j as d}from"./jsx-runtime-FVsy8kgq.js";import{r as a}from"./index-TT1qJ6UJ.js";import{L as e}from"./locked-ellipse-settings-TfTFulml.js";import{g as C}from"./util-yTFMWwoT.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./locked-figure-aria-7tCktpI9.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-mrPkDK9u.js";import"./color-select-GgikiV2v.js";import"./line-stroke-select-8a9MPfaw.js";const xo={title:"PerseusEditor/Components/Locked Ellipse Settings",component:e},r=i=>d(e,{...i}),c={...C("ellipse"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};r.args=c;const o={render:function(){const[t,m]=a.useState(c);return d(e,{...t,onChangeProps:n=>{m({...t,...n})}})}};o.parameters={chromatic:{disableSnapshot:!0}};const p={render:function(){const[t,m]=a.useState(!0),[s,n]=a.useState(c);return d(e,{...s,expanded:t,onToggle:m,onChangeProps:R=>{n({...s,...R})}})}};r.__docgenInfo={description:"",methods:[],displayName:"Default"};var l,u,P;r.parameters={...r.parameters,docs:{...(l=r.parameters)==null?void 0:l.docs,source:{originalSource:`(args): React.ReactElement => { return ; }`,...(P=(u=r.parameters)==null?void 0:u.docs)==null?void 0:P.source}}};var g,f,h;o.parameters={...o.parameters,docs:{...(g=o.parameters)==null?void 0:g.docs,source:{originalSource:`{ render: function Render() { diff --git a/assets/locked-figure-aria-RWwSDIb0.js b/assets/locked-figure-aria-7tCktpI9.js similarity index 85% rename from assets/locked-figure-aria-RWwSDIb0.js rename to assets/locked-figure-aria-7tCktpI9.js index 66a6149bec..63c238f270 100644 --- a/assets/locked-figure-aria-RWwSDIb0.js +++ b/assets/locked-figure-aria-7tCktpI9.js @@ -1 +1 @@ -import{a as r,j as e}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{B as u}from"./choice-E4eyMygy.js";import{V as s}from"./index-6h5t6F0w.js";import{a as f}from"./index-QCAhLhLD.js";import{S as i,a as b}from"./index-qUyqkRvh.js";import{c as g,s as t}from"./index-deFLJwr4.js";import{a as h,c as y}from"./index-h_CiYGGb.js";import{l as L}from"./index-awljIyHI.js";import{r as w}from"./index-TT1qJ6UJ.js";const K=""+new URL("plus-circle-MfbD-3cx.svg",import.meta.url).href,x=""+new URL("pencil-circle-IMSnQlOm.svg",import.meta.url).href,{InfoTip:v}=c;function S(l){const{ariaLabel:p,prePopulatedAriaLabel:m,onChangeProps:n}=l,o=`aria-label-${w.useId()}`;return r(s,{children:[e(i,{size:t.xSmall_8}),r(s,{style:a.row,children:[e(h,{tag:"label",htmlFor:o,children:"Aria label"}),e(b,{}),r(v,{children:["Aria label is used by screen readers to describe content to users who may be visually impaired. ",e("br",{}),e("br",{}),"Populating this field will make it so that users can use a screen reader to navigate to this point and hear the description.",e("br",{}),e("br",{}),"If you leave this field blank, the point will be hidden from screen readers. Users will not be able to navigate to this point using a screen reader."]})]}),e(i,{size:t.xxSmall_6}),e(y,{style:a.caption,children:"The figure is hidden from screen readers if this field is left blank."}),e(i,{size:t.xxSmall_6}),e(f,{id:o,value:p??"",onChange:d=>{n({ariaLabel:d||void 0})},placeholder:"Ex. Point at (x, y)",rows:1,resizeType:"vertical"}),e(u,{kind:"tertiary",startIcon:x,style:a.button,onClick:()=>{n({ariaLabel:m})},children:"Auto-generate"})]})}const a=L.StyleSheet.create({row:{flexDirection:"row",alignItems:"center"},button:{alignSelf:"start"},caption:{color:g.offBlack64}});S.__docgenInfo={description:"",methods:[],displayName:"LockedFigureAria",props:{ariaLabel:{required:!0,tsType:{name:"union",raw:"string | undefined",elements:[{name:"string"},{name:"undefined"}]},description:""},prePopulatedAriaLabel:{required:!0,tsType:{name:"string"},description:""},onChangeProps:{required:!0,tsType:{name:"signature",type:"function",raw:"(props: {ariaLabel?: string | undefined}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{ariaLabel?: string | undefined}",signature:{properties:[{key:"ariaLabel",value:{name:"union",raw:"string | undefined",elements:[{name:"string"},{name:"undefined"}],required:!1}}]}},name:"props"}],return:{name:"void"}}},description:""}}};export{S as L,K as p}; +import{a as r,j as e}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{B as u}from"./choice-E4eyMygy.js";import{V as s}from"./index-6h5t6F0w.js";import{a as f}from"./index-QCAhLhLD.js";import{S as i,a as b}from"./index-qUyqkRvh.js";import{c as g,s as t}from"./index-deFLJwr4.js";import{a as h,c as y}from"./index-h_CiYGGb.js";import{l as L}from"./index-awljIyHI.js";import{r as w}from"./index-TT1qJ6UJ.js";const K=""+new URL("plus-circle-MfbD-3cx.svg",import.meta.url).href,x=""+new URL("pencil-circle-IMSnQlOm.svg",import.meta.url).href,{InfoTip:v}=c;function S(l){const{ariaLabel:p,prePopulatedAriaLabel:m,onChangeProps:n}=l,o=`aria-label-${w.useId()}`;return r(s,{children:[e(i,{size:t.xSmall_8}),r(s,{style:a.row,children:[e(h,{tag:"label",htmlFor:o,children:"Aria label"}),e(b,{}),r(v,{children:["Aria label is used by screen readers to describe content to users who may be visually impaired. ",e("br",{}),e("br",{}),"Populating this field will make it so that users can use a screen reader to navigate to this point and hear the description.",e("br",{}),e("br",{}),"If you leave this field blank, the point will be hidden from screen readers. Users will not be able to navigate to this point using a screen reader."]})]}),e(i,{size:t.xxSmall_6}),e(y,{style:a.caption,children:"The figure is hidden from screen readers if this field is left blank."}),e(i,{size:t.xxSmall_6}),e(f,{id:o,value:p??"",onChange:d=>{n({ariaLabel:d||void 0})},placeholder:"Ex. Point at (x, y)",rows:1,resizeType:"vertical"}),e(u,{kind:"tertiary",startIcon:x,style:a.button,onClick:()=>{n({ariaLabel:m})},children:"Auto-generate"})]})}const a=L.StyleSheet.create({row:{flexDirection:"row",alignItems:"center"},button:{alignSelf:"start"},caption:{color:g.offBlack64}});S.__docgenInfo={description:"",methods:[],displayName:"LockedFigureAria",props:{ariaLabel:{required:!0,tsType:{name:"union",raw:"string | undefined",elements:[{name:"string"},{name:"undefined"}]},description:""},prePopulatedAriaLabel:{required:!0,tsType:{name:"string"},description:""},onChangeProps:{required:!0,tsType:{name:"signature",type:"function",raw:"(props: {ariaLabel?: string | undefined}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{ariaLabel?: string | undefined}",signature:{properties:[{key:"ariaLabel",value:{name:"union",raw:"string | undefined",elements:[{name:"string"},{name:"undefined"}],required:!1}}]}},name:"props"}],return:{name:"void"}}},description:""}}};export{S as L,K as p}; diff --git a/assets/locked-figures-section-K5V7atp-.js b/assets/locked-figures-section-Tfk_-k0r.js similarity index 95% rename from assets/locked-figures-section-K5V7atp-.js rename to assets/locked-figures-section-Tfk_-k0r.js index f9eb5ac6b7..5fb48b9be8 100644 --- a/assets/locked-figures-section-K5V7atp-.js +++ b/assets/locked-figures-section-Tfk_-k0r.js @@ -1,4 +1,4 @@ -import{j as o,a as m,F as O}from"./jsx-runtime-FVsy8kgq.js";import{B as R}from"./choice-E4eyMygy.js";import{V as y,u as _}from"./index-6h5t6F0w.js";import{S as D}from"./index-qUyqkRvh.js";import{s as h,c as W}from"./index-deFLJwr4.js";import{l as L}from"./index-awljIyHI.js";import{r as w}from"./index-TT1qJ6UJ.js";import{H}from"./heading-8aCiuWUg.js";import{a as $,b as M}from"./answer-choices-uB4giKvU.js";import{L as B}from"./locked-ellipse-settings-kWVnJxri.js";import{L as N}from"./locked-function-settings-ARS0ni8Z.js";import{L as j}from"./locked-label-settings-X4RKk04F.js";import{L as z}from"./locked-line-settings-APCIPT7n.js";import{L as U}from"./locked-point-settings-KDnxNHJ0.js";import{L as V}from"./locked-polygon-settings-oPik-nhx.js";import{L as J}from"./locked-vector-settings-JVpVhbIu.js";import{g as K}from"./util-3pmDu6r6.js";const x=n=>{const{id:g,onChange:s}=n,l=["point","line","vector","ellipse","polygon","function"];return n.showLabelsFlag&&l.push("label"),o(y,{style:b.container,children:o($,{menuText:"Add locked figure",style:b.addElementSelect,children:l.map(d=>o(M,{label:d,onClick:()=>s(d)},`${g}-${d}`))})})},b=L.StyleSheet.create({container:{marginTop:h.xSmall_8},addElementSelect:{backgroundColor:W.fadedBlue8,borderRadius:h.xxxSmall_4}});x.__docgenInfo={description:"",methods:[],displayName:"LockedFigureSelect",props:{showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},id:{required:!0,tsType:{name:"string"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(value: string) => void",signature:{arguments:[{type:{name:"string"},name:"value"}],return:{name:"void"}}},description:""}}};const F=n=>{switch(n.type){case"point":return o(U,{...n});case"line":return o(z,{...n});case"vector":return o(J,{...n});case"ellipse":return o(B,{...n});case"polygon":return o(V,{...n});case"function":return o(N,{...n});case"label":if(n.showLabelsFlag)return o(j,{...n});break}return null};F.__docgenInfo={description:"",methods:[],displayName:"LockedFigureSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:""},showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" +import{j as o,a as m,F as O}from"./jsx-runtime-FVsy8kgq.js";import{B as R}from"./choice-E4eyMygy.js";import{V as y,u as _}from"./index-6h5t6F0w.js";import{S as D}from"./index-qUyqkRvh.js";import{s as h,c as W}from"./index-deFLJwr4.js";import{l as L}from"./index-awljIyHI.js";import{r as w}from"./index-TT1qJ6UJ.js";import{H}from"./heading-8aCiuWUg.js";import{a as $,b as M}from"./answer-choices-xSqM961S.js";import{L as B}from"./locked-ellipse-settings-TfTFulml.js";import{L as N}from"./locked-function-settings-hpVCfdZN.js";import{L as j}from"./locked-label-settings-mrPkDK9u.js";import{L as z}from"./locked-line-settings-s3VKqEiy.js";import{L as U}from"./locked-point-settings-ajnmafNS.js";import{L as V}from"./locked-polygon-settings-LXOy6nHR.js";import{L as J}from"./locked-vector-settings-214PJGeS.js";import{g as K}from"./util-yTFMWwoT.js";const x=n=>{const{id:g,onChange:s}=n,l=["point","line","vector","ellipse","polygon","function"];return n.showLabelsFlag&&l.push("label"),o(y,{style:b.container,children:o($,{menuText:"Add locked figure",style:b.addElementSelect,children:l.map(d=>o(M,{label:d,onClick:()=>s(d)},`${g}-${d}`))})})},b=L.StyleSheet.create({container:{marginTop:h.xSmall_8},addElementSelect:{backgroundColor:W.fadedBlue8,borderRadius:h.xxxSmall_4}});x.__docgenInfo={description:"",methods:[],displayName:"LockedFigureSelect",props:{showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},id:{required:!0,tsType:{name:"string"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(value: string) => void",signature:{arguments:[{type:{name:"string"},name:"value"}],return:{name:"void"}}},description:""}}};const F=n=>{switch(n.type){case"point":return o(U,{...n});case"line":return o(z,{...n});case"vector":return o(J,{...n});case"ellipse":return o(B,{...n});case"polygon":return o(V,{...n});case"function":return o(N,{...n});case"label":if(n.showLabelsFlag)return o(j,{...n});break}return null};F.__docgenInfo={description:"",methods:[],displayName:"LockedFigureSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:""},showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" | "backward" | "forward" | "front"`,elements:[{name:"literal",value:'"back"'},{name:"literal",value:'"backward"'},{name:"literal",value:'"forward"'},{name:"literal",value:'"front"'}]},name:"movement"}],return:{name:"void"}}},description:"Called when a movement button (top, up, down, bottom) is pressed."},onRemove:{required:!0,tsType:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},description:"Called when the delete button is pressed."},expanded:{required:!1,tsType:{name:"boolean"},description:"Whether this accordion is expanded."},onToggle:{required:!1,tsType:{name:"signature",type:"function",raw:"(expanded: boolean) => void",signature:{arguments:[{type:{name:"boolean"},name:"expanded"}],return:{name:"void"}}},description:"Called when the accordion is expanded or collapsed."}}};const T=n=>{const g=Array((n.figures??[]).length).fill(!1),[s,l]=w.useState(g),[d,S]=w.useState(!0),f=_().get("locked-figures-section"),{figures:t,onChange:u}=n;function q(e){const a={lockedFigures:[...t||[],K(e)]};u(a),l([...s,!0])}function P(e,r){if(e===0&&(r==="back"||r==="backward")||t&&e===t.length-1&&(r==="front"||r==="forward"))return;const i=[...t||[]],p=[...s],[c]=i.splice(e,1);switch(p.splice(e,1),r){case"back":i.unshift(c),p.unshift(!0);break;case"backward":i.splice(e-1,0,c),p.splice(e-1,0,!0);break;case"forward":i.splice(e+1,0,c),p.splice(e+1,0,!0);break;case"front":i.push(c),p.push(!0);break}u({lockedFigures:i}),l(p)}function A(e){if(window.confirm("Are you sure you want to delete this figure?")){const r=t||[];u({lockedFigures:[...r.slice(0,e),...r.slice(e+1)]});const a=[...s];a.splice(e,1),l(a)}}function I(e,r){const a=t||[],i={lockedFigures:[...a.slice(0,e),{...a[e],...r},...a.slice(e+1)]};u(i)}function C(e){l(Array(t==null?void 0:t.length).fill(e))}const k=s.every(e=>!e),E=k?"Expand all":"Collapse all",G=!!(t!=null&&t.length);return m(O,{children:[o(H,{title:"Locked Figures",isOpen:d,onToggle:()=>S(!d),isCollapsible:!0}),d&&m(y,{children:[t==null?void 0:t.map((e,r)=>o(F,{flags:n.flags,showLabelsFlag:n.showLabelsFlag,expanded:s[r],onToggle:a=>{const i=[...s];i[r]=a,l(i)},...e,onChangeProps:a=>I(r,a),onMove:a=>P(r,a),onRemove:()=>A(r)},`${f}-locked-${e}-${r}`)),m(y,{style:v.buttonContainer,children:[o(x,{showLabelsFlag:n.showLabelsFlag,id:`${f}-select`,onChange:q}),o(D,{size:h.small_12}),G&&o(R,{kind:"secondary",onClick:()=>C(k),style:v.button,children:E})]})]})]})},v=L.StyleSheet.create({buttonContainer:{flexDirection:"row",alignItems:"center"},button:{marginTop:h.xSmall_8,flexGrow:1}}),he=T;T.__docgenInfo={description:"",methods:[],displayName:"LockedFiguresSection",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:""},showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},figures:{required:!1,tsType:{name:"Array",elements:[{name:"LockedFigure"}],raw:"Array"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(props: Partial) => void",signature:{arguments:[{type:{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ diff --git a/assets/locked-figures-section.stories-pFsuMu6d.js b/assets/locked-figures-section.stories-_4J2pjid.js similarity index 69% rename from assets/locked-figures-section.stories-pFsuMu6d.js rename to assets/locked-figures-section.stories-_4J2pjid.js index b1e19490c3..f66cb90f90 100644 --- a/assets/locked-figures-section.stories-pFsuMu6d.js +++ b/assets/locked-figures-section.stories-_4J2pjid.js @@ -1,4 +1,4 @@ -import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{V as y}from"./index-6h5t6F0w.js";import{s as c,c as R}from"./index-deFLJwr4.js";import{l as w}from"./index-awljIyHI.js";import{r as C}from"./index-TT1qJ6UJ.js";import{L as i}from"./locked-figures-section-K5V7atp-.js";import{g as d}from"./util-3pmDu6r6.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./heading-8aCiuWUg.js";import"./index-tFzzSRL2.js";import"./toggleable-caret-lFiCktzo.js";import"./answer-choices-uB4giKvU.js";import"./minus-bold-ONmDo3Ve.js";import"./renderer-vBOYiNCS.js";import"./version-akiLXZts.js";import"./util-XcxTwqb0.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./locked-ellipse-settings-kWVnJxri.js";import"./article-renderer-6f7Dak4j.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./locked-figure-aria-RWwSDIb0.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-X4RKk04F.js";import"./color-select-G-xDxP7-.js";import"./line-stroke-select-CC0fFBuz.js";import"./locked-function-settings-ARS0ni8Z.js";import"./line-swatch-xLt6fclZ.js";import"./locked-line-settings-APCIPT7n.js";import"./locked-point-settings-KDnxNHJ0.js";import"./labeled-switch--NF5de2V.js";import"./locked-polygon-settings-oPik-nhx.js";import"./locked-vector-settings-JVpVhbIu.js";const jo={title:"PerseusEditor/Components/Locked Figures Section",component:i},r=p=>e(i,{...p});r.args={};const o={render:function(){const[m,s]=C.useState([]);return e(i,{figures:m,onChange:n=>{s(n.lockedFigures)}})}},t={render:function(){const[m,s]=C.useState([d("point"),d("line")]),a=n=>{s(n.lockedFigures)};return e(y,{style:D.prodSizeContainer,children:e(i,{figures:m,onChange:a})})}},U=310,x=10,_=U+2*x,D=w.StyleSheet.create({prodSizeContainer:{width:_,padding:x,marginInlineStart:c.medium_16,border:`1px solid ${R.offBlack32}`,borderRadius:c.xxxSmall_4}});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var u,g,l;r.parameters={...r.parameters,docs:{...(u=r.parameters)==null?void 0:u.docs,source:{originalSource:`(args): React.ReactElement => { +import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{V as y}from"./index-6h5t6F0w.js";import{s as c,c as R}from"./index-deFLJwr4.js";import{l as w}from"./index-awljIyHI.js";import{r as C}from"./index-TT1qJ6UJ.js";import{L as i}from"./locked-figures-section-Tfk_-k0r.js";import{g as d}from"./util-yTFMWwoT.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./heading-8aCiuWUg.js";import"./index-tFzzSRL2.js";import"./toggleable-caret-lFiCktzo.js";import"./answer-choices-xSqM961S.js";import"./minus-bold-ONmDo3Ve.js";import"./renderer-hPmI_Chp.js";import"./version-akiLXZts.js";import"./util-YrNvlCNO.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./locked-ellipse-settings-TfTFulml.js";import"./article-renderer-TMdCDA85.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./locked-figure-aria-7tCktpI9.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./util-qk2aeK8X.js";import"./locked-label-settings-mrPkDK9u.js";import"./color-select-GgikiV2v.js";import"./line-stroke-select-8a9MPfaw.js";import"./locked-function-settings-hpVCfdZN.js";import"./line-swatch-0Zcc1GCG.js";import"./locked-line-settings-s3VKqEiy.js";import"./locked-point-settings-ajnmafNS.js";import"./labeled-switch-Qne5XsM1.js";import"./locked-polygon-settings-LXOy6nHR.js";import"./locked-vector-settings-214PJGeS.js";const jo={title:"PerseusEditor/Components/Locked Figures Section",component:i},r=p=>e(i,{...p});r.args={};const o={render:function(){const[m,s]=C.useState([]);return e(i,{figures:m,onChange:n=>{s(n.lockedFigures)}})}},t={render:function(){const[m,s]=C.useState([d("point"),d("line")]),a=n=>{s(n.lockedFigures)};return e(y,{style:D.prodSizeContainer,children:e(i,{figures:m,onChange:a})})}},U=310,x=10,_=U+2*x,D=w.StyleSheet.create({prodSizeContainer:{width:_,padding:x,marginInlineStart:c.medium_16,border:`1px solid ${R.offBlack32}`,borderRadius:c.xxxSmall_4}});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var u,g,l;r.parameters={...r.parameters,docs:{...(u=r.parameters)==null?void 0:u.docs,source:{originalSource:`(args): React.ReactElement => { return ; }`,...(l=(g=r.parameters)==null?void 0:g.docs)==null?void 0:l.source}}};var f,F,S;o.parameters={...o.parameters,docs:{...(f=o.parameters)==null?void 0:f.docs,source:{originalSource:`{ render: function Render() { diff --git a/assets/locked-function-settings-ARS0ni8Z.js b/assets/locked-function-settings-hpVCfdZN.js similarity index 94% rename from assets/locked-function-settings-ARS0ni8Z.js rename to assets/locked-function-settings-hpVCfdZN.js index 0272e5888a..e017ce065e 100644 --- a/assets/locked-function-settings-ARS0ni8Z.js +++ b/assets/locked-function-settings-hpVCfdZN.js @@ -1,4 +1,4 @@ -import{a as r,j as a,F as B}from"./jsx-runtime-FVsy8kgq.js";import{B as Z}from"./choice-E4eyMygy.js";import{V as u}from"./index-6h5t6F0w.js";import{S as E,O as F}from"./answer-choices-uB4giKvU.js";import{T as P}from"./index-QCAhLhLD.js";import{P as R,L as ee,a as ae,I as $}from"./locked-label-settings-X4RKk04F.js";import{S as c}from"./index-qUyqkRvh.js";import{s,c as y}from"./index-deFLJwr4.js";import{L as D,a as C}from"./index-h_CiYGGb.js";import{L as ne,p as oe}from"./locked-figure-aria-RWwSDIb0.js";import{l as I}from"./index-awljIyHI.js";import{r as L}from"./index-TT1qJ6UJ.js";import{C as te}from"./color-select-G-xDxP7-.js";import{L as ie}from"./line-stroke-select-CC0fFBuz.js";import{L as le}from"./line-swatch-xLt6fclZ.js";import{g as re}from"./util-3pmDu6r6.js";const se=""+new URL("copy-oXFFmXIn.svg",import.meta.url).href,ce=""+new URL("note-pencil-qql72tMF.svg",import.meta.url).href,O={linear:["x + 5","1/2x - 2"],polynomial:["1/2x^2 + 3x - 4","(1/3)x^3 - 2x^2 + 3x - 4"],trigonometric:["sin(x) * 3","arctan(2x) + 4"]},W=x=>{var _,A;const{flags:d,color:p,strokeStyle:h,equation:g,directionalAxis:f,domain:t,labels:i,ariaLabel:j,onChangeProps:m,onMove:H,onRemove:V}=x,T=f==="x"?"y=":"x=",G=`Function (${T}${g})`,[v,q]=L.useState([t&&t[0]!==-1/0?t[0].toString():"",t&&t[1]!==1/0?t[1].toString():""]),[w,N]=L.useState("");L.useEffect(()=>{q([t&&t[0]!==-1/0?t[0].toString():"",t&&t[1]!==1/0?t[1].toString():""])},[t]);function U(){let e=`Function with equation ${T}${g}`;return t&&!(t[0]===-1/0&&t[1]===1/0)&&(e+=`, domain from ${t[0]} to ${t[1]}`),i&&i.length>0&&(e+=", with label",i.length>1&&(e+="s"),e+=` ${i.map(o=>o.text).join(", ")}`),e}function b(e,o){const l={};l[e]=o,m(l)}function z(e,o){const l=[...v];l[e]=o,q(l);const S=t?[...t]:[-1/0,1/0];let k=parseFloat(o);o===""&&e===0?k=-1/0:o===""&&e===1&&(k=1/0),S[e]=k,m({domain:S})}const X=Object.keys(O),M=w!=="",Y=M?O[w]:["Select category to see example equations"];function J(e){const o={color:e};o.labels=i==null?void 0:i.map(l=>({...l,color:e})),m(o)}function K(e,o){if(!i)return;const l=[...i];l[o]={...i[o],...e},m({labels:l})}function Q(e){if(!i)return;const o=i.filter((l,S)=>S!==e);m({labels:o})}return r(R,{expanded:x.expanded,onToggle:x.onToggle,header:r(u,{style:n.row,children:[a(D,{style:n.accordionHeader,children:G}),a(c,{size:s.xSmall_8}),a(le,{color:p,lineStyle:h})]}),children:[r(u,{style:[n.row,n.spaceUnder],children:[a(te,{selectedValue:p,onChange:J}),a(c,{size:s.small_12}),a(ie,{selectedValue:h,onChange:e=>{b("strokeStyle",e)}})]}),r(u,{style:[n.row,n.rowSpace],children:[r(E,{selectedValue:f,onChange:e=>{b("directionalAxis",e)},"aria-label":"equation prefix",style:[n.dropdownLabel,n.axisMenu],placeholder:"",children:[a(F,{value:"x",label:"y ="}),a(F,{value:"y",label:"x ="})]}),a(c,{size:s.xSmall_8}),a(P,{type:"text","aria-label":"equation",value:g,onChange:e=>{b("equation",e)},style:[n.textField]})]}),r(u,{style:[n.row,n.rowSpace],children:[r(C,{tag:"label",style:[n.dropdownLabel,n.domainMin],children:["domain min",a(c,{size:s.xxSmall_6}),a(P,{type:"number",style:n.domainMinField,value:v[0],onChange:e=>{z(0,e)}})]}),a(c,{size:s.medium_16}),r(C,{tag:"label","aria-label":"domain max",style:[n.dropdownLabel,n.domainMax],children:["max",a(c,{size:s.xxSmall_6}),a(P,{type:"number",style:n.domainMaxField,value:v[1],onChange:e=>{z(1,e)}})]})]}),r(R,{header:a(D,{children:"Example Functions"}),expanded:!1,containerStyle:n.exampleWorkspace,panelStyle:n.exampleAccordionPanel,children:[r(C,{tag:"label",style:n.dropdownLabel,children:["Choose a category",a(c,{size:s.xxSmall_6}),a(E,{selectedValue:w,onChange:N,placeholder:"examples",children:X.map(e=>a(F,{value:e,label:e},e))})]}),M&&a("ul",{className:I.css(n.exampleContainer),children:Y.map((e,o)=>a(de,{category:w,example:e,index:o,pasteEquationFn:b},o))})]}),((_=d==null?void 0:d.mafs)==null?void 0:_["locked-figures-aria"])&&r(B,{children:[a(c,{size:s.small_12}),a(u,{style:n.horizontalRule}),a(ne,{ariaLabel:j,prePopulatedAriaLabel:U(),onChangeProps:e=>{m(e)}})]}),((A=d==null?void 0:d.mafs)==null?void 0:A["locked-function-labels"])&&r(B,{children:[a(c,{size:s.xxxSmall_4}),a(u,{style:n.horizontalRule}),a(c,{size:s.small_12}),a(C,{children:"Visible labels"}),i==null?void 0:i.map((e,o)=>a(ee,{...e,expanded:!0,onChangeProps:l=>{K(l,o)},onRemove:()=>{Q(o)},containerStyle:n.labelContainer},o)),a(Z,{kind:"tertiary",startIcon:oe,onClick:()=>{const e={...re("label"),coord:[0,-((i==null?void 0:i.length)??0)],color:p};m({labels:[...i??[],e]})},style:n.addButton,children:"Add visible label"})]}),a(ae,{figureType:x.type,onMove:H,onRemove:V})]})},de=x=>{const{category:d,example:p,index:h,pasteEquationFn:g}=x,f=L.useId();return r("li",{className:I.css(n.exampleRow),children:[a($,{icon:ce,"aria-label":"paste example","aria-describedby":f,onClick:()=>g("equation",p),size:"medium",style:n.copyPasteButton}),a($,{icon:se,"aria-label":"copy example","aria-describedby":f,onClick:()=>navigator.clipboard.writeText(p),size:"medium",style:n.copyPasteButton}),a(c,{size:s.xxxSmall_4}),a(u,{style:n.exampleContent,id:f,children:p})]},`${d}-${h}`)},n=I.StyleSheet.create({accordionHeader:{textOverflow:"ellipsis",maxWidth:"calc(100% - 64px)",overflow:"hidden",whiteSpace:"nowrap"},axisMenu:{minWidth:"auto"},copyPasteButton:{flexShrink:"0",margin:"0 2px"},domainMin:{justifyContent:"space-between",width:"calc(((100% - 141px) / 2) + 88.7px)",textWrap:"nowrap"},domainMinField:{width:"calc(100% - 88.7px)"},domainMax:{width:"calc(((100% - 141px) / 2) + 36.2px)"},domainMaxField:{width:"calc(100% - 36.2px)"},dropdownLabel:{alignItems:"center",display:"flex"},exampleAccordionPanel:{alignItems:"start",paddingBottom:"12px",flexDirection:"row",flexWrap:"wrap"},exampleContainer:{background:"white",border:`1px solid ${y.fadedOffBlack16}`,borderRadius:"4px",flexGrow:"1",listStyleType:"none",maxHeight:"88px",margin:"8px 0 0 0",overflowY:"scroll",padding:"4px 12px 4px 4px"},exampleContent:{fontFamily:'"Lato", sans-serif',flexGrow:"1",color:y.offBlack},exampleRow:{alignItems:"center",display:"flex",flexDirection:"row",minHeight:"44px"},exampleWorkspace:{background:y.white50},rowSpace:{marginTop:s.xSmall_8},row:{display:"flex",flexDirection:"row",alignItems:"center"},textField:{flexGrow:"1"},addButton:{alignSelf:"start"},horizontalRule:{height:1,backgroundColor:y.offBlack16},labelContainer:{backgroundColor:y.white}}),Pe=W;W.__docgenInfo={description:"",methods:[],displayName:"LockedFunctionSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:""},showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" +import{a as r,j as a,F as B}from"./jsx-runtime-FVsy8kgq.js";import{B as Z}from"./choice-E4eyMygy.js";import{V as u}from"./index-6h5t6F0w.js";import{S as E,O as F}from"./answer-choices-xSqM961S.js";import{T as P}from"./index-QCAhLhLD.js";import{P as R,L as ee,a as ae,I as $}from"./locked-label-settings-mrPkDK9u.js";import{S as c}from"./index-qUyqkRvh.js";import{s,c as y}from"./index-deFLJwr4.js";import{L as D,a as C}from"./index-h_CiYGGb.js";import{L as ne,p as oe}from"./locked-figure-aria-7tCktpI9.js";import{l as I}from"./index-awljIyHI.js";import{r as L}from"./index-TT1qJ6UJ.js";import{C as te}from"./color-select-GgikiV2v.js";import{L as ie}from"./line-stroke-select-8a9MPfaw.js";import{L as le}from"./line-swatch-0Zcc1GCG.js";import{g as re}from"./util-yTFMWwoT.js";const se=""+new URL("copy-oXFFmXIn.svg",import.meta.url).href,ce=""+new URL("note-pencil-qql72tMF.svg",import.meta.url).href,O={linear:["x + 5","1/2x - 2"],polynomial:["1/2x^2 + 3x - 4","(1/3)x^3 - 2x^2 + 3x - 4"],trigonometric:["sin(x) * 3","arctan(2x) + 4"]},W=x=>{var _,A;const{flags:d,color:p,strokeStyle:h,equation:g,directionalAxis:f,domain:t,labels:i,ariaLabel:j,onChangeProps:m,onMove:H,onRemove:V}=x,T=f==="x"?"y=":"x=",G=`Function (${T}${g})`,[v,q]=L.useState([t&&t[0]!==-1/0?t[0].toString():"",t&&t[1]!==1/0?t[1].toString():""]),[w,N]=L.useState("");L.useEffect(()=>{q([t&&t[0]!==-1/0?t[0].toString():"",t&&t[1]!==1/0?t[1].toString():""])},[t]);function U(){let e=`Function with equation ${T}${g}`;return t&&!(t[0]===-1/0&&t[1]===1/0)&&(e+=`, domain from ${t[0]} to ${t[1]}`),i&&i.length>0&&(e+=", with label",i.length>1&&(e+="s"),e+=` ${i.map(o=>o.text).join(", ")}`),e}function b(e,o){const l={};l[e]=o,m(l)}function z(e,o){const l=[...v];l[e]=o,q(l);const S=t?[...t]:[-1/0,1/0];let k=parseFloat(o);o===""&&e===0?k=-1/0:o===""&&e===1&&(k=1/0),S[e]=k,m({domain:S})}const X=Object.keys(O),M=w!=="",Y=M?O[w]:["Select category to see example equations"];function J(e){const o={color:e};o.labels=i==null?void 0:i.map(l=>({...l,color:e})),m(o)}function K(e,o){if(!i)return;const l=[...i];l[o]={...i[o],...e},m({labels:l})}function Q(e){if(!i)return;const o=i.filter((l,S)=>S!==e);m({labels:o})}return r(R,{expanded:x.expanded,onToggle:x.onToggle,header:r(u,{style:n.row,children:[a(D,{style:n.accordionHeader,children:G}),a(c,{size:s.xSmall_8}),a(le,{color:p,lineStyle:h})]}),children:[r(u,{style:[n.row,n.spaceUnder],children:[a(te,{selectedValue:p,onChange:J}),a(c,{size:s.small_12}),a(ie,{selectedValue:h,onChange:e=>{b("strokeStyle",e)}})]}),r(u,{style:[n.row,n.rowSpace],children:[r(E,{selectedValue:f,onChange:e=>{b("directionalAxis",e)},"aria-label":"equation prefix",style:[n.dropdownLabel,n.axisMenu],placeholder:"",children:[a(F,{value:"x",label:"y ="}),a(F,{value:"y",label:"x ="})]}),a(c,{size:s.xSmall_8}),a(P,{type:"text","aria-label":"equation",value:g,onChange:e=>{b("equation",e)},style:[n.textField]})]}),r(u,{style:[n.row,n.rowSpace],children:[r(C,{tag:"label",style:[n.dropdownLabel,n.domainMin],children:["domain min",a(c,{size:s.xxSmall_6}),a(P,{type:"number",style:n.domainMinField,value:v[0],onChange:e=>{z(0,e)}})]}),a(c,{size:s.medium_16}),r(C,{tag:"label","aria-label":"domain max",style:[n.dropdownLabel,n.domainMax],children:["max",a(c,{size:s.xxSmall_6}),a(P,{type:"number",style:n.domainMaxField,value:v[1],onChange:e=>{z(1,e)}})]})]}),r(R,{header:a(D,{children:"Example Functions"}),expanded:!1,containerStyle:n.exampleWorkspace,panelStyle:n.exampleAccordionPanel,children:[r(C,{tag:"label",style:n.dropdownLabel,children:["Choose a category",a(c,{size:s.xxSmall_6}),a(E,{selectedValue:w,onChange:N,placeholder:"examples",children:X.map(e=>a(F,{value:e,label:e},e))})]}),M&&a("ul",{className:I.css(n.exampleContainer),children:Y.map((e,o)=>a(de,{category:w,example:e,index:o,pasteEquationFn:b},o))})]}),((_=d==null?void 0:d.mafs)==null?void 0:_["locked-figures-aria"])&&r(B,{children:[a(c,{size:s.small_12}),a(u,{style:n.horizontalRule}),a(ne,{ariaLabel:j,prePopulatedAriaLabel:U(),onChangeProps:e=>{m(e)}})]}),((A=d==null?void 0:d.mafs)==null?void 0:A["locked-function-labels"])&&r(B,{children:[a(c,{size:s.xxxSmall_4}),a(u,{style:n.horizontalRule}),a(c,{size:s.small_12}),a(C,{children:"Visible labels"}),i==null?void 0:i.map((e,o)=>a(ee,{...e,expanded:!0,onChangeProps:l=>{K(l,o)},onRemove:()=>{Q(o)},containerStyle:n.labelContainer},o)),a(Z,{kind:"tertiary",startIcon:oe,onClick:()=>{const e={...re("label"),coord:[0,-((i==null?void 0:i.length)??0)],color:p};m({labels:[...i??[],e]})},style:n.addButton,children:"Add visible label"})]}),a(ae,{figureType:x.type,onMove:H,onRemove:V})]})},de=x=>{const{category:d,example:p,index:h,pasteEquationFn:g}=x,f=L.useId();return r("li",{className:I.css(n.exampleRow),children:[a($,{icon:ce,"aria-label":"paste example","aria-describedby":f,onClick:()=>g("equation",p),size:"medium",style:n.copyPasteButton}),a($,{icon:se,"aria-label":"copy example","aria-describedby":f,onClick:()=>navigator.clipboard.writeText(p),size:"medium",style:n.copyPasteButton}),a(c,{size:s.xxxSmall_4}),a(u,{style:n.exampleContent,id:f,children:p})]},`${d}-${h}`)},n=I.StyleSheet.create({accordionHeader:{textOverflow:"ellipsis",maxWidth:"calc(100% - 64px)",overflow:"hidden",whiteSpace:"nowrap"},axisMenu:{minWidth:"auto"},copyPasteButton:{flexShrink:"0",margin:"0 2px"},domainMin:{justifyContent:"space-between",width:"calc(((100% - 141px) / 2) + 88.7px)",textWrap:"nowrap"},domainMinField:{width:"calc(100% - 88.7px)"},domainMax:{width:"calc(((100% - 141px) / 2) + 36.2px)"},domainMaxField:{width:"calc(100% - 36.2px)"},dropdownLabel:{alignItems:"center",display:"flex"},exampleAccordionPanel:{alignItems:"start",paddingBottom:"12px",flexDirection:"row",flexWrap:"wrap"},exampleContainer:{background:"white",border:`1px solid ${y.fadedOffBlack16}`,borderRadius:"4px",flexGrow:"1",listStyleType:"none",maxHeight:"88px",margin:"8px 0 0 0",overflowY:"scroll",padding:"4px 12px 4px 4px"},exampleContent:{fontFamily:'"Lato", sans-serif',flexGrow:"1",color:y.offBlack},exampleRow:{alignItems:"center",display:"flex",flexDirection:"row",minHeight:"44px"},exampleWorkspace:{background:y.white50},rowSpace:{marginTop:s.xSmall_8},row:{display:"flex",flexDirection:"row",alignItems:"center"},textField:{flexGrow:"1"},addButton:{alignSelf:"start"},horizontalRule:{height:1,backgroundColor:y.offBlack16},labelContainer:{backgroundColor:y.white}}),Pe=W;W.__docgenInfo={description:"",methods:[],displayName:"LockedFunctionSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:""},showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" | "backward" | "forward" | "front"`,elements:[{name:"literal",value:'"back"'},{name:"literal",value:'"backward"'},{name:"literal",value:'"forward"'},{name:"literal",value:'"front"'}]},name:"movement"}],return:{name:"void"}}},description:"Called when a movement button (top, up, down, bottom) is pressed."},onRemove:{required:!0,tsType:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},description:"Called when the delete button is pressed."},expanded:{required:!1,tsType:{name:"boolean"},description:"Whether this accordion is expanded."},onToggle:{required:!1,tsType:{name:"signature",type:"function",raw:"(expanded: boolean) => void",signature:{arguments:[{type:{name:"boolean"},name:"expanded"}],return:{name:"void"}}},description:"Called when the accordion is expanded or collapsed."},onChangeProps:{required:!0,tsType:{name:"signature",type:"function",raw:"(newProps: Partial) => void",signature:{arguments:[{type:{name:"Partial",elements:[{name:"LockedFunctionType"}],raw:"Partial"},name:"newProps"}],return:{name:"void"}}},description:"Called when the props (points, color, etc.) are updated."}}};export{Pe as L}; diff --git a/assets/locked-function-settings.stories-pknes1m1.js b/assets/locked-function-settings.stories-pcc9LEW7.js similarity index 68% rename from assets/locked-function-settings.stories-pknes1m1.js rename to assets/locked-function-settings.stories-pcc9LEW7.js index b97aaccfbd..90a52fa69c 100644 --- a/assets/locked-function-settings.stories-pknes1m1.js +++ b/assets/locked-function-settings.stories-pcc9LEW7.js @@ -1,4 +1,4 @@ -import{j as d}from"./jsx-runtime-FVsy8kgq.js";import{r as f}from"./index-TT1qJ6UJ.js";import{L as t}from"./locked-function-settings-ARS0ni8Z.js";import{g as P}from"./util-3pmDu6r6.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./answer-choices-uB4giKvU.js";import"./minus-bold-ONmDo3Ve.js";import"./renderer-vBOYiNCS.js";import"./version-akiLXZts.js";import"./util-XcxTwqb0.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-QCAhLhLD.js";import"./locked-label-settings-X4RKk04F.js";import"./article-renderer-6f7Dak4j.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./color-select-G-xDxP7-.js";import"./locked-figure-aria-RWwSDIb0.js";import"./components-GHvuFaIn.js";import"./line-stroke-select-CC0fFBuz.js";import"./line-swatch-xLt6fclZ.js";const lr={title:"PerseusEditor/Components/Locked Function Settings",component:t},o=p=>d(t,{...p}),u={...P("function"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};o.args=u;const r={render:function(){const[i,g]=f.useState(u);return d(t,{...i,expanded:!0,onChangeProps:l=>{g({...i,...l})}})}};o.__docgenInfo={description:"",methods:[],displayName:"Default"};var m,e,n;o.parameters={...o.parameters,docs:{...(m=o.parameters)==null?void 0:m.docs,source:{originalSource:`(args): React.ReactElement => { +import{j as d}from"./jsx-runtime-FVsy8kgq.js";import{r as f}from"./index-TT1qJ6UJ.js";import{L as t}from"./locked-function-settings-hpVCfdZN.js";import{g as P}from"./util-yTFMWwoT.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./answer-choices-xSqM961S.js";import"./minus-bold-ONmDo3Ve.js";import"./renderer-hPmI_Chp.js";import"./version-akiLXZts.js";import"./util-YrNvlCNO.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-QCAhLhLD.js";import"./locked-label-settings-mrPkDK9u.js";import"./article-renderer-TMdCDA85.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./color-select-GgikiV2v.js";import"./locked-figure-aria-7tCktpI9.js";import"./components-h6HHhmoA.js";import"./line-stroke-select-8a9MPfaw.js";import"./line-swatch-0Zcc1GCG.js";const lr={title:"PerseusEditor/Components/Locked Function Settings",component:t},o=p=>d(t,{...p}),u={...P("function"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};o.args=u;const r={render:function(){const[i,g]=f.useState(u);return d(t,{...i,expanded:!0,onChangeProps:l=>{g({...i,...l})}})}};o.__docgenInfo={description:"",methods:[],displayName:"Default"};var m,e,n;o.parameters={...o.parameters,docs:{...(m=o.parameters)==null?void 0:m.docs,source:{originalSource:`(args): React.ReactElement => { return ; }`,...(n=(e=o.parameters)==null?void 0:e.docs)==null?void 0:n.source}}};var s,a,c;r.parameters={...r.parameters,docs:{...(s=r.parameters)==null?void 0:s.docs,source:{originalSource:`{ render: function Render() { diff --git a/assets/locked-functions.stories-DiYpkFbz.js b/assets/locked-functions.stories-0Otxh32d.js similarity index 86% rename from assets/locked-functions.stories-DiYpkFbz.js rename to assets/locked-functions.stories-0Otxh32d.js index e80195565b..07fecb4cdd 100644 --- a/assets/locked-functions.stories-DiYpkFbz.js +++ b/assets/locked-functions.stories-0Otxh32d.js @@ -1,4 +1,4 @@ -import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{R as t}from"./renderer-with-debug-ui-fbym8U_I.js";import{h as o}from"./interactive-graph.testdata-QKEIR03d.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";import"./interactive-graph-question-builder-Mh2lh4tI.js";const Ht={title:"Perseus/Widgets/Interactive Graph/Locked Functions"},r={apiOptions:{flags:{mafs:{segment:!0}}}},i=s=>e(t,{...r,question:o()}),a=s=>e(t,{...r,question:o("x^2",{color:"green",strokeStyle:"dashed"})}),n=s=>e(t,{...r,question:o("y^2",{directionalAxis:"y"})}),m=s=>e(t,{...r,question:o("sin(x)",{domain:[-5,1/0]})}),c=s=>e(t,{...r,question:o("sin(x)",{domain:[-1/0,5]})}),p=s=>e(t,{...r,question:o("sin(x)",{domain:[-5,5]})}),d=s=>e(t,{...r,question:o("x^2 + 2x + 3")}),u=s=>e(t,{...r,question:o("(1/3)x^3 - 2x^2 + 3x - 4")}),g=s=>e(t,{...r,question:o("tan(x)")}),l=s=>e(t,{...r,question:o("arctan(x)")}),h=s=>e(t,{...r,question:o("log(x)")}),R=s=>e(t,{...r,question:o("e^x")}),f=s=>e(t,{...r,question:o("abs(x)")});i.__docgenInfo={description:"",methods:[],displayName:"DefaultSettings"};a.__docgenInfo={description:"",methods:[],displayName:"StyledSettings"};n.__docgenInfo={description:"",methods:[],displayName:"FunctionOfY"};m.__docgenInfo={description:"",methods:[],displayName:"DomainRestrictedMin"};c.__docgenInfo={description:"",methods:[],displayName:"DomainRestrictedMax"};p.__docgenInfo={description:"",methods:[],displayName:"DomainRestrictedBoth"};d.__docgenInfo={description:"",methods:[],displayName:"Quadratic"};u.__docgenInfo={description:"",methods:[],displayName:"QubicPolynomial"};g.__docgenInfo={description:"",methods:[],displayName:"Tangent"};l.__docgenInfo={description:"",methods:[],displayName:"ArcTangent"};h.__docgenInfo={description:"",methods:[],displayName:"Logarithmic"};R.__docgenInfo={description:"",methods:[],displayName:"Exponent"};f.__docgenInfo={description:"",methods:[],displayName:"AbsoluteValue"};var y,x,S;i.parameters={...i.parameters,docs:{...(y=i.parameters)==null?void 0:y.docs,source:{originalSource:"(args: StoryArgs): React.ReactElement => ",...(S=(x=i.parameters)==null?void 0:x.docs)==null?void 0:S.source}}};var I,W,_;a.parameters={...a.parameters,docs:{...(I=a.parameters)==null?void 0:I.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => e(t,{...r,question:o()}),a=s=>e(t,{...r,question:o("x^2",{color:"green",strokeStyle:"dashed"})}),n=s=>e(t,{...r,question:o("y^2",{directionalAxis:"y"})}),m=s=>e(t,{...r,question:o("sin(x)",{domain:[-5,1/0]})}),c=s=>e(t,{...r,question:o("sin(x)",{domain:[-1/0,5]})}),p=s=>e(t,{...r,question:o("sin(x)",{domain:[-5,5]})}),d=s=>e(t,{...r,question:o("x^2 + 2x + 3")}),u=s=>e(t,{...r,question:o("(1/3)x^3 - 2x^2 + 3x - 4")}),g=s=>e(t,{...r,question:o("tan(x)")}),l=s=>e(t,{...r,question:o("arctan(x)")}),h=s=>e(t,{...r,question:o("log(x)")}),R=s=>e(t,{...r,question:o("e^x")}),f=s=>e(t,{...r,question:o("abs(x)")});i.__docgenInfo={description:"",methods:[],displayName:"DefaultSettings"};a.__docgenInfo={description:"",methods:[],displayName:"StyledSettings"};n.__docgenInfo={description:"",methods:[],displayName:"FunctionOfY"};m.__docgenInfo={description:"",methods:[],displayName:"DomainRestrictedMin"};c.__docgenInfo={description:"",methods:[],displayName:"DomainRestrictedMax"};p.__docgenInfo={description:"",methods:[],displayName:"DomainRestrictedBoth"};d.__docgenInfo={description:"",methods:[],displayName:"Quadratic"};u.__docgenInfo={description:"",methods:[],displayName:"QubicPolynomial"};g.__docgenInfo={description:"",methods:[],displayName:"Tangent"};l.__docgenInfo={description:"",methods:[],displayName:"ArcTangent"};h.__docgenInfo={description:"",methods:[],displayName:"Logarithmic"};R.__docgenInfo={description:"",methods:[],displayName:"Exponent"};f.__docgenInfo={description:"",methods:[],displayName:"AbsoluteValue"};var y,x,S;i.parameters={...i.parameters,docs:{...(y=i.parameters)==null?void 0:y.docs,source:{originalSource:"(args: StoryArgs): React.ReactElement => ",...(S=(x=i.parameters)==null?void 0:x.docs)==null?void 0:S.source}}};var I,W,_;a.parameters={...a.parameters,docs:{...(I=a.parameters)==null?void 0:I.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => `,...(_=(W=a.parameters)==null?void 0:W.docs)==null?void 0:_.source}}};var q,D,b;n.parameters={...n.parameters,docs:{...(q=n.parameters)==null?void 0:q.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => {const{coord:e,labels:t,error:r,style:n,onChange:o}=i,[d,l]=a.useState([e[0].toString(),e[1].toString()]);a.useEffect(()=>{l([e[0].toString(),e[1].toString()])},[e]);function h(c,m){const v=[...d];if(v[m]=c,l(v),isNaN(+c)||c==="")return;const f=[...e];f[m]=+c,o(f)}return B(M,{style:[W.row,n],children:[B(re,{tag:"label",style:W.row,children:[t?t[0]:"x coord",g(K,{size:u.xxSmall_6}),g(me,{value:d[0],onChange:c=>h(c,0),style:[W.textField,r?W.errorField:void 0]})]}),g(K,{size:u.medium_16}),B(re,{tag:"label",style:W.row,children:[t?t[1]:"y coord",g(K,{size:u.xxSmall_6}),g(me,{value:d[1],onChange:c=>h(c,1),style:[W.textField,r?W.errorField:void 0]})]})]})},W=R.StyleSheet.create({row:{display:"flex",flexDirection:"row",alignItems:"center"},textField:{width:u.xxxLarge_64},errorField:{borderColor:s.red,backgroundColor:s.fadedRed8}}),je=xe;xe.__docgenInfo={description:"",methods:[],displayName:"CoordinatePairInput",props:{coord:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},labels:{required:!1,tsType:{name:"tuple",raw:"[string, string]",elements:[{name:"string"},{name:"string"}]},description:""},error:{required:!1,tsType:{name:"boolean"},description:""},style:{required:!1,tsType:{name:"StyleType"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newCoord: Coord) => void",signature:{arguments:[{type:{name:"Coord"},name:"newCoord"}],return:{name:"void"}}},description:""}}};function G(){return G=Object.assign?Object.assign.bind():function(i){for(var e=1;e=0)&&(t[n]=i[n]);return t}const Ve=["children","id","initialExpandedIndex","allowMultipleExpanded","caretPosition","cornerKind","animated","style"],Qe=ne("ul"),Ge=6;a.forwardRef(function(e,t){const{children:r,id:n,initialExpandedIndex:o,allowMultipleExpanded:d=!0,caretPosition:l,cornerKind:h="rounded",animated:c,style:m}=e,v=ke(e,Ve),f=Array(r.length).fill(!1);o!==void 0&&(f[o]=!0);const[w,S]=a.useState(f),p=Array(r.length).fill(null),C=r.length<=Ge,I=(x,b)=>{const k=d?[...w]:Array(r.length).fill(!1),_=!w[x];k[x]=_,S(k),b&&b(_)},F=x=>{var b,k,_,N;const D=p.findIndex($=>$.current===document.activeElement);if(D!==-1)switch(x.key){case"ArrowUp":x.preventDefault();const $=(D+r.length-1)%r.length;(b=p[$].current)==null||b.focus();break;case"ArrowDown":x.preventDefault();const L=(D+1)%r.length;(k=p[L].current)==null||k.focus();break;case"Home":x.preventDefault(),(_=p[0].current)==null||_.focus();break;case"End":x.preventDefault(),(N=p[r.length-1].current)==null||N.focus();break}};return a.createElement(Qe,G({style:[Xe.wrapper,m],onKeyDown:F},v,{ref:t}),r.map((x,b)=>{const{caretPosition:k,cornerKind:_,onToggle:N,animated:D}=x.props,$=a.createRef();p[b]=$;const T=b===0,L=b===r.length-1;return a.createElement("li",{key:b,id:n},a.cloneElement(x,{animated:D??c,caretPosition:k??l,cornerKind:_??h,expanded:w[b],onToggle:()=>I(b,N),isFirstSection:T,isLastSection:L,isRegion:C,ref:$}))}))});const Xe=R.StyleSheet.create({wrapper:{boxSizing:"border-box",listStyle:"none",padding:0,width:"100%"}});function Je(i,e,t,r){switch(i){case"rounded-per-section":return{roundedTop:!0,roundedBottom:!r};case"rounded":return{roundedTop:e,roundedBottom:t&&!r};default:return{roundedTop:!1,roundedBottom:!1}}}const Ye=a.forwardRef(function(e,t){const{id:r,header:n,caretPosition:o,cornerKind:d,collapsible:l=!0,expanded:h,animated:c,onClick:m,sectionContentUniqueId:v,headerStyle:f,tag:w="h2",testId:S,isFirstSection:p,isLastSection:C}=e,I=typeof n=="string",{roundedTop:F,roundedBottom:x}=Je(d,p,C,h);return a.createElement(Me,{tag:w,style:E.heading},a.createElement(Ae,{id:r,"aria-expanded":h,"aria-controls":v,onClick:m,disabled:!l,testId:S?`${S}-header`:void 0,style:[E.headerWrapper,c&&E.headerWrapperWithAnimation,o==="start"&&E.headerWrapperCaretStart,F&&E.roundedTop,x&&E.roundedBottom,f,!l&&E.disabled],ref:t},()=>a.createElement(a.Fragment,null,a.createElement(M,{style:[E.headerContent,I&&E.headerString]},I?a.createElement(M,{style:[o==="end"?E.headerStringCaretEnd:E.headerStringCaretStart]},n):n),l&&a.createElement(le,{icon:Se,color:s.offBlack64,size:"small",style:[c&&E.iconWithAnimation,o==="start"?E.iconStart:E.iconEnd,h&&E.iconExpanded],testId:S?`${S}-caret-icon`:void 0}))))}),J=u.small_12-1,ge="300ms",E=R.StyleSheet.create({heading:{minWidth:0,marginTop:0},headerWrapper:{display:"flex",flexDirection:"row",alignItems:"center",overflow:"hidden",minWidth:"auto",width:"100%",position:"relative",zIndex:1,":active":{outline:`2px solid ${s.activeBlue}`},":hover":{outline:`2px solid ${s.blue}`},":focus":{boxShadow:`0 0 0 2px ${s.blue}`},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":{outline:`2px solid ${s.blue}`}},headerWrapperWithAnimation:{transition:`border-radius ${ge}`},headerWrapperCaretStart:{flexDirection:"row-reverse"},roundedTop:{borderStartStartRadius:J,borderStartEndRadius:J},roundedBottom:{borderEndStartRadius:J,borderEndEndRadius:J},headerContent:{flexGrow:1,textAlign:"start"},headerString:{paddingTop:u.medium_16,paddingBottom:u.medium_16},headerStringCaretEnd:{paddingInlineEnd:u.small_12,paddingInlineStart:u.medium_16},headerStringCaretStart:{paddingInlineEnd:u.medium_16,paddingInlineStart:u.small_12},iconWithAnimation:{transition:`transform ${ge}`},iconExpanded:{transform:"rotate(180deg)"},iconStart:{marginInlineStart:u.medium_16},iconEnd:{marginInlineEnd:u.medium_16},disabled:{pointerEvents:"none",color:"inherit",":focus":{boxShadow:`0 0 0 2px ${s.offBlack32}`},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":{outline:`2px solid ${s.offBlack32}`}}}),Ze=["children","id","header","collapsible","expanded","animated","onToggle","caretPosition","cornerKind","style","headerStyle","tag","testId","isFirstSection","isLastSection","isRegion"],et=a.forwardRef(function(e,t){const{children:r,id:n,header:o,collapsible:d,expanded:l,animated:h=!1,onToggle:c,caretPosition:m="end",cornerKind:v="rounded",style:f,headerStyle:w,tag:S,testId:p,isFirstSection:C=!0,isLastSection:I=!0,isRegion:F=!0}=e,x=ke(e,Ze),[b,k]=a.useState(l??!1),_=l!==void 0&&c,N=Fe(),D=n??N.get("accordion-section"),$=n?`${n}-header`:N.get("accordion-section-header"),T=N.get("accordion-section-content"),L=tt(v,C,I),fe=()=>{_?c(!l):(k(!b),c&&c(!b))};let q;return d===!1?q=!0:q=_?l:b,a.createElement(M,G({id:D,style:[A.wrapper,h&&A.wrapperWithAnimation,L.wrapper,q?A.wrapperExpanded:A.wrapperCollapsed,f],testId:p},x),a.createElement(Ye,{id:$,header:o,caretPosition:m,cornerKind:v,collapsible:d,expanded:q,animated:h,onClick:fe,sectionContentUniqueId:T,headerStyle:w,tag:S,testId:p,isFirstSection:C,isLastSection:I,ref:t}),a.createElement(M,{id:T,role:F?"region":void 0,"aria-labelledby":$,style:[A.contentWrapper,q?A.contentWrapperExpanded:A.conentWrapperCollapsed,L.contentWrapper],testId:p?`${p}-content-panel`:void 0},typeof r=="string"?a.createElement(Pe,{style:A.stringContent},r):r))}),A=R.StyleSheet.create({wrapper:{display:"grid",position:"static",boxSizing:"border-box",backgroundColor:s.white},wrapperWithAnimation:{transition:"grid-template-rows 300ms"},wrapperCollapsed:{gridTemplateRows:"min-content 0fr"},wrapperExpanded:{gridTemplateRows:"min-content 1fr"},contentWrapper:{overflow:"hidden"},conentWrapperCollapsed:{visibility:"hidden"},contentWrapperExpanded:{visibility:"visible"},stringContent:{padding:u.medium_16}}),Y={},tt=(i,e,t)=>{const r=`${i}-${e.toString()}-${t.toString()}`;if(Y[r])return Y[r];let n=Object.freeze({}),o=Object.freeze({}),d=Object.freeze({}),l=Object.freeze({});i==="square"&&(n={border:`1px solid ${s.offBlack16}`,borderBottom:"none",borderRadius:0},t&&(l={borderBottom:`1px solid ${s.offBlack16}`})),i==="rounded"&&(n={border:`1px solid ${s.offBlack16}`,borderBottom:"none"},e&&(d={borderStartStartRadius:u.small_12,borderStartEndRadius:u.small_12}),t&&(l={borderBottom:`1px solid ${s.offBlack16}`,borderEndStartRadius:u.small_12,borderEndEndRadius:u.small_12},o={borderEndEndRadius:u.small_12,borderEndStartRadius:u.small_12})),i==="rounded-per-section"&&(n={border:`1px solid ${s.offBlack16}`,borderRadius:u.small_12,marginBottom:u.medium_16},o={borderEndEndRadius:u.small_12,borderEndStartRadius:u.small_12});const h={wrapper:G({},n,d,l),contentWrapper:o};return Y[r]=R.StyleSheet.create(h),Y[r]},Re=i=>{const{children:e,header:t,expanded:r,containerStyle:n,panelStyle:o,onToggle:d}=i;return g(M,{className:"perseus-editor-accordion",children:g(et,{expanded:r,onToggle:d,style:[se.container,n],headerStyle:se.accordionHeader,header:t,children:g(M,{style:[se.accordionPanel,o],children:e})})})},se=R.StyleSheet.create({container:{backgroundColor:s.fadedBlue8,marginTop:u.xSmall_8},accordionHeader:{padding:u.small_12,paddingInlineEnd:0,height:u.xxLarge_48},accordionPanel:{paddingTop:u.xxSmall_6,paddingBottom:u.xxxSmall_4,paddingLeft:u.small_12,paddingRight:u.small_12}}),rt=Re;Re.__docgenInfo={description:"",methods:[],displayName:"PerseusEditorAccordion",props:{children:{required:!0,tsType:{name:"union",raw:"React.ReactNode | React.ReactNode[]",elements:[{name:"ReactReactNode",raw:"React.ReactNode"},{name:"Array",elements:[{name:"ReactReactNode",raw:"React.ReactNode"}],raw:"React.ReactNode[]"}]},description:""},header:{required:!0,tsType:{name:"union",raw:"string | React.ReactElement",elements:[{name:"string"},{name:"ReactReactElement",raw:"React.ReactElement"}]},description:""},expanded:{required:!1,tsType:{name:"boolean"},description:""},containerStyle:{required:!1,tsType:{name:"StyleType"},description:""},panelStyle:{required:!1,tsType:{name:"StyleType"},description:""},onToggle:{required:!1,tsType:{name:"signature",type:"function",raw:"(expanded: boolean) => void",signature:{arguments:[{type:{name:"boolean"},name:"expanded"}],return:{name:"void"}}},description:""}}};function Ee(i){const e=[];if(i)if(Array.isArray(i))for(const t of i)e.push(...Ee(t));else e.push(i);else return e;return e}function Ie(i){const e=[],t=[];if(!i)return{style:{},className:""};const r=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;Ee(i).forEach(o=>{const d=o._definition;if(d!=null)if(r){const l={};for(const[h,c]of Object.entries(d))l[h.replace(/-[a-z]/g,m=>m[1].toUpperCase())]=c;t.push(l)}else e.push(o);else t.push(o)});const n=Object.assign({},...t);if(t.length>0&&!r){const o=R.StyleSheet.create({inlineStyles:n});e.push(o.inlineStyles)}return{style:r?n:{},className:R.css(...e)}}const nt=["children","style","tag","testId"],ot=/^h[1-6]$/,ye=R.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}});a.forwardRef(function(e,t){let{children:r,style:n,tag:o="span",testId:d}=e,l=V(e,nt);const h=ot.test(o),c=Ie([ye.text,h&&ye.header,n]),m=l.className?[l.className,c.className].join(" "):c.className;return a.createElement(o,y({},l,{style:c.style,className:m,"data-testid":d,ref:t}),r)});const it=["className","style"];function O(i,e){return a.forwardRef((t,r)=>{const{className:n,style:o}=t,d=V(t,it),l=typeof i=="string"?at[i]:null,{className:h,style:c}=Ie([l,e,o]);return a.createElement(i,y({},d,{ref:r,className:[h,n].filter(Boolean).join(" "),style:c}))})}const at=R.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),st=["testId","tag"],X=R.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}}),lt=O("div",X.default),dt=O("article",X.default),ct=O("aside",X.default),ut=O("nav",X.default),ht=O("section",X.default);a.forwardRef(function(e,t){const{testId:r,tag:n="div"}=e,o=V(e,st),d=y({},o,{"data-testid":r});switch(n){case"article":return a.createElement(dt,y({},d,{ref:t}));case"aside":return a.createElement(ct,y({},d,{ref:t}));case"nav":return a.createElement(ut,y({},d,{ref:t}));case"section":return a.createElement(ht,y({},d,{ref:t}));case"div":return a.createElement(lt,y({},d,{ref:t}));default:throw Error(`${n} is not an allowed value for the 'tag' prop`)}});let z=function(i){return i.Root="root",i.Initial="initial",i.Standard="standard",i}({});const te=a.createContext(z.Root);te.displayName="RenderStateContext";class ft extends a.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,fallback:r}=this.props;return this._isTheRootComponent=!0,e?a.createElement(te.Provider,{value:z.Standard},t()):r?a.createElement(te.Provider,{value:z.Initial},r()):null}_maybeRender(e){const{children:t,fallback:r}=this.props;switch(e){case z.Root:return this._renderAsRootComponent();case z.Initial:return r?r():null;case z.Standard:return t()}{var n;return console.log(`We got a render state we don't understand: "${(n=JSON.stringify(e))!=null?n:""}"`),this._maybeRender(z.Root)}}render(){return a.createElement(te.Consumer,null,e=>this._maybeRender(e))}}class oe{constructor(e){this._uniqueFactoryName=void 0,this.get=r=>{const n=r.toLowerCase();if(!this._hasValidIdChars(r))throw new Error(`Invalid identifier key: ${r}`);return`${this._uniqueFactoryName}-${n}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${oe._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}}oe._factoryUniquenessCounter=0;class de{get(e){return e}}de.Default=new de;var pt=de.Default;class mt extends a.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:r,scope:n}=this.props;return e?r?t(pt):null:(this._idFactory||(this._idFactory=new oe(n)),t(this._idFactory))}render(){return a.createElement(ft,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}}class ce extends a.Component{renderChildren(e){const{id:t,children:r}=this.props,n=e?e.get(ce.defaultId):t;if(!n)throw new Error("Did not get an identifier factory nor a id prop");return r(n)}render(){const{id:e,scope:t}=this.props;return e?this.renderChildren():a.createElement(mt,{scope:t,mockOnFirstRender:!0},r=>this.renderChildren(r))}}ce.defaultId="wb-id";const be=i=>{switch(i){case"link":return{triggerOnEnter:!0,triggerOnSpace:!1};case"checkbox":case"radio":case"listbox":return{triggerOnEnter:!1,triggerOnSpace:!0};case"button":case"menuitem":case"menu":case"option":default:return{triggerOnEnter:!0,triggerOnSpace:!0}}},gt={onClick:()=>{},onMouseEnter:()=>{},onMouseLeave:()=>{},onMouseDown:()=>{},onMouseUp:()=>{},onTouchStart:()=>{},onTouchEnd:()=>{},onTouchCancel:()=>{},onKeyDown:()=>{},onKeyUp:()=>{}},H={enter:13,space:32},ve={hovered:!1,focused:!1,pressed:!1,waiting:!1};class ue extends a.Component{static getDerivedStateFromProps(e,t){return e.disabled?y({},ve,{focused:t.focused}):null}constructor(e){super(e),this.waitingForClick=void 0,this.enterClick=void 0,this.handleClick=t=>{const{onClick:r=void 0,beforeNav:n=void 0,safeWithNav:o=void 0}=this.props;this.enterClick||((r||n||o)&&(this.waitingForClick=!1),this.runCallbackAndMaybeNavigate(t))},this.handleMouseEnter=t=>{this.waitingForClick||this.setState({hovered:!0})},this.handleMouseLeave=()=>{this.waitingForClick||this.setState({hovered:!1,pressed:!1,focused:!1})},this.handleMouseDown=t=>{this.props.onMouseDown&&this.props.onMouseDown(t),this.setState({pressed:!0})},this.handleMouseUp=t=>{this.props.onMouseUp&&this.props.onMouseUp(t),this.setState({pressed:!1,focused:!1})},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=t=>{const{onKeyDown:r,role:n}=this.props;r&&r(t);const o=t.which||t.keyCode,{triggerOnEnter:d,triggerOnSpace:l}=be(n);d&&o===H.enter||l&&o===H.space?(t.preventDefault(),this.setState({pressed:!0})):!d&&o===H.enter&&(this.enterClick=!0)},this.handleKeyUp=t=>{const{onKeyUp:r,role:n}=this.props;r&&r(t);const o=t.which||t.keyCode,{triggerOnEnter:d,triggerOnSpace:l}=be(n);d&&o===H.enter||l&&o===H.space?(this.setState({pressed:!1,focused:!0}),this.runCallbackAndMaybeNavigate(t)):!d&&o===H.enter&&(this.enterClick=!1)},this.handleFocus=t=>{const{onFocus:r}=this.props;this.setState({focused:!0},()=>{r&&r(t)})},this.handleBlur=t=>{this.setState({focused:!1,pressed:!1})},this.state=ve,this.waitingForClick=!1,this.enterClick=!1}navigateOrReset(e){if(e){const{history:t,href:r,skipClientNav:n,target:o=void 0}=this.props;r&&(o==="_blank"?(window.open(r,"_blank"),this.setState({waiting:!1})):t&&!n?(t.push(r),this.setState({waiting:!1})):window.location.assign(r))}else this.setState({waiting:!1})}handleSafeWithNav(e,t){const{skipClientNav:r,history:n}=this.props;return n&&!r||this.props.target==="_blank"?(e(),this.navigateOrReset(t),Promise.resolve()):(this.state.waiting||this.setState({waiting:!0}),e().then(()=>{this.state.waiting||this.setState({waiting:!0})}).catch(o=>{}).finally(()=>{this.navigateOrReset(t)}))}runCallbackAndMaybeNavigate(e){const{onClick:t=void 0,beforeNav:r=void 0,safeWithNav:n=void 0,href:o,type:d}=this.props;let l=!0,h=!0;if(t&&t(e),e.defaultPrevented&&(l=!1,h=!1),e.preventDefault(),!o&&d==="submit"&&h){let c=e.currentTarget;for(;c;){if(c instanceof window.HTMLFormElement){const m=new window.Event("submit",{bubbles:!0,cancelable:!0});c.dispatchEvent(m);break}c=c.parentElement}}if(r)this.setState({waiting:!0}),r().then(()=>n?this.handleSafeWithNav(n,l):this.navigateOrReset(l)).catch(()=>{});else{if(n)return this.handleSafeWithNav(n,l);this.navigateOrReset(l)}}render(){const e=this.props.rel||(this.props.target==="_blank"?"noopener noreferrer":void 0),t=this.props.disabled?y({},gt,{onFocus:this.handleFocus,onBlur:this.handleBlur,tabIndex:this.props.tabIndex,rel:e}):{onClick:this.handleClick,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,onMouseDown:this.handleMouseDown,onMouseUp:this.handleMouseUp,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onTouchCancel:this.handleTouchCancel,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onFocus:this.handleFocus,onBlur:this.handleBlur,tabIndex:this.props.tabIndex,rel:e},{children:r}=this.props;return r&&r(this.state,t)}}ue.defaultProps={disabled:!1};const he=i=>typeof i!="string"?!1:!/^(https?:)?\/\//i.test(i)&&!/^([^#]*#[\w-]*|[\w\-.]+:)/.test(i),yt=ze(ue);function bt(i,e,t){return t&&e!==!0&&i&&he(i)?yt:ue}const vt=["href","onClick","skipClientNav","beforeNav","safeWithNav","style","target","testId","onFocus","onKeyDown","onKeyUp","onMouseDown","onMouseUp","hideDefaultFocusRing","light","disabled","tabIndex"],St=O("a"),wt=O("button"),Ct=O(Ce),xt=a.forwardRef(function(e,t){const r=(o,d,l)=>{const h=e.href&&!e.disabled,c=d&&!e.skipClientNav&&he(e.href||"");return h&&c&&e.href?a.createElement(Ct,y({},l,{to:e.href,role:e.role,target:e.target||void 0,"aria-disabled":e.disabled?"true":"false",ref:t}),e.children(o)):h&&!c?a.createElement(St,y({},l,{href:e.href,role:e.role,target:e.target||void 0,"aria-disabled":e.disabled?"true":"false",ref:t}),e.children(o)):a.createElement(wt,y({},l,{type:"button","aria-disabled":e.disabled,ref:t}),e.children(o))},n=o=>{const{href:d,onClick:l,skipClientNav:h,beforeNav:c=void 0,safeWithNav:m=void 0,style:v,target:f=void 0,testId:w,onFocus:S,onKeyDown:p,onKeyUp:C,onMouseDown:I,onMouseUp:F,hideDefaultFocusRing:x,light:b,disabled:k,tabIndex:_}=e,N=V(e,vt),D=bt(d,h,o),$=T=>[Q.reset,Q.link,!x&&T.focused&&(b?Q.focusedLight:Q.focused),k&&Q.disabled,v];return c?a.createElement(D,{href:d,onClick:l,beforeNav:c,safeWithNav:m,onFocus:S,onKeyDown:p,onKeyUp:C,onMouseDown:I,onMouseUp:F,disabled:k,tabIndex:_},(T,L)=>r(T,o,y({},N,{"data-testid":w,style:$(T)},L))):a.createElement(D,{href:d,onClick:l,safeWithNav:m,onFocus:S,onKeyDown:p,onKeyUp:C,onMouseDown:I,onMouseUp:F,target:f,disabled:k,tabIndex:_},(T,L)=>r(T,o,y({},N,{"data-testid":w,style:$(T)},L)))};return a.createElement(we.Consumer,null,o=>n(o))});xt.defaultProps={light:!1,disabled:!1};const Q=R.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:{":focus":{outline:`solid 2px ${s.blue}`}},focusedLight:{outline:`solid 2px ${s.white}`},disabled:{color:s.offBlack32,cursor:"not-allowed",":focus":{outline:"none"},":focus-visible":{outline:`solid 2px ${s.blue}`}}}),kt=i=>{switch(i){case"xsmall":return"small";case"small":return"medium";case"medium":return"medium";case"large":return"medium"}},Rt=i=>({xsmall:24,small:32,medium:40,large:48})[i],ie={color:{bg:{hovered:"transparent",active:"transparent",disabled:"transparent",filled:{action:{hovered:"transparent",active:"transparent"},critical:{hovered:"transparent",active:"transparent"}}},stroke:{disabled:{default:s.offBlack32,inverse:s.white50},inverse:s.white,action:{default:s.blue,active:s.activeBlue,inverse:s.fadedBlue},critical:{default:s.red,active:s.activeRed,inverse:s.fadedRed},primary:{action:{hovered:s.blue,active:s.activeBlue},critical:{hovered:s.red,active:s.activeRed},inverse:{default:s.white,hovered:s.white}},secondary:{default:s.offBlack},tertiary:{default:s.offBlack64},filled:{action:{hovered:s.blue,active:s.activeBlue},critical:{hovered:s.red,active:s.activeRed}}}},border:{width:{default:U.width.thin,active:U.width.none,hovered:U.width.thin,hoveredInverse:U.width.thin},radius:{default:U.radius.medium_4}}},Et=Ue(ie,{color:{bg:{hovered:s.white,active:s.white64,filled:{action:{hovered:s.blue,active:s.activeBlue},critical:{hovered:s.red,active:s.activeRed}}},stroke:{action:{inverse:s.eggplant},critical:{inverse:s.eggplant},primary:{action:{hovered:s.eggplant,active:s.eggplant},critical:{hovered:s.eggplant,active:s.eggplant},inverse:{hovered:s.eggplant}},filled:{action:{hovered:s.white,active:s.white},critical:{hovered:s.white,active:s.white}}}},border:{width:{hovered:U.width.none,hoveredInverse:U.width.none}}}),It={default:ie,khanmigo:Et},_e=Ke(ie);function _t(i){var e;const t=a.useContext(He),r=(e=It[t])!=null?e:ie;return a.createElement(_e.Provider,{value:r},i.children)}const Tt=["color","disabled","href","icon","kind","light","size","skipClientNav","style","testId"];function $t({icon:i,size:e}){switch(kt(e)){case"small":return a.createElement(le,{size:"small",color:"currentColor",icon:i});case"medium":default:return a.createElement(le,{size:"medium",color:"currentColor",icon:i})}}const Bt=ne("a"),Ft=ne("button"),Nt=ne(Ce),Dt=a.forwardRef(function(e,t){const{color:r,disabled:n,href:o,icon:d,kind:l="primary",light:h=!1,size:c="medium",skipClientNav:m,style:v,testId:f}=e,w=V(e,Tt),{theme:S,themeName:p}=qe(_e),C=I=>{const F=Pt(r,l,h,c,S,p),x=[Lt.shared,F.default,n&&F.disabled],b=a.createElement($t,{size:c,icon:d}),k=y({"data-testid":f,style:[x,v]},w);return o&&!n?I&&!m&&he(o)?a.createElement(Nt,y({},k,{to:o,ref:t}),b):a.createElement(Bt,y({},k,{href:o,ref:t}),b):a.createElement(Ft,y({type:"button"},k,{onClick:n?void 0:w.onClick,"aria-disabled":n,ref:t}),b)};return a.createElement(we.Consumer,null,I=>C(I))}),Lt=R.StyleSheet.create({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",padding:0,cursor:"pointer",border:"none",outline:"none",textDecoration:"none",background:"none",margin:-8,touchAction:"manipulation"}}),Z={};function Mt(i,e,t,r,n){switch(i){case"primary":const o=n==="destructive"?e.color.stroke.primary.critical.hovered:e.color.stroke.primary.action.hovered;return{":hover":{backgroundColor:e.color.bg.hovered,color:r?e.color.stroke.primary.inverse.hovered:o,outlineColor:r?e.color.stroke.inverse:t,outlineOffset:1,outlineStyle:"solid",outlineWidth:r?e.border.width.hoveredInverse:e.border.width.hovered},":active":{backgroundColor:e.color.bg.active}};case"secondary":case"tertiary":return{":hover":{backgroundColor:n==="destructive"?e.color.bg.filled.critical.hovered:e.color.bg.filled.action.hovered,color:n==="destructive"?e.color.stroke.filled.critical.hovered:e.color.stroke.filled.action.hovered,outlineWidth:e.border.width.active},":active":{backgroundColor:n==="destructive"?e.color.bg.filled.critical.active:e.color.bg.filled.action.active,color:n==="destructive"?e.color.stroke.filled.critical.active:e.color.stroke.filled.action.active,outlineWidth:e.border.width.active}};default:return{":focus-visible":{},":hover":{},":active":{}}}}const Pt=(i="default",e,t,r,n,o)=>{const d=i==="destructive"?n.color.stroke.critical.default:n.color.stroke.action.default,l=`${d}-${e}-${t}-${r}-${o}`;if(Z[l])return Z[l];if(t&&e!=="primary")throw new Error("Light is only supported for primary IconButtons");const h=(()=>{switch(e){case"primary":return t?n.color.stroke.primary.inverse.default:d;case"secondary":return n.color.stroke.secondary.default;case"tertiary":return n.color.stroke.tertiary.default;default:throw new Error("IconButton kind not recognized")}})(),c=Rt(r),m=Mt(e,n,d,t,i),v=i==="destructive"?n.color.stroke.critical.inverse:n.color.stroke.action.inverse,f=i==="destructive"?n.color.stroke.critical.active:n.color.stroke.action.active,w=t?n.color.stroke.inverse:d,S=t?n.color.stroke.disabled.inverse:n.color.stroke.disabled.default,p={backgroundColor:n.color.bg.disabled,color:S,outlineColor:S},C={default:{height:c,width:c,color:h,borderRadius:n.border.radius.default,":hover":y({boxShadow:"none",color:w,borderRadius:n.border.radius.default,outlineWidth:n.border.width.default},m[":hover"]),"@media not (hover: hover)":{":hover":{boxShadow:"none",color:h,borderRadius:n.border.radius.default,outline:"none",backgroundColor:"transparent"}},":focus":{boxShadow:`0 0 0 ${n.border.width.default}px ${w}`,borderRadius:n.border.radius.default},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":y({boxShadow:"none",outlineWidth:n.border.width.default,outlineColor:w,outlineOffset:1,outlineStyle:"solid",borderRadius:n.border.radius.default},m[":focus-visible"]),":active":y({color:t?v:f,outlineWidth:n.border.width.default,outlineColor:t?v:f,outlineOffset:1,outlineStyle:"solid",borderRadius:n.border.radius.default},m[":active"])},disabled:{color:S,cursor:"not-allowed",":hover":y({},p,{outline:"none"}),":active":y({},p,{outline:"none"}),":focus":{boxShadow:`0 0 0 ${n.border.width.default}px ${S}`,borderRadius:n.border.radius.default},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":p}};return Z[l]=R.StyleSheet.create(C),Z[l]},At=["color","disabled","href","kind","light","size","skipClientNav","tabIndex","target"],ee=a.forwardRef(function(e,t){const{color:r="default",disabled:n=!1,href:o,kind:d="primary",light:l=!1,size:h="medium",skipClientNav:c,tabIndex:m,target:v}=e,f=V(e,At);function w(p){const C=p.key;!o&&(C==="Enter"||C==="Space")&&p.preventDefault()}function S(p){const C=p.key;!o&&(C==="Enter"||C==="Space")&&f.onClick&&f.onClick(p)}return a.createElement(_t,null,a.createElement(Dt,y({},f,{color:r,disabled:n,href:o,kind:d,light:l,ref:t,skipClientNav:c,size:h,target:v,tabIndex:m,onKeyDown:w,onKeyUp:S})))}),Ot=""+new URL("caret-double-down-bold-XepWuyCn.svg",import.meta.url).href,Wt=""+new URL("caret-double-up-bold-10VQDgxI.svg",import.meta.url).href,zt=""+new URL("caret-up-bold-0QYBH_hJ.svg",import.meta.url).href,Ut=""+new URL("trash-bold-rak1tQ6r.svg",import.meta.url).href,Te=i=>{const{figureType:e,onMove:t,onRemove:r}=i;return B(M,{style:j.container,children:[g(We,{startIcon:Ut,"aria-label":`Delete locked ${e}`,onClick:r,kind:"tertiary",style:j.deleteButton,children:"Delete"}),t&&B($e,{children:[g(Le,{}),g(ee,{icon:Wt,size:"small","aria-label":`Move locked ${e} to the back`,onClick:()=>t("back"),style:j.iconButton}),g(ee,{icon:zt,size:"small","aria-label":`Move locked ${e} backward`,onClick:()=>t("backward"),style:j.iconButton}),g(ee,{icon:Se,size:"small","aria-label":`Move locked ${e} forward`,onClick:()=>t("forward"),style:j.iconButton}),g(ee,{icon:Ot,size:"small","aria-label":`Move locked ${e} to the front`,onClick:()=>t("front"),style:j.iconButton})]})]})},j=R.StyleSheet.create({container:{width:"100%",flexDirection:"row",alignItems:"center",marginTop:u.xxxSmall_4},deleteButton:{marginInlineStart:-u.xxxSmall_4},iconButton:{margin:0}}),Kt=Te;Te.__docgenInfo={description:"",methods:[],displayName:"LockedFigureSettingsActions",props:{figureType:{required:!0,tsType:{name:"LockedFigureType"},description:""},onMove:{required:!1,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" +import{a as B,j as g,F as $e}from"./jsx-runtime-FVsy8kgq.js";import{l as Be}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{V as M,b as ne,u as Fe,a as V,_ as y}from"./index-6h5t6F0w.js";import{c as Se,S as Ne,O as ae}from"./answer-choices-xSqM961S.js";import{T as De}from"./index-QCAhLhLD.js";import{S as K,a as Le}from"./index-qUyqkRvh.js";import{s as u,c as s,b as U}from"./index-deFLJwr4.js";import{a as re,H as Me,B as Pe,L as pe}from"./index-h_CiYGGb.js";import{l as R}from"./index-awljIyHI.js";import{r as a}from"./index-TT1qJ6UJ.js";import{S as me}from"./scrollless-number-text-field-U5Bx_xXb.js";import{C as Ae}from"./index-o3wWn3Y5.js";import{P as le}from"./index-xuPsLuPk.js";import{C as Oe}from"./color-select-GgikiV2v.js";import{B as We}from"./choice-E4eyMygy.js";import{w as ze,c as we,L as Ce}from"./react-router-dom-W_e8xVUu.js";import{m as Ue,c as Ke,u as qe,T as He}from"./index-rfN0X25E.js";const xe=i=>{const{coord:e,labels:t,error:r,style:n,onChange:o}=i,[d,l]=a.useState([e[0].toString(),e[1].toString()]);a.useEffect(()=>{l([e[0].toString(),e[1].toString()])},[e]);function h(c,m){const v=[...d];if(v[m]=c,l(v),isNaN(+c)||c==="")return;const f=[...e];f[m]=+c,o(f)}return B(M,{style:[W.row,n],children:[B(re,{tag:"label",style:W.row,children:[t?t[0]:"x coord",g(K,{size:u.xxSmall_6}),g(me,{value:d[0],onChange:c=>h(c,0),style:[W.textField,r?W.errorField:void 0]})]}),g(K,{size:u.medium_16}),B(re,{tag:"label",style:W.row,children:[t?t[1]:"y coord",g(K,{size:u.xxSmall_6}),g(me,{value:d[1],onChange:c=>h(c,1),style:[W.textField,r?W.errorField:void 0]})]})]})},W=R.StyleSheet.create({row:{display:"flex",flexDirection:"row",alignItems:"center"},textField:{width:u.xxxLarge_64},errorField:{borderColor:s.red,backgroundColor:s.fadedRed8}}),je=xe;xe.__docgenInfo={description:"",methods:[],displayName:"CoordinatePairInput",props:{coord:{required:!0,tsType:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}]},description:""},labels:{required:!1,tsType:{name:"tuple",raw:"[string, string]",elements:[{name:"string"},{name:"string"}]},description:""},error:{required:!1,tsType:{name:"boolean"},description:""},style:{required:!1,tsType:{name:"StyleType"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(newCoord: Coord) => void",signature:{arguments:[{type:{name:"Coord"},name:"newCoord"}],return:{name:"void"}}},description:""}}};function G(){return G=Object.assign?Object.assign.bind():function(i){for(var e=1;e=0)&&(t[n]=i[n]);return t}const Ve=["children","id","initialExpandedIndex","allowMultipleExpanded","caretPosition","cornerKind","animated","style"],Qe=ne("ul"),Ge=6;a.forwardRef(function(e,t){const{children:r,id:n,initialExpandedIndex:o,allowMultipleExpanded:d=!0,caretPosition:l,cornerKind:h="rounded",animated:c,style:m}=e,v=ke(e,Ve),f=Array(r.length).fill(!1);o!==void 0&&(f[o]=!0);const[w,S]=a.useState(f),p=Array(r.length).fill(null),C=r.length<=Ge,I=(x,b)=>{const k=d?[...w]:Array(r.length).fill(!1),_=!w[x];k[x]=_,S(k),b&&b(_)},F=x=>{var b,k,_,N;const D=p.findIndex($=>$.current===document.activeElement);if(D!==-1)switch(x.key){case"ArrowUp":x.preventDefault();const $=(D+r.length-1)%r.length;(b=p[$].current)==null||b.focus();break;case"ArrowDown":x.preventDefault();const L=(D+1)%r.length;(k=p[L].current)==null||k.focus();break;case"Home":x.preventDefault(),(_=p[0].current)==null||_.focus();break;case"End":x.preventDefault(),(N=p[r.length-1].current)==null||N.focus();break}};return a.createElement(Qe,G({style:[Xe.wrapper,m],onKeyDown:F},v,{ref:t}),r.map((x,b)=>{const{caretPosition:k,cornerKind:_,onToggle:N,animated:D}=x.props,$=a.createRef();p[b]=$;const T=b===0,L=b===r.length-1;return a.createElement("li",{key:b,id:n},a.cloneElement(x,{animated:D??c,caretPosition:k??l,cornerKind:_??h,expanded:w[b],onToggle:()=>I(b,N),isFirstSection:T,isLastSection:L,isRegion:C,ref:$}))}))});const Xe=R.StyleSheet.create({wrapper:{boxSizing:"border-box",listStyle:"none",padding:0,width:"100%"}});function Je(i,e,t,r){switch(i){case"rounded-per-section":return{roundedTop:!0,roundedBottom:!r};case"rounded":return{roundedTop:e,roundedBottom:t&&!r};default:return{roundedTop:!1,roundedBottom:!1}}}const Ye=a.forwardRef(function(e,t){const{id:r,header:n,caretPosition:o,cornerKind:d,collapsible:l=!0,expanded:h,animated:c,onClick:m,sectionContentUniqueId:v,headerStyle:f,tag:w="h2",testId:S,isFirstSection:p,isLastSection:C}=e,I=typeof n=="string",{roundedTop:F,roundedBottom:x}=Je(d,p,C,h);return a.createElement(Me,{tag:w,style:E.heading},a.createElement(Ae,{id:r,"aria-expanded":h,"aria-controls":v,onClick:m,disabled:!l,testId:S?`${S}-header`:void 0,style:[E.headerWrapper,c&&E.headerWrapperWithAnimation,o==="start"&&E.headerWrapperCaretStart,F&&E.roundedTop,x&&E.roundedBottom,f,!l&&E.disabled],ref:t},()=>a.createElement(a.Fragment,null,a.createElement(M,{style:[E.headerContent,I&&E.headerString]},I?a.createElement(M,{style:[o==="end"?E.headerStringCaretEnd:E.headerStringCaretStart]},n):n),l&&a.createElement(le,{icon:Se,color:s.offBlack64,size:"small",style:[c&&E.iconWithAnimation,o==="start"?E.iconStart:E.iconEnd,h&&E.iconExpanded],testId:S?`${S}-caret-icon`:void 0}))))}),J=u.small_12-1,ge="300ms",E=R.StyleSheet.create({heading:{minWidth:0,marginTop:0},headerWrapper:{display:"flex",flexDirection:"row",alignItems:"center",overflow:"hidden",minWidth:"auto",width:"100%",position:"relative",zIndex:1,":active":{outline:`2px solid ${s.activeBlue}`},":hover":{outline:`2px solid ${s.blue}`},":focus":{boxShadow:`0 0 0 2px ${s.blue}`},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":{outline:`2px solid ${s.blue}`}},headerWrapperWithAnimation:{transition:`border-radius ${ge}`},headerWrapperCaretStart:{flexDirection:"row-reverse"},roundedTop:{borderStartStartRadius:J,borderStartEndRadius:J},roundedBottom:{borderEndStartRadius:J,borderEndEndRadius:J},headerContent:{flexGrow:1,textAlign:"start"},headerString:{paddingTop:u.medium_16,paddingBottom:u.medium_16},headerStringCaretEnd:{paddingInlineEnd:u.small_12,paddingInlineStart:u.medium_16},headerStringCaretStart:{paddingInlineEnd:u.medium_16,paddingInlineStart:u.small_12},iconWithAnimation:{transition:`transform ${ge}`},iconExpanded:{transform:"rotate(180deg)"},iconStart:{marginInlineStart:u.medium_16},iconEnd:{marginInlineEnd:u.medium_16},disabled:{pointerEvents:"none",color:"inherit",":focus":{boxShadow:`0 0 0 2px ${s.offBlack32}`},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":{outline:`2px solid ${s.offBlack32}`}}}),Ze=["children","id","header","collapsible","expanded","animated","onToggle","caretPosition","cornerKind","style","headerStyle","tag","testId","isFirstSection","isLastSection","isRegion"],et=a.forwardRef(function(e,t){const{children:r,id:n,header:o,collapsible:d,expanded:l,animated:h=!1,onToggle:c,caretPosition:m="end",cornerKind:v="rounded",style:f,headerStyle:w,tag:S,testId:p,isFirstSection:C=!0,isLastSection:I=!0,isRegion:F=!0}=e,x=ke(e,Ze),[b,k]=a.useState(l??!1),_=l!==void 0&&c,N=Fe(),D=n??N.get("accordion-section"),$=n?`${n}-header`:N.get("accordion-section-header"),T=N.get("accordion-section-content"),L=tt(v,C,I),fe=()=>{_?c(!l):(k(!b),c&&c(!b))};let q;return d===!1?q=!0:q=_?l:b,a.createElement(M,G({id:D,style:[A.wrapper,h&&A.wrapperWithAnimation,L.wrapper,q?A.wrapperExpanded:A.wrapperCollapsed,f],testId:p},x),a.createElement(Ye,{id:$,header:o,caretPosition:m,cornerKind:v,collapsible:d,expanded:q,animated:h,onClick:fe,sectionContentUniqueId:T,headerStyle:w,tag:S,testId:p,isFirstSection:C,isLastSection:I,ref:t}),a.createElement(M,{id:T,role:F?"region":void 0,"aria-labelledby":$,style:[A.contentWrapper,q?A.contentWrapperExpanded:A.conentWrapperCollapsed,L.contentWrapper],testId:p?`${p}-content-panel`:void 0},typeof r=="string"?a.createElement(Pe,{style:A.stringContent},r):r))}),A=R.StyleSheet.create({wrapper:{display:"grid",position:"static",boxSizing:"border-box",backgroundColor:s.white},wrapperWithAnimation:{transition:"grid-template-rows 300ms"},wrapperCollapsed:{gridTemplateRows:"min-content 0fr"},wrapperExpanded:{gridTemplateRows:"min-content 1fr"},contentWrapper:{overflow:"hidden"},conentWrapperCollapsed:{visibility:"hidden"},contentWrapperExpanded:{visibility:"visible"},stringContent:{padding:u.medium_16}}),Y={},tt=(i,e,t)=>{const r=`${i}-${e.toString()}-${t.toString()}`;if(Y[r])return Y[r];let n=Object.freeze({}),o=Object.freeze({}),d=Object.freeze({}),l=Object.freeze({});i==="square"&&(n={border:`1px solid ${s.offBlack16}`,borderBottom:"none",borderRadius:0},t&&(l={borderBottom:`1px solid ${s.offBlack16}`})),i==="rounded"&&(n={border:`1px solid ${s.offBlack16}`,borderBottom:"none"},e&&(d={borderStartStartRadius:u.small_12,borderStartEndRadius:u.small_12}),t&&(l={borderBottom:`1px solid ${s.offBlack16}`,borderEndStartRadius:u.small_12,borderEndEndRadius:u.small_12},o={borderEndEndRadius:u.small_12,borderEndStartRadius:u.small_12})),i==="rounded-per-section"&&(n={border:`1px solid ${s.offBlack16}`,borderRadius:u.small_12,marginBottom:u.medium_16},o={borderEndEndRadius:u.small_12,borderEndStartRadius:u.small_12});const h={wrapper:G({},n,d,l),contentWrapper:o};return Y[r]=R.StyleSheet.create(h),Y[r]},Re=i=>{const{children:e,header:t,expanded:r,containerStyle:n,panelStyle:o,onToggle:d}=i;return g(M,{className:"perseus-editor-accordion",children:g(et,{expanded:r,onToggle:d,style:[se.container,n],headerStyle:se.accordionHeader,header:t,children:g(M,{style:[se.accordionPanel,o],children:e})})})},se=R.StyleSheet.create({container:{backgroundColor:s.fadedBlue8,marginTop:u.xSmall_8},accordionHeader:{padding:u.small_12,paddingInlineEnd:0,height:u.xxLarge_48},accordionPanel:{paddingTop:u.xxSmall_6,paddingBottom:u.xxxSmall_4,paddingLeft:u.small_12,paddingRight:u.small_12}}),rt=Re;Re.__docgenInfo={description:"",methods:[],displayName:"PerseusEditorAccordion",props:{children:{required:!0,tsType:{name:"union",raw:"React.ReactNode | React.ReactNode[]",elements:[{name:"ReactReactNode",raw:"React.ReactNode"},{name:"Array",elements:[{name:"ReactReactNode",raw:"React.ReactNode"}],raw:"React.ReactNode[]"}]},description:""},header:{required:!0,tsType:{name:"union",raw:"string | React.ReactElement",elements:[{name:"string"},{name:"ReactReactElement",raw:"React.ReactElement"}]},description:""},expanded:{required:!1,tsType:{name:"boolean"},description:""},containerStyle:{required:!1,tsType:{name:"StyleType"},description:""},panelStyle:{required:!1,tsType:{name:"StyleType"},description:""},onToggle:{required:!1,tsType:{name:"signature",type:"function",raw:"(expanded: boolean) => void",signature:{arguments:[{type:{name:"boolean"},name:"expanded"}],return:{name:"void"}}},description:""}}};function Ee(i){const e=[];if(i)if(Array.isArray(i))for(const t of i)e.push(...Ee(t));else e.push(i);else return e;return e}function Ie(i){const e=[],t=[];if(!i)return{style:{},className:""};const r=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;Ee(i).forEach(o=>{const d=o._definition;if(d!=null)if(r){const l={};for(const[h,c]of Object.entries(d))l[h.replace(/-[a-z]/g,m=>m[1].toUpperCase())]=c;t.push(l)}else e.push(o);else t.push(o)});const n=Object.assign({},...t);if(t.length>0&&!r){const o=R.StyleSheet.create({inlineStyles:n});e.push(o.inlineStyles)}return{style:r?n:{},className:R.css(...e)}}const nt=["children","style","tag","testId"],ot=/^h[1-6]$/,ye=R.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}});a.forwardRef(function(e,t){let{children:r,style:n,tag:o="span",testId:d}=e,l=V(e,nt);const h=ot.test(o),c=Ie([ye.text,h&&ye.header,n]),m=l.className?[l.className,c.className].join(" "):c.className;return a.createElement(o,y({},l,{style:c.style,className:m,"data-testid":d,ref:t}),r)});const it=["className","style"];function O(i,e){return a.forwardRef((t,r)=>{const{className:n,style:o}=t,d=V(t,it),l=typeof i=="string"?at[i]:null,{className:h,style:c}=Ie([l,e,o]);return a.createElement(i,y({},d,{ref:r,className:[h,n].filter(Boolean).join(" "),style:c}))})}const at=R.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),st=["testId","tag"],X=R.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}}),lt=O("div",X.default),dt=O("article",X.default),ct=O("aside",X.default),ut=O("nav",X.default),ht=O("section",X.default);a.forwardRef(function(e,t){const{testId:r,tag:n="div"}=e,o=V(e,st),d=y({},o,{"data-testid":r});switch(n){case"article":return a.createElement(dt,y({},d,{ref:t}));case"aside":return a.createElement(ct,y({},d,{ref:t}));case"nav":return a.createElement(ut,y({},d,{ref:t}));case"section":return a.createElement(ht,y({},d,{ref:t}));case"div":return a.createElement(lt,y({},d,{ref:t}));default:throw Error(`${n} is not an allowed value for the 'tag' prop`)}});let z=function(i){return i.Root="root",i.Initial="initial",i.Standard="standard",i}({});const te=a.createContext(z.Root);te.displayName="RenderStateContext";class ft extends a.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,fallback:r}=this.props;return this._isTheRootComponent=!0,e?a.createElement(te.Provider,{value:z.Standard},t()):r?a.createElement(te.Provider,{value:z.Initial},r()):null}_maybeRender(e){const{children:t,fallback:r}=this.props;switch(e){case z.Root:return this._renderAsRootComponent();case z.Initial:return r?r():null;case z.Standard:return t()}{var n;return console.log(`We got a render state we don't understand: "${(n=JSON.stringify(e))!=null?n:""}"`),this._maybeRender(z.Root)}}render(){return a.createElement(te.Consumer,null,e=>this._maybeRender(e))}}class oe{constructor(e){this._uniqueFactoryName=void 0,this.get=r=>{const n=r.toLowerCase();if(!this._hasValidIdChars(r))throw new Error(`Invalid identifier key: ${r}`);return`${this._uniqueFactoryName}-${n}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${oe._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}}oe._factoryUniquenessCounter=0;class de{get(e){return e}}de.Default=new de;var pt=de.Default;class mt extends a.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:r,scope:n}=this.props;return e?r?t(pt):null:(this._idFactory||(this._idFactory=new oe(n)),t(this._idFactory))}render(){return a.createElement(ft,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}}class ce extends a.Component{renderChildren(e){const{id:t,children:r}=this.props,n=e?e.get(ce.defaultId):t;if(!n)throw new Error("Did not get an identifier factory nor a id prop");return r(n)}render(){const{id:e,scope:t}=this.props;return e?this.renderChildren():a.createElement(mt,{scope:t,mockOnFirstRender:!0},r=>this.renderChildren(r))}}ce.defaultId="wb-id";const be=i=>{switch(i){case"link":return{triggerOnEnter:!0,triggerOnSpace:!1};case"checkbox":case"radio":case"listbox":return{triggerOnEnter:!1,triggerOnSpace:!0};case"button":case"menuitem":case"menu":case"option":default:return{triggerOnEnter:!0,triggerOnSpace:!0}}},gt={onClick:()=>{},onMouseEnter:()=>{},onMouseLeave:()=>{},onMouseDown:()=>{},onMouseUp:()=>{},onTouchStart:()=>{},onTouchEnd:()=>{},onTouchCancel:()=>{},onKeyDown:()=>{},onKeyUp:()=>{}},H={enter:13,space:32},ve={hovered:!1,focused:!1,pressed:!1,waiting:!1};class ue extends a.Component{static getDerivedStateFromProps(e,t){return e.disabled?y({},ve,{focused:t.focused}):null}constructor(e){super(e),this.waitingForClick=void 0,this.enterClick=void 0,this.handleClick=t=>{const{onClick:r=void 0,beforeNav:n=void 0,safeWithNav:o=void 0}=this.props;this.enterClick||((r||n||o)&&(this.waitingForClick=!1),this.runCallbackAndMaybeNavigate(t))},this.handleMouseEnter=t=>{this.waitingForClick||this.setState({hovered:!0})},this.handleMouseLeave=()=>{this.waitingForClick||this.setState({hovered:!1,pressed:!1,focused:!1})},this.handleMouseDown=t=>{this.props.onMouseDown&&this.props.onMouseDown(t),this.setState({pressed:!0})},this.handleMouseUp=t=>{this.props.onMouseUp&&this.props.onMouseUp(t),this.setState({pressed:!1,focused:!1})},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=t=>{const{onKeyDown:r,role:n}=this.props;r&&r(t);const o=t.which||t.keyCode,{triggerOnEnter:d,triggerOnSpace:l}=be(n);d&&o===H.enter||l&&o===H.space?(t.preventDefault(),this.setState({pressed:!0})):!d&&o===H.enter&&(this.enterClick=!0)},this.handleKeyUp=t=>{const{onKeyUp:r,role:n}=this.props;r&&r(t);const o=t.which||t.keyCode,{triggerOnEnter:d,triggerOnSpace:l}=be(n);d&&o===H.enter||l&&o===H.space?(this.setState({pressed:!1,focused:!0}),this.runCallbackAndMaybeNavigate(t)):!d&&o===H.enter&&(this.enterClick=!1)},this.handleFocus=t=>{const{onFocus:r}=this.props;this.setState({focused:!0},()=>{r&&r(t)})},this.handleBlur=t=>{this.setState({focused:!1,pressed:!1})},this.state=ve,this.waitingForClick=!1,this.enterClick=!1}navigateOrReset(e){if(e){const{history:t,href:r,skipClientNav:n,target:o=void 0}=this.props;r&&(o==="_blank"?(window.open(r,"_blank"),this.setState({waiting:!1})):t&&!n?(t.push(r),this.setState({waiting:!1})):window.location.assign(r))}else this.setState({waiting:!1})}handleSafeWithNav(e,t){const{skipClientNav:r,history:n}=this.props;return n&&!r||this.props.target==="_blank"?(e(),this.navigateOrReset(t),Promise.resolve()):(this.state.waiting||this.setState({waiting:!0}),e().then(()=>{this.state.waiting||this.setState({waiting:!0})}).catch(o=>{}).finally(()=>{this.navigateOrReset(t)}))}runCallbackAndMaybeNavigate(e){const{onClick:t=void 0,beforeNav:r=void 0,safeWithNav:n=void 0,href:o,type:d}=this.props;let l=!0,h=!0;if(t&&t(e),e.defaultPrevented&&(l=!1,h=!1),e.preventDefault(),!o&&d==="submit"&&h){let c=e.currentTarget;for(;c;){if(c instanceof window.HTMLFormElement){const m=new window.Event("submit",{bubbles:!0,cancelable:!0});c.dispatchEvent(m);break}c=c.parentElement}}if(r)this.setState({waiting:!0}),r().then(()=>n?this.handleSafeWithNav(n,l):this.navigateOrReset(l)).catch(()=>{});else{if(n)return this.handleSafeWithNav(n,l);this.navigateOrReset(l)}}render(){const e=this.props.rel||(this.props.target==="_blank"?"noopener noreferrer":void 0),t=this.props.disabled?y({},gt,{onFocus:this.handleFocus,onBlur:this.handleBlur,tabIndex:this.props.tabIndex,rel:e}):{onClick:this.handleClick,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,onMouseDown:this.handleMouseDown,onMouseUp:this.handleMouseUp,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onTouchCancel:this.handleTouchCancel,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onFocus:this.handleFocus,onBlur:this.handleBlur,tabIndex:this.props.tabIndex,rel:e},{children:r}=this.props;return r&&r(this.state,t)}}ue.defaultProps={disabled:!1};const he=i=>typeof i!="string"?!1:!/^(https?:)?\/\//i.test(i)&&!/^([^#]*#[\w-]*|[\w\-.]+:)/.test(i),yt=ze(ue);function bt(i,e,t){return t&&e!==!0&&i&&he(i)?yt:ue}const vt=["href","onClick","skipClientNav","beforeNav","safeWithNav","style","target","testId","onFocus","onKeyDown","onKeyUp","onMouseDown","onMouseUp","hideDefaultFocusRing","light","disabled","tabIndex"],St=O("a"),wt=O("button"),Ct=O(Ce),xt=a.forwardRef(function(e,t){const r=(o,d,l)=>{const h=e.href&&!e.disabled,c=d&&!e.skipClientNav&&he(e.href||"");return h&&c&&e.href?a.createElement(Ct,y({},l,{to:e.href,role:e.role,target:e.target||void 0,"aria-disabled":e.disabled?"true":"false",ref:t}),e.children(o)):h&&!c?a.createElement(St,y({},l,{href:e.href,role:e.role,target:e.target||void 0,"aria-disabled":e.disabled?"true":"false",ref:t}),e.children(o)):a.createElement(wt,y({},l,{type:"button","aria-disabled":e.disabled,ref:t}),e.children(o))},n=o=>{const{href:d,onClick:l,skipClientNav:h,beforeNav:c=void 0,safeWithNav:m=void 0,style:v,target:f=void 0,testId:w,onFocus:S,onKeyDown:p,onKeyUp:C,onMouseDown:I,onMouseUp:F,hideDefaultFocusRing:x,light:b,disabled:k,tabIndex:_}=e,N=V(e,vt),D=bt(d,h,o),$=T=>[Q.reset,Q.link,!x&&T.focused&&(b?Q.focusedLight:Q.focused),k&&Q.disabled,v];return c?a.createElement(D,{href:d,onClick:l,beforeNav:c,safeWithNav:m,onFocus:S,onKeyDown:p,onKeyUp:C,onMouseDown:I,onMouseUp:F,disabled:k,tabIndex:_},(T,L)=>r(T,o,y({},N,{"data-testid":w,style:$(T)},L))):a.createElement(D,{href:d,onClick:l,safeWithNav:m,onFocus:S,onKeyDown:p,onKeyUp:C,onMouseDown:I,onMouseUp:F,target:f,disabled:k,tabIndex:_},(T,L)=>r(T,o,y({},N,{"data-testid":w,style:$(T)},L)))};return a.createElement(we.Consumer,null,o=>n(o))});xt.defaultProps={light:!1,disabled:!1};const Q=R.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:{":focus":{outline:`solid 2px ${s.blue}`}},focusedLight:{outline:`solid 2px ${s.white}`},disabled:{color:s.offBlack32,cursor:"not-allowed",":focus":{outline:"none"},":focus-visible":{outline:`solid 2px ${s.blue}`}}}),kt=i=>{switch(i){case"xsmall":return"small";case"small":return"medium";case"medium":return"medium";case"large":return"medium"}},Rt=i=>({xsmall:24,small:32,medium:40,large:48})[i],ie={color:{bg:{hovered:"transparent",active:"transparent",disabled:"transparent",filled:{action:{hovered:"transparent",active:"transparent"},critical:{hovered:"transparent",active:"transparent"}}},stroke:{disabled:{default:s.offBlack32,inverse:s.white50},inverse:s.white,action:{default:s.blue,active:s.activeBlue,inverse:s.fadedBlue},critical:{default:s.red,active:s.activeRed,inverse:s.fadedRed},primary:{action:{hovered:s.blue,active:s.activeBlue},critical:{hovered:s.red,active:s.activeRed},inverse:{default:s.white,hovered:s.white}},secondary:{default:s.offBlack},tertiary:{default:s.offBlack64},filled:{action:{hovered:s.blue,active:s.activeBlue},critical:{hovered:s.red,active:s.activeRed}}}},border:{width:{default:U.width.thin,active:U.width.none,hovered:U.width.thin,hoveredInverse:U.width.thin},radius:{default:U.radius.medium_4}}},Et=Ue(ie,{color:{bg:{hovered:s.white,active:s.white64,filled:{action:{hovered:s.blue,active:s.activeBlue},critical:{hovered:s.red,active:s.activeRed}}},stroke:{action:{inverse:s.eggplant},critical:{inverse:s.eggplant},primary:{action:{hovered:s.eggplant,active:s.eggplant},critical:{hovered:s.eggplant,active:s.eggplant},inverse:{hovered:s.eggplant}},filled:{action:{hovered:s.white,active:s.white},critical:{hovered:s.white,active:s.white}}}},border:{width:{hovered:U.width.none,hoveredInverse:U.width.none}}}),It={default:ie,khanmigo:Et},_e=Ke(ie);function _t(i){var e;const t=a.useContext(He),r=(e=It[t])!=null?e:ie;return a.createElement(_e.Provider,{value:r},i.children)}const Tt=["color","disabled","href","icon","kind","light","size","skipClientNav","style","testId"];function $t({icon:i,size:e}){switch(kt(e)){case"small":return a.createElement(le,{size:"small",color:"currentColor",icon:i});case"medium":default:return a.createElement(le,{size:"medium",color:"currentColor",icon:i})}}const Bt=ne("a"),Ft=ne("button"),Nt=ne(Ce),Dt=a.forwardRef(function(e,t){const{color:r,disabled:n,href:o,icon:d,kind:l="primary",light:h=!1,size:c="medium",skipClientNav:m,style:v,testId:f}=e,w=V(e,Tt),{theme:S,themeName:p}=qe(_e),C=I=>{const F=Pt(r,l,h,c,S,p),x=[Lt.shared,F.default,n&&F.disabled],b=a.createElement($t,{size:c,icon:d}),k=y({"data-testid":f,style:[x,v]},w);return o&&!n?I&&!m&&he(o)?a.createElement(Nt,y({},k,{to:o,ref:t}),b):a.createElement(Bt,y({},k,{href:o,ref:t}),b):a.createElement(Ft,y({type:"button"},k,{onClick:n?void 0:w.onClick,"aria-disabled":n,ref:t}),b)};return a.createElement(we.Consumer,null,I=>C(I))}),Lt=R.StyleSheet.create({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",padding:0,cursor:"pointer",border:"none",outline:"none",textDecoration:"none",background:"none",margin:-8,touchAction:"manipulation"}}),Z={};function Mt(i,e,t,r,n){switch(i){case"primary":const o=n==="destructive"?e.color.stroke.primary.critical.hovered:e.color.stroke.primary.action.hovered;return{":hover":{backgroundColor:e.color.bg.hovered,color:r?e.color.stroke.primary.inverse.hovered:o,outlineColor:r?e.color.stroke.inverse:t,outlineOffset:1,outlineStyle:"solid",outlineWidth:r?e.border.width.hoveredInverse:e.border.width.hovered},":active":{backgroundColor:e.color.bg.active}};case"secondary":case"tertiary":return{":hover":{backgroundColor:n==="destructive"?e.color.bg.filled.critical.hovered:e.color.bg.filled.action.hovered,color:n==="destructive"?e.color.stroke.filled.critical.hovered:e.color.stroke.filled.action.hovered,outlineWidth:e.border.width.active},":active":{backgroundColor:n==="destructive"?e.color.bg.filled.critical.active:e.color.bg.filled.action.active,color:n==="destructive"?e.color.stroke.filled.critical.active:e.color.stroke.filled.action.active,outlineWidth:e.border.width.active}};default:return{":focus-visible":{},":hover":{},":active":{}}}}const Pt=(i="default",e,t,r,n,o)=>{const d=i==="destructive"?n.color.stroke.critical.default:n.color.stroke.action.default,l=`${d}-${e}-${t}-${r}-${o}`;if(Z[l])return Z[l];if(t&&e!=="primary")throw new Error("Light is only supported for primary IconButtons");const h=(()=>{switch(e){case"primary":return t?n.color.stroke.primary.inverse.default:d;case"secondary":return n.color.stroke.secondary.default;case"tertiary":return n.color.stroke.tertiary.default;default:throw new Error("IconButton kind not recognized")}})(),c=Rt(r),m=Mt(e,n,d,t,i),v=i==="destructive"?n.color.stroke.critical.inverse:n.color.stroke.action.inverse,f=i==="destructive"?n.color.stroke.critical.active:n.color.stroke.action.active,w=t?n.color.stroke.inverse:d,S=t?n.color.stroke.disabled.inverse:n.color.stroke.disabled.default,p={backgroundColor:n.color.bg.disabled,color:S,outlineColor:S},C={default:{height:c,width:c,color:h,borderRadius:n.border.radius.default,":hover":y({boxShadow:"none",color:w,borderRadius:n.border.radius.default,outlineWidth:n.border.width.default},m[":hover"]),"@media not (hover: hover)":{":hover":{boxShadow:"none",color:h,borderRadius:n.border.radius.default,outline:"none",backgroundColor:"transparent"}},":focus":{boxShadow:`0 0 0 ${n.border.width.default}px ${w}`,borderRadius:n.border.radius.default},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":y({boxShadow:"none",outlineWidth:n.border.width.default,outlineColor:w,outlineOffset:1,outlineStyle:"solid",borderRadius:n.border.radius.default},m[":focus-visible"]),":active":y({color:t?v:f,outlineWidth:n.border.width.default,outlineColor:t?v:f,outlineOffset:1,outlineStyle:"solid",borderRadius:n.border.radius.default},m[":active"])},disabled:{color:S,cursor:"not-allowed",":hover":y({},p,{outline:"none"}),":active":y({},p,{outline:"none"}),":focus":{boxShadow:`0 0 0 ${n.border.width.default}px ${S}`,borderRadius:n.border.radius.default},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":p}};return Z[l]=R.StyleSheet.create(C),Z[l]},At=["color","disabled","href","kind","light","size","skipClientNav","tabIndex","target"],ee=a.forwardRef(function(e,t){const{color:r="default",disabled:n=!1,href:o,kind:d="primary",light:l=!1,size:h="medium",skipClientNav:c,tabIndex:m,target:v}=e,f=V(e,At);function w(p){const C=p.key;!o&&(C==="Enter"||C==="Space")&&p.preventDefault()}function S(p){const C=p.key;!o&&(C==="Enter"||C==="Space")&&f.onClick&&f.onClick(p)}return a.createElement(_t,null,a.createElement(Dt,y({},f,{color:r,disabled:n,href:o,kind:d,light:l,ref:t,skipClientNav:c,size:h,target:v,tabIndex:m,onKeyDown:w,onKeyUp:S})))}),Ot=""+new URL("caret-double-down-bold-XepWuyCn.svg",import.meta.url).href,Wt=""+new URL("caret-double-up-bold-10VQDgxI.svg",import.meta.url).href,zt=""+new URL("caret-up-bold-0QYBH_hJ.svg",import.meta.url).href,Ut=""+new URL("trash-bold-rak1tQ6r.svg",import.meta.url).href,Te=i=>{const{figureType:e,onMove:t,onRemove:r}=i;return B(M,{style:j.container,children:[g(We,{startIcon:Ut,"aria-label":`Delete locked ${e}`,onClick:r,kind:"tertiary",style:j.deleteButton,children:"Delete"}),t&&B($e,{children:[g(Le,{}),g(ee,{icon:Wt,size:"small","aria-label":`Move locked ${e} to the back`,onClick:()=>t("back"),style:j.iconButton}),g(ee,{icon:zt,size:"small","aria-label":`Move locked ${e} backward`,onClick:()=>t("backward"),style:j.iconButton}),g(ee,{icon:Se,size:"small","aria-label":`Move locked ${e} forward`,onClick:()=>t("forward"),style:j.iconButton}),g(ee,{icon:Ot,size:"small","aria-label":`Move locked ${e} to the front`,onClick:()=>t("front"),style:j.iconButton})]})]})},j=R.StyleSheet.create({container:{width:"100%",flexDirection:"row",alignItems:"center",marginTop:u.xxxSmall_4},deleteButton:{marginInlineStart:-u.xxxSmall_4},iconButton:{margin:0}}),Kt=Te;Te.__docgenInfo={description:"",methods:[],displayName:"LockedFigureSettingsActions",props:{figureType:{required:!0,tsType:{name:"LockedFigureType"},description:""},onMove:{required:!1,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" | "backward" | "forward" | "front"`,elements:[{name:"literal",value:'"back"'},{name:"literal",value:'"backward"'},{name:"literal",value:'"forward"'},{name:"literal",value:'"front"'}]},name:"movement"}],return:{name:"void"}}},description:""},onRemove:{required:!0,tsType:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},description:""}}};function qt(i){const{type:e,coord:t,color:r,size:n,text:o,expanded:d,onChangeProps:l,onMove:h,onRemove:c,onToggle:m,containerStyle:v}=i;return B(rt,{expanded:d,onToggle:m,header:B(M,{style:[P.row,P.accordionHeaderContainer],children:[B(pe,{children:["Label (",t[0],", ",t[1],")"]}),g(K,{size:u.xSmall_8}),o!==""&&g(pe,{style:[{backgroundColor:s.white,color:Be[r]},P.accordionHeader],children:o})]}),containerStyle:v,children:[g(je,{coord:t,onChange:f=>{l({coord:f})},style:P.spaceUnder}),B(re,{tag:"label",style:[P.row,P.spaceUnder],children:["TeX",g(K,{size:u.xSmall_8}),g(De,{value:o,placeholder:"ex. x^2 or \\frac{1}{2}",onChange:f=>l({text:f})})]}),B(M,{style:P.row,children:[g(Oe,{selectedValue:r,onChange:f=>{l({color:f})},style:P.spaceUnder}),g(K,{size:u.medium_16}),B(re,{tag:"label",style:P.row,children:["size",g(K,{size:u.xSmall_8}),B(Ne,{selectedValue:n,onChange:f=>l({size:f}),placeholder:"",children:[g(ae,{value:"small",label:"small"}),g(ae,{value:"medium",label:"medium"}),g(ae,{value:"large",label:"large"})]})]})]}),g(Kt,{figureType:e,onMove:h,onRemove:c})]})}const P=R.StyleSheet.create({accordionHeaderContainer:{whiteSpace:"nowrap"},accordionHeader:{padding:u.xxxSmall_4,marginInlineEnd:u.xSmall_8,borderRadius:u.xxxSmall_4,textOverflow:"ellipsis",overflow:"hidden"},row:{display:"flex",flexDirection:"row",alignItems:"center",minWidth:0},spaceUnder:{marginBottom:u.xSmall_8}});qt.__docgenInfo={description:"",methods:[],displayName:"LockedLabelSettings",props:{onChangeProps:{required:!0,tsType:{name:"signature",type:"function",raw:"(newProps: Partial) => void",signature:{arguments:[{type:{name:"Partial",elements:[{name:"LockedFigure"}],raw:"Partial"},name:"newProps"}],return:{name:"void"}}},description:"Called when the props (coord, color, etc.) are updated."},onMove:{required:!1,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" diff --git a/assets/locked-label-settings.stories-GcIwtppq.js b/assets/locked-label-settings.stories-vzRgYliy.js similarity index 70% rename from assets/locked-label-settings.stories-GcIwtppq.js rename to assets/locked-label-settings.stories-vzRgYliy.js index b9cf0cd7c7..c9e7964aad 100644 --- a/assets/locked-label-settings.stories-GcIwtppq.js +++ b/assets/locked-label-settings.stories-vzRgYliy.js @@ -1,4 +1,4 @@ -import{j as c}from"./jsx-runtime-FVsy8kgq.js";import{r as P}from"./index-TT1qJ6UJ.js";import{L as t}from"./locked-label-settings-X4RKk04F.js";import{g as f}from"./util-3pmDu6r6.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./color-select-G-xDxP7-.js";const no={title:"PerseusEditor/Components/Locked Label Settings",component:t},r=p=>c(t,{...p}),u={...f("label"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};r.args=u;const o={render:function(){const[m,l]=P.useState(u);return c(t,{...m,expanded:!0,onChangeProps:g=>{l({...m,...g})}})}};r.__docgenInfo={description:"",methods:[],displayName:"Default"};var i,e,s;r.parameters={...r.parameters,docs:{...(i=r.parameters)==null?void 0:i.docs,source:{originalSource:`(args): React.ReactElement => { +import{j as c}from"./jsx-runtime-FVsy8kgq.js";import{r as P}from"./index-TT1qJ6UJ.js";import{L as t}from"./locked-label-settings-mrPkDK9u.js";import{g as f}from"./util-yTFMWwoT.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./color-select-GgikiV2v.js";const no={title:"PerseusEditor/Components/Locked Label Settings",component:t},r=p=>c(t,{...p}),u={...f("label"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};r.args=u;const o={render:function(){const[m,l]=P.useState(u);return c(t,{...m,expanded:!0,onChangeProps:g=>{l({...m,...g})}})}};r.__docgenInfo={description:"",methods:[],displayName:"Default"};var i,e,s;r.parameters={...r.parameters,docs:{...(i=r.parameters)==null?void 0:i.docs,source:{originalSource:`(args): React.ReactElement => { return ; }`,...(s=(e=r.parameters)==null?void 0:e.docs)==null?void 0:s.source}}};var n,a,d;o.parameters={...o.parameters,docs:{...(n=o.parameters)==null?void 0:n.docs,source:{originalSource:`{ render: function Render() { diff --git a/assets/locked-line-settings-APCIPT7n.js b/assets/locked-line-settings-s3VKqEiy.js similarity index 89% rename from assets/locked-line-settings-APCIPT7n.js rename to assets/locked-line-settings-s3VKqEiy.js index 668a5045e9..500265e50b 100644 --- a/assets/locked-line-settings-APCIPT7n.js +++ b/assets/locked-line-settings-s3VKqEiy.js @@ -1,4 +1,4 @@ -import{a as u,j as o,F as q}from"./jsx-runtime-FVsy8kgq.js";import"./util-XcxTwqb0.js";import{e as Z}from"./svg-image-VUqtnnD6.js";import{B as G}from"./choice-E4eyMygy.js";import{V as L}from"./index-6h5t6F0w.js";import{S as H,O as S}from"./answer-choices-uB4giKvU.js";import{S as h}from"./index-qUyqkRvh.js";import{s as g,c as k}from"./index-deFLJwr4.js";import{L as J,a as x}from"./index-h_CiYGGb.js";import{L as Q,p as X}from"./locked-figure-aria-RWwSDIb0.js";import{l as Y}from"./index-awljIyHI.js";import{v as f}from"./index-IIMKO4_x.js";import{P as ee,L as oe,a as ne}from"./locked-label-settings-X4RKk04F.js";import{C as te}from"./color-select-G-xDxP7-.js";import{L as re}from"./line-stroke-select-CC0fFBuz.js";import{L as ae}from"./line-swatch-xLt6fclZ.js";import{L as R}from"./locked-point-settings-KDnxNHJ0.js";import{g as ie}from"./util-3pmDu6r6.js";const C="The line cannot have length 0.",B=b=>{var z,_;const{flags:l,kind:y,points:p,color:w,lineStyle:T="solid",showPoint1:I,showPoint2:M,labels:n,ariaLabel:V,onChangeProps:a,onMove:j,onRemove:O}=b,[s,d]=p,$=y.charAt(0).toUpperCase()+y.slice(1),U=`${$} (${s.coord[0]}, +import{a as u,j as o,F as q}from"./jsx-runtime-FVsy8kgq.js";import"./util-YrNvlCNO.js";import{e as Z}from"./svg-image-RL9NlJEY.js";import{B as G}from"./choice-E4eyMygy.js";import{V as L}from"./index-6h5t6F0w.js";import{S as H,O as S}from"./answer-choices-xSqM961S.js";import{S as h}from"./index-qUyqkRvh.js";import{s as g,c as k}from"./index-deFLJwr4.js";import{L as J,a as x}from"./index-h_CiYGGb.js";import{L as Q,p as X}from"./locked-figure-aria-7tCktpI9.js";import{l as Y}from"./index-awljIyHI.js";import{v as f}from"./index-IIMKO4_x.js";import{P as ee,L as oe,a as ne}from"./locked-label-settings-mrPkDK9u.js";import{C as te}from"./color-select-GgikiV2v.js";import{L as re}from"./line-stroke-select-8a9MPfaw.js";import{L as ae}from"./line-swatch-0Zcc1GCG.js";import{L as R}from"./locked-point-settings-ajnmafNS.js";import{g as ie}from"./util-yTFMWwoT.js";const C="The line cannot have length 0.",B=b=>{var z,_;const{flags:l,kind:y,points:p,color:w,lineStyle:T="solid",showPoint1:I,showPoint2:M,labels:n,ariaLabel:V,onChangeProps:a,onMove:j,onRemove:O}=b,[s,d]=p,$=y.charAt(0).toUpperCase()+y.slice(1),U=`${$} (${s.coord[0]}, ${s.coord[1]}), (${d.coord[0]}, ${d.coord[1]})`,P=Z(s.coord,d.coord);function D(){let e=`${$} from (${s.coord[0]}, ${s.coord[1]}) to (${d.coord[0]}, ${d.coord[1]})`;return n&&n.length>0&&(e+=" with label",n.length>1&&(e+="s"),e+=` ${n.map(t=>t.text).join(", ")}`),e}function F(e,t){const r=[...p];r[t]={...p[t],...e};const m=f.midpoint(p[0].coord,p[1].coord),c=f.midpoint(r[0].coord,r[1].coord),A=[c[0]-m[0],c[1]-m[1]],W=n==null?void 0:n.map((v,le)=>({...v,coord:[v.coord[0]+A[0],v.coord[1]+A[1]]}));a({points:r,labels:W})}function E(e){var r,m;const t=n==null?void 0:n.map(c=>({...c,color:e}));a({color:e,points:[{...s,color:e,labels:(r=s.labels)==null?void 0:r.map(c=>({...c,color:e}))},{...d,color:e,labels:(m=d.labels)==null?void 0:m.map(c=>({...c,color:e}))}],labels:t})}function K(e,t){if(!n)return;const r=[...n];r[t]={...n[t],...e},a({labels:r})}function N(e){if(!n)return;const t=n.filter((r,m)=>m!==e);a({labels:t})}return u(ee,{expanded:b.expanded,onToggle:b.onToggle,header:u(L,{style:i.row,children:[o(J,{children:U}),o(h,{size:g.xSmall_8}),o(ae,{color:w,lineStyle:T})]}),children:[u(x,{tag:"label",style:[i.row,i.spaceUnder],children:["kind",o(h,{size:g.xxxSmall_4}),u(H,{selectedValue:y,onChange:e=>a({kind:e}),placeholder:"",children:[o(S,{value:"line",label:"line"}),o(S,{value:"ray",label:"ray"}),o(S,{value:"segment",label:"segment"})]})]}),u(L,{style:i.row,children:[o(te,{selectedValue:w,onChange:E}),o(h,{size:g.small_12}),o(re,{selectedValue:T,onChange:e=>a({lineStyle:e})})]}),P&&o(x,{style:i.errorText,children:C}),o(R,{flags:l,headerLabel:"Point 1",expanded:!0,showPoint:I,error:P?C:null,...s,onTogglePoint:e=>a({showPoint1:e}),onChangeProps:e=>F(e,0)}),o(R,{flags:l,headerLabel:"Point 2",expanded:!0,showPoint:M,error:P?C:null,...d,onTogglePoint:e=>a({showPoint2:e}),onChangeProps:e=>F(e,1)}),((z=l==null?void 0:l.mafs)==null?void 0:z["locked-figures-aria"])&&u(q,{children:[o(h,{size:g.small_12}),o(L,{style:i.horizontalRule}),o(Q,{ariaLabel:V,prePopulatedAriaLabel:D(),onChangeProps:e=>{a(e)}})]}),((_=l==null?void 0:l.mafs)==null?void 0:_["locked-line-labels"])&&u(q,{children:[o(h,{size:g.xxxSmall_4}),o(L,{style:i.horizontalRule}),o(h,{size:g.small_12}),o(x,{children:"Visible labels"}),n==null?void 0:n.map((e,t)=>o(oe,{...e,expanded:!0,onChangeProps:r=>{K(r,t)},onRemove:()=>{N(t)},containerStyle:i.labelContainer})),o(G,{kind:"tertiary",startIcon:X,onClick:()=>{const e=[0,-1],t=f.add(f.scale(e,(n==null?void 0:n.length)??0),f.midpoint(p[0].coord,p[1].coord)),r={...ie("label"),coord:t,color:w};a({labels:[...n??[],r]})},style:i.addButton,children:"Add visible label"})]}),o(ne,{figureType:b.type,onMove:j,onRemove:O})]})},i=Y.StyleSheet.create({row:{display:"flex",flexDirection:"row",alignItems:"center"},spaceUnder:{marginBottom:g.xSmall_8},errorText:{color:k.red},addButton:{alignSelf:"start"},horizontalRule:{height:1,backgroundColor:k.offBlack16},labelContainer:{backgroundColor:k.white}}),Ce=B;B.__docgenInfo={description:"",methods:[],displayName:"LockedLineSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:""},showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" | "backward" | "forward" diff --git a/assets/locked-line-settings.stories-afsLhcYP.js b/assets/locked-line-settings.stories-Zbmsi_Al.js similarity index 77% rename from assets/locked-line-settings.stories-afsLhcYP.js rename to assets/locked-line-settings.stories-Zbmsi_Al.js index d8eeb1bc2b..8e2e0d92ff 100644 --- a/assets/locked-line-settings.stories-afsLhcYP.js +++ b/assets/locked-line-settings.stories-Zbmsi_Al.js @@ -1,4 +1,4 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{r as n}from"./index-TT1qJ6UJ.js";import{L as s}from"./locked-line-settings-APCIPT7n.js";import{g}from"./util-3pmDu6r6.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./svg-image-VUqtnnD6.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./index-dnMhQZ-1.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./index-7vsPyIck.js";import"./index-J2t_5nK1.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./media-queries-MaBBbpNq.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./answer-choices-uB4giKvU.js";import"./minus-bold-ONmDo3Ve.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./locked-figure-aria-RWwSDIb0.js";import"./article-renderer-6f7Dak4j.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./locked-label-settings-X4RKk04F.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./color-select-G-xDxP7-.js";import"./line-stroke-select-CC0fFBuz.js";import"./line-swatch-xLt6fclZ.js";import"./locked-point-settings-KDnxNHJ0.js";import"./labeled-switch--NF5de2V.js";const Ft={title:"PerseusEditor/Components/Locked Line Settings",component:s},p=i=>m(s,{...i}),c={...g("line"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};p.args=c;const d={render:function(){const[e,r]=n.useState(c);return m(s,{...e,onChangeProps:o=>{r({...e,...o})}})}};d.parameters={chromatic:{disableSnapshot:!0}};const a={render:function(){const[e,r]=n.useState(c),t=o=>{r({...e,...o})};return m(s,{...e,points:[g("point"),g("point")],expanded:!0,onChangeProps:t})}},u={render:function(){const[e,r]=n.useState(!0),[t,o]=n.useState(c);return m(s,{...t,expanded:e,onToggle:r,onChangeProps:P=>{o({...t,...P})}})}},l={render:function(){const[e,r]=n.useState(!0),[t,o]=n.useState({...c,kind:"segment",color:"green",lineStyle:"dashed"});return m(s,{...t,expanded:e,onToggle:r,onChangeProps:P=>{o({...t,...P})}})}};p.__docgenInfo={description:"",methods:[],displayName:"Default"};var h,f,S;p.parameters={...p.parameters,docs:{...(h=p.parameters)==null?void 0:h.docs,source:{originalSource:`(args): React.ReactElement => { +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{r as n}from"./index-TT1qJ6UJ.js";import{L as s}from"./locked-line-settings-s3VKqEiy.js";import{g}from"./util-yTFMWwoT.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./svg-image-RL9NlJEY.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./index-dnMhQZ-1.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./index-7vsPyIck.js";import"./index-J2t_5nK1.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./media-queries-MaBBbpNq.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./answer-choices-xSqM961S.js";import"./minus-bold-ONmDo3Ve.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./locked-figure-aria-7tCktpI9.js";import"./article-renderer-TMdCDA85.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./locked-label-settings-mrPkDK9u.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./color-select-GgikiV2v.js";import"./line-stroke-select-8a9MPfaw.js";import"./line-swatch-0Zcc1GCG.js";import"./locked-point-settings-ajnmafNS.js";import"./labeled-switch-Qne5XsM1.js";const Ft={title:"PerseusEditor/Components/Locked Line Settings",component:s},p=i=>m(s,{...i}),c={...g("line"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};p.args=c;const d={render:function(){const[e,r]=n.useState(c);return m(s,{...e,onChangeProps:o=>{r({...e,...o})}})}};d.parameters={chromatic:{disableSnapshot:!0}};const a={render:function(){const[e,r]=n.useState(c),t=o=>{r({...e,...o})};return m(s,{...e,points:[g("point"),g("point")],expanded:!0,onChangeProps:t})}},u={render:function(){const[e,r]=n.useState(!0),[t,o]=n.useState(c);return m(s,{...t,expanded:e,onToggle:r,onChangeProps:P=>{o({...t,...P})}})}},l={render:function(){const[e,r]=n.useState(!0),[t,o]=n.useState({...c,kind:"segment",color:"green",lineStyle:"dashed"});return m(s,{...t,expanded:e,onToggle:r,onChangeProps:P=>{o({...t,...P})}})}};p.__docgenInfo={description:"",methods:[],displayName:"Default"};var h,f,S;p.parameters={...p.parameters,docs:{...(h=p.parameters)==null?void 0:h.docs,source:{originalSource:`(args): React.ReactElement => { return ; }`,...(S=(f=p.parameters)==null?void 0:f.docs)==null?void 0:S.source}}};var x,R,L;d.parameters={...d.parameters,docs:{...(x=d.parameters)==null?void 0:x.docs,source:{originalSource:`{ render: function Render() { diff --git a/assets/locked-point-settings-KDnxNHJ0.js b/assets/locked-point-settings-ajnmafNS.js similarity index 92% rename from assets/locked-point-settings-KDnxNHJ0.js rename to assets/locked-point-settings-ajnmafNS.js index 49c6f7f35e..488c57e12c 100644 --- a/assets/locked-point-settings-KDnxNHJ0.js +++ b/assets/locked-point-settings-ajnmafNS.js @@ -1,4 +1,4 @@ -import{a as p,j as o,F as b}from"./jsx-runtime-FVsy8kgq.js";import{B as D}from"./choice-E4eyMygy.js";import{V as w}from"./index-6h5t6F0w.js";import{S as u}from"./index-qUyqkRvh.js";import{s,c as P}from"./index-deFLJwr4.js";import{L as I,a as M}from"./index-h_CiYGGb.js";import{L as U,p as E}from"./locked-figure-aria-RWwSDIb0.js";import{l as W}from"./index-awljIyHI.js";import{P as N,C as G,L as H,a as J}from"./locked-label-settings-X4RKk04F.js";import{C as K}from"./color-select-G-xDxP7-.js";import{C as Q,g as X}from"./util-3pmDu6r6.js";import{L as _}from"./labeled-switch--NF5de2V.js";const q=L=>{var k,S,T;const{flags:r,headerLabel:A,coord:i,color:g,filled:C=!0,labels:n,ariaLabel:B,onChangeProps:d,onMove:v,onRemove:h,showPoint:f,expanded:R,onTogglePoint:x,onToggle:z}=L,c=!v&&!h;function F(){let e=`Point at (${i[0]}, ${i[1]})`;return n&&n.length>0&&(e+=" with label",n.length>1&&(e+="s"),e+=` ${n.map(t=>t.text).join(", ")}`),e}function O(e){const t={color:e};n&&(t.labels=n.map(l=>({...l,color:e}))),d(t)}function $(e){const t=e[0]-i[0],l=e[1]-i[1],m={coord:e};n&&(m.labels=n.map(y=>({...y,coord:[y.coord[0]+t,y.coord[1]+l]}))),d(m)}function V(e,t){if(!n)return;const l=[...n];l[t]={...n[t],...e},d({labels:l})}function j(e){if(!n)return;const t=n.filter((l,m)=>m!==e);d({labels:t})}return p(N,{expanded:R,onToggle:z,containerStyle:c?a.definingContainer:void 0,panelStyle:c?a.definingPanel:void 0,header:p(w,{style:a.row,children:[o(I,{children:`${A||"Point"} (${i[0]}, ${i[1]})`}),o(u,{size:s.xSmall_8}),o(Q,{color:g,filled:C})]}),children:[o(G,{coord:i,style:a.spaceUnder,onChange:$}),x&&o(_,{label:"show point on graph",checked:!!f,style:f&&a.spaceUnder,onChange:x}),(!c||f)&&p(b,{children:[o(K,{selectedValue:g,onChange:O,style:a.spaceUnder}),o(_,{label:"open point",checked:!C,onChange:e=>{d({filled:!e})}})]}),!c&&((k=r==null?void 0:r.mafs)==null?void 0:k["locked-figures-aria"])&&p(b,{children:[o(u,{size:s.small_12}),o(w,{style:a.horizontalRule}),o(U,{ariaLabel:B,prePopulatedAriaLabel:F(),onChangeProps:e=>{d(e)}})]}),(!c&&((S=r==null?void 0:r.mafs)==null?void 0:S["locked-point-labels"])||c&&((T=r==null?void 0:r.mafs)==null?void 0:T["locked-line-labels"]))&&p(b,{children:[o(u,{size:s.xxxSmall_4}),o(w,{style:a.horizontalRule}),o(u,{size:s.small_12}),o(M,{children:"Visible labels"}),n==null?void 0:n.map((e,t)=>o(H,{...e,containerStyle:!c&&a.lockedPointLabelContainer,expanded:!0,onChangeProps:l=>{V(l,t)},onRemove:()=>{j(t)}})),o(D,{kind:"tertiary",startIcon:E,onClick:()=>{const e={...X("label"),coord:[i[0]+.5,i[1]-1*((n==null?void 0:n.length)??0)],color:g};d({labels:[...n??[],e]})},style:a.addButton,children:"Add visible label"})]}),h&&o(J,{figureType:L.type,onMove:v,onRemove:h})]})},a=W.StyleSheet.create({definingContainer:{marginTop:s.xSmall_8,marginBottom:0,marginLeft:-s.xxxSmall_4,marginRight:-s.xxxSmall_4,backgroundColor:P.white},definingPanel:{paddingBottom:s.xxSmall_6},lockedPointLabelContainer:{backgroundColor:P.white},row:{flexDirection:"row",alignItems:"center"},spaceUnder:{marginBottom:s.xSmall_8},addButton:{alignSelf:"start"},horizontalRule:{height:1,backgroundColor:P.offBlack16}}),ce=q;q.__docgenInfo={description:"",methods:[],displayName:"LockedPointSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:"Optional flags to determine which features are enabled."},headerLabel:{required:!1,tsType:{name:"string"},description:`Optional label for the point to display in the header summary. +import{a as p,j as o,F as b}from"./jsx-runtime-FVsy8kgq.js";import{B as D}from"./choice-E4eyMygy.js";import{V as w}from"./index-6h5t6F0w.js";import{S as u}from"./index-qUyqkRvh.js";import{s,c as P}from"./index-deFLJwr4.js";import{L as I,a as M}from"./index-h_CiYGGb.js";import{L as U,p as E}from"./locked-figure-aria-7tCktpI9.js";import{l as W}from"./index-awljIyHI.js";import{P as N,C as G,L as H,a as J}from"./locked-label-settings-mrPkDK9u.js";import{C as K}from"./color-select-GgikiV2v.js";import{C as Q,g as X}from"./util-yTFMWwoT.js";import{L as _}from"./labeled-switch-Qne5XsM1.js";const q=L=>{var k,S,T;const{flags:r,headerLabel:A,coord:i,color:g,filled:C=!0,labels:n,ariaLabel:B,onChangeProps:d,onMove:v,onRemove:h,showPoint:f,expanded:R,onTogglePoint:x,onToggle:z}=L,c=!v&&!h;function F(){let e=`Point at (${i[0]}, ${i[1]})`;return n&&n.length>0&&(e+=" with label",n.length>1&&(e+="s"),e+=` ${n.map(t=>t.text).join(", ")}`),e}function O(e){const t={color:e};n&&(t.labels=n.map(l=>({...l,color:e}))),d(t)}function $(e){const t=e[0]-i[0],l=e[1]-i[1],m={coord:e};n&&(m.labels=n.map(y=>({...y,coord:[y.coord[0]+t,y.coord[1]+l]}))),d(m)}function V(e,t){if(!n)return;const l=[...n];l[t]={...n[t],...e},d({labels:l})}function j(e){if(!n)return;const t=n.filter((l,m)=>m!==e);d({labels:t})}return p(N,{expanded:R,onToggle:z,containerStyle:c?a.definingContainer:void 0,panelStyle:c?a.definingPanel:void 0,header:p(w,{style:a.row,children:[o(I,{children:`${A||"Point"} (${i[0]}, ${i[1]})`}),o(u,{size:s.xSmall_8}),o(Q,{color:g,filled:C})]}),children:[o(G,{coord:i,style:a.spaceUnder,onChange:$}),x&&o(_,{label:"show point on graph",checked:!!f,style:f&&a.spaceUnder,onChange:x}),(!c||f)&&p(b,{children:[o(K,{selectedValue:g,onChange:O,style:a.spaceUnder}),o(_,{label:"open point",checked:!C,onChange:e=>{d({filled:!e})}})]}),!c&&((k=r==null?void 0:r.mafs)==null?void 0:k["locked-figures-aria"])&&p(b,{children:[o(u,{size:s.small_12}),o(w,{style:a.horizontalRule}),o(U,{ariaLabel:B,prePopulatedAriaLabel:F(),onChangeProps:e=>{d(e)}})]}),(!c&&((S=r==null?void 0:r.mafs)==null?void 0:S["locked-point-labels"])||c&&((T=r==null?void 0:r.mafs)==null?void 0:T["locked-line-labels"]))&&p(b,{children:[o(u,{size:s.xxxSmall_4}),o(w,{style:a.horizontalRule}),o(u,{size:s.small_12}),o(M,{children:"Visible labels"}),n==null?void 0:n.map((e,t)=>o(H,{...e,containerStyle:!c&&a.lockedPointLabelContainer,expanded:!0,onChangeProps:l=>{V(l,t)},onRemove:()=>{j(t)}})),o(D,{kind:"tertiary",startIcon:E,onClick:()=>{const e={...X("label"),coord:[i[0]+.5,i[1]-1*((n==null?void 0:n.length)??0)],color:g};d({labels:[...n??[],e]})},style:a.addButton,children:"Add visible label"})]}),h&&o(J,{figureType:L.type,onMove:v,onRemove:h})]})},a=W.StyleSheet.create({definingContainer:{marginTop:s.xSmall_8,marginBottom:0,marginLeft:-s.xxxSmall_4,marginRight:-s.xxxSmall_4,backgroundColor:P.white},definingPanel:{paddingBottom:s.xxSmall_6},lockedPointLabelContainer:{backgroundColor:P.white},row:{flexDirection:"row",alignItems:"center"},spaceUnder:{marginBottom:s.xSmall_8},addButton:{alignSelf:"start"},horizontalRule:{height:1,backgroundColor:P.offBlack16}}),ce=q;q.__docgenInfo={description:"",methods:[],displayName:"LockedPointSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:"Optional flags to determine which features are enabled."},headerLabel:{required:!1,tsType:{name:"string"},description:`Optional label for the point to display in the header summary. Defaults to "Point".`},showPoint:{required:!1,tsType:{name:"boolean"},description:"Whether the extra point settings are toggled open."},error:{required:!1,tsType:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}]},description:"Optional error message to display."},onTogglePoint:{required:!1,tsType:{name:"signature",type:"function",raw:"(newValue) => void",signature:{arguments:[{name:"newValue"}],return:{name:"void"}}},description:"Called when the extra settings toggle switch is changed."},onChangeProps:{required:!0,tsType:{name:"signature",type:"function",raw:"(newProps: Partial) => void",signature:{arguments:[{type:{name:"Partial",elements:[{name:"LockedPointType"}],raw:"Partial"},name:"newProps"}],return:{name:"void"}}},description:"Called when the props (coords, color, etc.) are updated."},expanded:{required:!1,tsType:{name:"boolean"},description:"Whether this accordion is expanded."},onToggle:{required:!1,tsType:{name:"signature",type:"function",raw:"(expanded: boolean) => void",signature:{arguments:[{type:{name:"boolean"},name:"expanded"}],return:{name:"void"}}},description:"Called when the accordion is expanded or collapsed."},onMove:{required:!1,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" | "backward" | "forward" diff --git a/assets/locked-point-settings.stories-xXz7_RBE.js b/assets/locked-point-settings.stories-x0Mslyqr.js similarity index 77% rename from assets/locked-point-settings.stories-xXz7_RBE.js rename to assets/locked-point-settings.stories-x0Mslyqr.js index ee75900645..e89bdce668 100644 --- a/assets/locked-point-settings.stories-xXz7_RBE.js +++ b/assets/locked-point-settings.stories-x0Mslyqr.js @@ -1,4 +1,4 @@ -import{j as c}from"./jsx-runtime-FVsy8kgq.js";import{r as s}from"./index-TT1qJ6UJ.js";import{L as i}from"./locked-point-settings-KDnxNHJ0.js";import{g as T}from"./util-3pmDu6r6.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./locked-figure-aria-RWwSDIb0.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./locked-label-settings-X4RKk04F.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./color-select-G-xDxP7-.js";import"./labeled-switch--NF5de2V.js";const Cr={title:"PerseusEditor/Components/Locked Point Settings",component:i},t=m=>c(i,{...m}),u={...T("point"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};t.args=u;const n={render:function(){const[o,e]=s.useState(u);return c(i,{...o,onChangeProps:p=>{e({...o,...p})}})}};n.parameters={chromatic:{disableSnapshot:!0}};const a={render:function(){const[o,e]=s.useState(!0),[r,p]=s.useState(u);return c(i,{...r,expanded:o,onToggle:e,onChangeProps:P=>{p({...r,...P})}})}},d={render:function(){const[o,e]=s.useState(!0),[r,p]=s.useState(u);return c(i,{...r,expanded:o,onToggle:e,onChangeProps:P=>{p({...r,...P})}})}};t.__docgenInfo={description:"",methods:[],displayName:"Default"};var l,g,f;t.parameters={...t.parameters,docs:{...(l=t.parameters)==null?void 0:l.docs,source:{originalSource:`(args): React.ReactElement => { +import{j as c}from"./jsx-runtime-FVsy8kgq.js";import{r as s}from"./index-TT1qJ6UJ.js";import{L as i}from"./locked-point-settings-ajnmafNS.js";import{g as T}from"./util-yTFMWwoT.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./locked-figure-aria-7tCktpI9.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./locked-label-settings-mrPkDK9u.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./color-select-GgikiV2v.js";import"./labeled-switch-Qne5XsM1.js";const Cr={title:"PerseusEditor/Components/Locked Point Settings",component:i},t=m=>c(i,{...m}),u={...T("point"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};t.args=u;const n={render:function(){const[o,e]=s.useState(u);return c(i,{...o,onChangeProps:p=>{e({...o,...p})}})}};n.parameters={chromatic:{disableSnapshot:!0}};const a={render:function(){const[o,e]=s.useState(!0),[r,p]=s.useState(u);return c(i,{...r,expanded:o,onToggle:e,onChangeProps:P=>{p({...r,...P})}})}},d={render:function(){const[o,e]=s.useState(!0),[r,p]=s.useState(u);return c(i,{...r,expanded:o,onToggle:e,onChangeProps:P=>{p({...r,...P})}})}};t.__docgenInfo={description:"",methods:[],displayName:"Default"};var l,g,f;t.parameters={...t.parameters,docs:{...(l=t.parameters)==null?void 0:l.docs,source:{originalSource:`(args): React.ReactElement => { return ; }`,...(f=(g=t.parameters)==null?void 0:g.docs)==null?void 0:f.source}}};var h,x,S;n.parameters={...n.parameters,docs:{...(h=n.parameters)==null?void 0:h.docs,source:{originalSource:`{ render: function Render() { diff --git a/assets/locked-polygon-settings-oPik-nhx.js b/assets/locked-polygon-settings-LXOy6nHR.js similarity index 86% rename from assets/locked-polygon-settings-oPik-nhx.js rename to assets/locked-polygon-settings-LXOy6nHR.js index 6814efc7a0..ed88697b9f 100644 --- a/assets/locked-polygon-settings-oPik-nhx.js +++ b/assets/locked-polygon-settings-LXOy6nHR.js @@ -1,4 +1,4 @@ -import{j as o,a as s,F as P}from"./jsx-runtime-FVsy8kgq.js";import{l as x,h as I}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{B as F}from"./choice-E4eyMygy.js";import{V as p}from"./index-6h5t6F0w.js";import{S as X,O as G}from"./answer-choices-uB4giKvU.js";import{P as T,C as H,I as y,L as J,a as K}from"./locked-label-settings-X4RKk04F.js";import{S as u,a as Q}from"./index-qUyqkRvh.js";import{c as f,s as c}from"./index-deFLJwr4.js";import{L as C,a as _}from"./index-h_CiYGGb.js";import{p as $,L as Y}from"./locked-figure-aria-RWwSDIb0.js";import{l as z}from"./index-awljIyHI.js";import{C as Z}from"./color-select-G-xDxP7-.js";import{L as ee}from"./labeled-switch--NF5de2V.js";import{L as oe}from"./line-stroke-select-CC0fFBuz.js";import{g as te}from"./util-3pmDu6r6.js";const ne=""+new URL("arrow-fat-down-X5ut-FGw.svg",import.meta.url).href,re=""+new URL("arrow-fat-left-LxuHjYfJ.svg",import.meta.url).href,ie=""+new URL("arrow-fat-right-CxkbbISx.svg",import.meta.url).href,ae=""+new URL("arrow-fat-up-ah2eaaIR.svg",import.meta.url).href,le=""+new URL("minus-circle-9EKbQa8X.svg",import.meta.url).href,B=m=>{const{color:d,fillStyle:a,strokeStyle:g}=m;return o(p,{"aria-label":`${d}, stroke ${g}, fill ${a}`,style:[A.container,{border:`4px ${g} ${x[d]}`}],children:o(p,{style:[A.innerSquare,{backgroundColor:x[d],opacity:a==="white"?0:I[a]}]})})},A=z.StyleSheet.create({container:{outline:`2px solid ${f.offWhite}`,width:c.large_24,height:c.large_24,backgroundColor:f.white,alignItems:"center",justifyContent:"center"},innerSquare:{width:20,height:20}});B.__docgenInfo={description:"",methods:[],displayName:"PolygonSwatch",props:{color:{required:!0,tsType:{name:"LockedFigureColor"},description:""},fillStyle:{required:!0,tsType:{name:"LockedFigureFillType"},description:""},strokeStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""}}};const R=m=>{var b,v;const{flags:d,points:a,color:g,showVertices:q,fillStyle:k,strokeStyle:S,labels:n,ariaLabel:U,expanded:M,onToggle:j,onChangeProps:l,onMove:V,onRemove:W}=m;function D(){let t=`Polygon with ${a.length} sides, vertices at `;return t+=a.map(([e,i])=>`(${e}, ${i})`).join(", "),n&&n.length>0&&(t+=", with label",n.length>1&&(t+="s"),t+=` ${n.map(e=>e.text).join(", ")}`),t}function O(t){const e={color:t};e.labels=n==null?void 0:n.map(i=>({...i,color:t})),l(e)}function w(t){switch(t){case"up":l({points:a.map(([e,i])=>[e,i+1]),labels:n==null?void 0:n.map(e=>({...e,coord:[e.coord[0],e.coord[1]+1]}))});break;case"down":l({points:a.map(([e,i])=>[e,i-1]),labels:n==null?void 0:n.map(e=>({...e,coord:[e.coord[0],e.coord[1]-1]}))});break;case"left":l({points:a.map(([e,i])=>[e-1,i]),labels:n==null?void 0:n.map(e=>({...e,coord:[e.coord[0]-1,e.coord[1]]}))});break;case"right":l({points:a.map(([e,i])=>[e+1,i]),labels:n==null?void 0:n.map(e=>({...e,coord:[e.coord[0]+1,e.coord[1]]}))});break}}function E(t,e){if(!n)return;const i=[...n];i[e]={...n[e],...t},l({labels:i})}function N(t){if(!n)return;const e=n.filter((i,h)=>h!==t);l({labels:e})}return s(T,{expanded:M,onToggle:j,header:s(p,{style:r.row,children:[o(C,{children:`Polygon, ${a.length} sides`}),o(u,{size:c.xSmall_8}),o(B,{color:g,fillStyle:k,strokeStyle:S})]}),children:[s(p,{style:[r.row,r.spaceUnder],children:[o(Z,{selectedValue:g,onChange:O}),o(u,{size:c.medium_16}),s(_,{tag:"label",style:[r.row,r.truncatedWidth],children:["fill",o(u,{size:c.xxSmall_6}),o(X,{selectedValue:k,onChange:t=>l({fillStyle:t}),placeholder:"",children:Object.keys(I).map(t=>o(G,{value:t,label:t},t))})]})]}),o(oe,{selectedValue:S,onChange:t=>l({strokeStyle:t})}),o(ee,{label:"show vertices",checked:q,onChange:t=>l({showVertices:t}),style:r.spaceUnder}),s(T,{header:o(C,{children:"Points"}),expanded:!0,containerStyle:r.pointAccordionContainer,panelStyle:r.pointAccordionPanel,children:[a.map((t,e)=>{const i=String.fromCharCode(65+e);return s(p,{style:[r.row,r.spaceUnder],children:[o(C,{children:`${i}:`}),o(u,{size:c.medium_16}),o(H,{coord:t,labels:["x","y"],onChange:h=>{const L=[...a];L[e]=h,m.onChangeProps({points:L})}}),a.length>3&&o(y,{"aria-label":`Delete polygon point ${i}`,icon:le,color:"destructive",onClick:()=>{const h=[...a];h.splice(e,1),m.onChangeProps({points:h})},style:r.icon})]},`locked-polygon-point-index-${e}`)}),s(p,{style:[r.row,r.polygonActionsContainer],children:[o(F,{kind:"tertiary",startIcon:$,onClick:()=>{m.onChangeProps({points:[...a,[0,0]]})},children:"Add point"}),o(Q,{}),s(p,{style:r.movementButtonsContainer,children:[o(y,{"aria-label":"Move polygon up",style:r.iconButton,size:"small",icon:ae,onClick:()=>w("up")}),s(p,{style:r.row,children:[o(y,{"aria-label":"Move polygon left",style:r.iconButton,size:"small",icon:re,onClick:()=>w("left")}),o(y,{"aria-label":"Move polygon down",style:r.iconButton,size:"small",icon:ne,onClick:()=>w("down")}),o(y,{"aria-label":"Move polygon right",style:r.iconButton,size:"small",icon:ie,onClick:()=>w("right")})]})]})]})]}),((b=d==null?void 0:d.mafs)==null?void 0:b["locked-figures-aria"])&&s(P,{children:[o(u,{size:c.small_12}),o(p,{style:r.horizontalRule}),o(Y,{ariaLabel:U,prePopulatedAriaLabel:D(),onChangeProps:t=>{l(t)}})]}),((v=d==null?void 0:d.mafs)==null?void 0:v["locked-polygon-labels"])&&s(P,{children:[o(u,{size:c.xxxSmall_4}),o(p,{style:r.horizontalRule}),o(u,{size:c.small_12}),o(_,{children:"Visible labels"}),n==null?void 0:n.map((t,e)=>o(J,{...t,expanded:!0,onChangeProps:i=>{E(i,e)},onRemove:()=>{N(e)},containerStyle:r.labelContainer})),o(F,{kind:"tertiary",startIcon:$,onClick:()=>{const t={...te("label"),coord:[a[0][0],a[0][1]-((n==null?void 0:n.length)??0)],color:g};l({labels:[...n??[],t]})},style:r.addButton,children:"Add visible label"})]}),o(K,{figureType:m.type,onMove:V,onRemove:W})]})},r=z.StyleSheet.create({row:{display:"flex",flexDirection:"row",alignItems:"center"},pointAccordionContainer:{backgroundColor:f.white},pointAccordionPanel:{alignItems:"start"},icon:{marginInlineStart:c.xxxSmall_4},polygonActionsContainer:{width:"100%"},iconButton:{margin:0},movementButtonsContainer:{display:"flex",flexDirection:"column",alignItems:"center",minWidth:"fit-content"},spaceUnder:{marginBottom:c.xSmall_8},truncatedWidth:{minWidth:0},addButton:{alignSelf:"start"},labelContainer:{backgroundColor:f.white},horizontalRule:{height:1,backgroundColor:f.offBlack16}}),Je=R;R.__docgenInfo={description:"",methods:[],displayName:"LockedPolygonSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:""},showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" +import{j as o,a as s,F as P}from"./jsx-runtime-FVsy8kgq.js";import{l as x,f as I}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{B as F}from"./choice-E4eyMygy.js";import{V as p}from"./index-6h5t6F0w.js";import{S as X,O as G}from"./answer-choices-xSqM961S.js";import{P as T,C as H,I as y,L as J,a as K}from"./locked-label-settings-mrPkDK9u.js";import{S as u,a as Q}from"./index-qUyqkRvh.js";import{c as f,s as c}from"./index-deFLJwr4.js";import{L as C,a as _}from"./index-h_CiYGGb.js";import{p as $,L as Y}from"./locked-figure-aria-7tCktpI9.js";import{l as z}from"./index-awljIyHI.js";import{C as Z}from"./color-select-GgikiV2v.js";import{L as ee}from"./labeled-switch-Qne5XsM1.js";import{L as oe}from"./line-stroke-select-8a9MPfaw.js";import{g as te}from"./util-yTFMWwoT.js";const ne=""+new URL("arrow-fat-down-X5ut-FGw.svg",import.meta.url).href,re=""+new URL("arrow-fat-left-LxuHjYfJ.svg",import.meta.url).href,ie=""+new URL("arrow-fat-right-CxkbbISx.svg",import.meta.url).href,ae=""+new URL("arrow-fat-up-ah2eaaIR.svg",import.meta.url).href,le=""+new URL("minus-circle-9EKbQa8X.svg",import.meta.url).href,B=m=>{const{color:d,fillStyle:a,strokeStyle:g}=m;return o(p,{"aria-label":`${d}, stroke ${g}, fill ${a}`,style:[A.container,{border:`4px ${g} ${x[d]}`}],children:o(p,{style:[A.innerSquare,{backgroundColor:x[d],opacity:a==="white"?0:I[a]}]})})},A=z.StyleSheet.create({container:{outline:`2px solid ${f.offWhite}`,width:c.large_24,height:c.large_24,backgroundColor:f.white,alignItems:"center",justifyContent:"center"},innerSquare:{width:20,height:20}});B.__docgenInfo={description:"",methods:[],displayName:"PolygonSwatch",props:{color:{required:!0,tsType:{name:"LockedFigureColor"},description:""},fillStyle:{required:!0,tsType:{name:"LockedFigureFillType"},description:""},strokeStyle:{required:!0,tsType:{name:"union",raw:'"solid" | "dashed"',elements:[{name:"literal",value:'"solid"'},{name:"literal",value:'"dashed"'}]},description:""}}};const R=m=>{var b,v;const{flags:d,points:a,color:g,showVertices:q,fillStyle:k,strokeStyle:S,labels:n,ariaLabel:U,expanded:M,onToggle:j,onChangeProps:l,onMove:V,onRemove:W}=m;function D(){let t=`Polygon with ${a.length} sides, vertices at `;return t+=a.map(([e,i])=>`(${e}, ${i})`).join(", "),n&&n.length>0&&(t+=", with label",n.length>1&&(t+="s"),t+=` ${n.map(e=>e.text).join(", ")}`),t}function O(t){const e={color:t};e.labels=n==null?void 0:n.map(i=>({...i,color:t})),l(e)}function w(t){switch(t){case"up":l({points:a.map(([e,i])=>[e,i+1]),labels:n==null?void 0:n.map(e=>({...e,coord:[e.coord[0],e.coord[1]+1]}))});break;case"down":l({points:a.map(([e,i])=>[e,i-1]),labels:n==null?void 0:n.map(e=>({...e,coord:[e.coord[0],e.coord[1]-1]}))});break;case"left":l({points:a.map(([e,i])=>[e-1,i]),labels:n==null?void 0:n.map(e=>({...e,coord:[e.coord[0]-1,e.coord[1]]}))});break;case"right":l({points:a.map(([e,i])=>[e+1,i]),labels:n==null?void 0:n.map(e=>({...e,coord:[e.coord[0]+1,e.coord[1]]}))});break}}function E(t,e){if(!n)return;const i=[...n];i[e]={...n[e],...t},l({labels:i})}function N(t){if(!n)return;const e=n.filter((i,h)=>h!==t);l({labels:e})}return s(T,{expanded:M,onToggle:j,header:s(p,{style:r.row,children:[o(C,{children:`Polygon, ${a.length} sides`}),o(u,{size:c.xSmall_8}),o(B,{color:g,fillStyle:k,strokeStyle:S})]}),children:[s(p,{style:[r.row,r.spaceUnder],children:[o(Z,{selectedValue:g,onChange:O}),o(u,{size:c.medium_16}),s(_,{tag:"label",style:[r.row,r.truncatedWidth],children:["fill",o(u,{size:c.xxSmall_6}),o(X,{selectedValue:k,onChange:t=>l({fillStyle:t}),placeholder:"",children:Object.keys(I).map(t=>o(G,{value:t,label:t},t))})]})]}),o(oe,{selectedValue:S,onChange:t=>l({strokeStyle:t})}),o(ee,{label:"show vertices",checked:q,onChange:t=>l({showVertices:t}),style:r.spaceUnder}),s(T,{header:o(C,{children:"Points"}),expanded:!0,containerStyle:r.pointAccordionContainer,panelStyle:r.pointAccordionPanel,children:[a.map((t,e)=>{const i=String.fromCharCode(65+e);return s(p,{style:[r.row,r.spaceUnder],children:[o(C,{children:`${i}:`}),o(u,{size:c.medium_16}),o(H,{coord:t,labels:["x","y"],onChange:h=>{const L=[...a];L[e]=h,m.onChangeProps({points:L})}}),a.length>3&&o(y,{"aria-label":`Delete polygon point ${i}`,icon:le,color:"destructive",onClick:()=>{const h=[...a];h.splice(e,1),m.onChangeProps({points:h})},style:r.icon})]},`locked-polygon-point-index-${e}`)}),s(p,{style:[r.row,r.polygonActionsContainer],children:[o(F,{kind:"tertiary",startIcon:$,onClick:()=>{m.onChangeProps({points:[...a,[0,0]]})},children:"Add point"}),o(Q,{}),s(p,{style:r.movementButtonsContainer,children:[o(y,{"aria-label":"Move polygon up",style:r.iconButton,size:"small",icon:ae,onClick:()=>w("up")}),s(p,{style:r.row,children:[o(y,{"aria-label":"Move polygon left",style:r.iconButton,size:"small",icon:re,onClick:()=>w("left")}),o(y,{"aria-label":"Move polygon down",style:r.iconButton,size:"small",icon:ne,onClick:()=>w("down")}),o(y,{"aria-label":"Move polygon right",style:r.iconButton,size:"small",icon:ie,onClick:()=>w("right")})]})]})]})]}),((b=d==null?void 0:d.mafs)==null?void 0:b["locked-figures-aria"])&&s(P,{children:[o(u,{size:c.small_12}),o(p,{style:r.horizontalRule}),o(Y,{ariaLabel:U,prePopulatedAriaLabel:D(),onChangeProps:t=>{l(t)}})]}),((v=d==null?void 0:d.mafs)==null?void 0:v["locked-polygon-labels"])&&s(P,{children:[o(u,{size:c.xxxSmall_4}),o(p,{style:r.horizontalRule}),o(u,{size:c.small_12}),o(_,{children:"Visible labels"}),n==null?void 0:n.map((t,e)=>o(J,{...t,expanded:!0,onChangeProps:i=>{E(i,e)},onRemove:()=>{N(e)},containerStyle:r.labelContainer})),o(F,{kind:"tertiary",startIcon:$,onClick:()=>{const t={...te("label"),coord:[a[0][0],a[0][1]-((n==null?void 0:n.length)??0)],color:g};l({labels:[...n??[],t]})},style:r.addButton,children:"Add visible label"})]}),o(K,{figureType:m.type,onMove:V,onRemove:W})]})},r=z.StyleSheet.create({row:{display:"flex",flexDirection:"row",alignItems:"center"},pointAccordionContainer:{backgroundColor:f.white},pointAccordionPanel:{alignItems:"start"},icon:{marginInlineStart:c.xxxSmall_4},polygonActionsContainer:{width:"100%"},iconButton:{margin:0},movementButtonsContainer:{display:"flex",flexDirection:"column",alignItems:"center",minWidth:"fit-content"},spaceUnder:{marginBottom:c.xSmall_8},truncatedWidth:{minWidth:0},addButton:{alignSelf:"start"},labelContainer:{backgroundColor:f.white},horizontalRule:{height:1,backgroundColor:f.offBlack16}}),Je=R;R.__docgenInfo={description:"",methods:[],displayName:"LockedPolygonSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:""},showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" | "backward" | "forward" | "front"`,elements:[{name:"literal",value:'"back"'},{name:"literal",value:'"backward"'},{name:"literal",value:'"forward"'},{name:"literal",value:'"front"'}]},name:"movement"}],return:{name:"void"}}},description:"Called when a movement button (top, up, down, bottom) is pressed."},onRemove:{required:!0,tsType:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},description:"Called when the delete button is pressed."},expanded:{required:!1,tsType:{name:"boolean"},description:"Whether this accordion is expanded."},onToggle:{required:!1,tsType:{name:"signature",type:"function",raw:"(expanded: boolean) => void",signature:{arguments:[{type:{name:"boolean"},name:"expanded"}],return:{name:"void"}}},description:"Called when the accordion is expanded or collapsed."},onChangeProps:{required:!0,tsType:{name:"signature",type:"function",raw:"(newProps: Partial) => void",signature:{arguments:[{type:{name:"Partial",elements:[{name:"LockedPolygonType"}],raw:"Partial"},name:"newProps"}],return:{name:"void"}}},description:"Called when the props (coords, color, etc.) are updated."}}};export{Je as L}; diff --git a/assets/locked-polygon-settings.stories-9APa6903.js b/assets/locked-polygon-settings.stories-GMwCKcfK.js similarity index 71% rename from assets/locked-polygon-settings.stories-9APa6903.js rename to assets/locked-polygon-settings.stories-GMwCKcfK.js index 87dc51a7f0..e4db85b98f 100644 --- a/assets/locked-polygon-settings.stories-9APa6903.js +++ b/assets/locked-polygon-settings.stories-GMwCKcfK.js @@ -1,4 +1,4 @@ -import{j as d}from"./jsx-runtime-FVsy8kgq.js";import{r as a}from"./index-TT1qJ6UJ.js";import{L as e}from"./locked-polygon-settings-oPik-nhx.js";import{g as E}from"./util-3pmDu6r6.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./locked-label-settings-X4RKk04F.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./color-select-G-xDxP7-.js";import"./locked-figure-aria-RWwSDIb0.js";import"./components-GHvuFaIn.js";import"./labeled-switch--NF5de2V.js";import"./line-stroke-select-CC0fFBuz.js";const Rr={title:"PerseusEditor/Components/Locked Polygon Settings",component:e},o=i=>d(e,{...i}),c={...E("polygon"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};o.args=c;const r={render:function(){const[t,m]=a.useState(c);return d(e,{...t,onChangeProps:s=>{m({...t,...s})}})}};r.parameters={chromatic:{disableSnapshot:!0}};const p={render:function(){const[t,m]=a.useState(!0),[n,s]=a.useState(c);return d(e,{...n,expanded:t,onToggle:m,onChangeProps:y=>{s({...n,...y})}})}};o.__docgenInfo={description:"",methods:[],displayName:"Default"};var u,l,P;o.parameters={...o.parameters,docs:{...(u=o.parameters)==null?void 0:u.docs,source:{originalSource:`(args): React.ReactElement => { +import{j as d}from"./jsx-runtime-FVsy8kgq.js";import{r as a}from"./index-TT1qJ6UJ.js";import{L as e}from"./locked-polygon-settings-LXOy6nHR.js";import{g as E}from"./util-yTFMWwoT.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./locked-label-settings-mrPkDK9u.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./color-select-GgikiV2v.js";import"./locked-figure-aria-7tCktpI9.js";import"./components-h6HHhmoA.js";import"./labeled-switch-Qne5XsM1.js";import"./line-stroke-select-8a9MPfaw.js";const Rr={title:"PerseusEditor/Components/Locked Polygon Settings",component:e},o=i=>d(e,{...i}),c={...E("polygon"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};o.args=c;const r={render:function(){const[t,m]=a.useState(c);return d(e,{...t,onChangeProps:s=>{m({...t,...s})}})}};r.parameters={chromatic:{disableSnapshot:!0}};const p={render:function(){const[t,m]=a.useState(!0),[n,s]=a.useState(c);return d(e,{...n,expanded:t,onToggle:m,onChangeProps:y=>{s({...n,...y})}})}};o.__docgenInfo={description:"",methods:[],displayName:"Default"};var u,l,P;o.parameters={...o.parameters,docs:{...(u=o.parameters)==null?void 0:u.docs,source:{originalSource:`(args): React.ReactElement => { return ; }`,...(P=(l=o.parameters)==null?void 0:l.docs)==null?void 0:P.source}}};var g,f,h;r.parameters={...r.parameters,docs:{...(g=r.parameters)==null?void 0:g.docs,source:{originalSource:`{ render: function Render() { diff --git a/assets/locked-vector-settings-JVpVhbIu.js b/assets/locked-vector-settings-214PJGeS.js similarity index 93% rename from assets/locked-vector-settings-JVpVhbIu.js rename to assets/locked-vector-settings-214PJGeS.js index a7847d1495..b35a7f0551 100644 --- a/assets/locked-vector-settings-JVpVhbIu.js +++ b/assets/locked-vector-settings-214PJGeS.js @@ -1,4 +1,4 @@ -import{a as g,j as o,F as T}from"./jsx-runtime-FVsy8kgq.js";import"./util-XcxTwqb0.js";import{e as O}from"./svg-image-VUqtnnD6.js";import{B as N}from"./choice-E4eyMygy.js";import{V as p}from"./index-6h5t6F0w.js";import{S as h}from"./index-qUyqkRvh.js";import{s,c as f}from"./index-deFLJwr4.js";import{L as w,a as $}from"./index-h_CiYGGb.js";import{L as U,p as W}from"./locked-figure-aria-RWwSDIb0.js";import{l as G}from"./index-awljIyHI.js";import{v as d}from"./index-IIMKO4_x.js";import{P as v,C as _,L as H,a as J}from"./locked-label-settings-X4RKk04F.js";import{C as K}from"./color-select-G-xDxP7-.js";import{L as Q}from"./line-swatch-xLt6fclZ.js";import{g as X}from"./util-3pmDu6r6.js";const Y="The vector cannot have length 0.",F=u=>{var S,P;const{flags:c,points:x,color:y,labels:n,ariaLabel:V,onChangeProps:m,onMove:q,onRemove:A}=u,[i,l]=x,R=`Vector (${i[0]}, ${i[1]}), (${l[0]}, ${l[1]})`,b=O(i,l);function z(){let e=`Vector from (${i[0]}, ${i[1]}) to (${l[0]}, ${l[1]})`;return n&&n.length>0&&(e+=" with label",n.length>1&&(e+="s"),e+=` ${n.map(t=>t.text).join(", ")}`),e}function C(e,t){if(typeof e<"u"){const r=[...x];r[t]=[...e];const L=d.midpoint(i,l),j=d.midpoint(r[0],r[1]),E=d.sub(j,L),D=n==null?void 0:n.map(k=>({...k,coord:d.add(k.coord,E)}));m({points:r,labels:D})}}function B(e){const t={color:e};t.labels=n==null?void 0:n.map(r=>({...r,color:e})),m(t)}function M(e,t){if(!n)return;const r=[...n];r[t]={...n[t],...e},m({labels:r})}function I(e){if(!n)return;const t=n.filter((r,L)=>L!==e);m({labels:t})}return g(v,{expanded:u.expanded,onToggle:u.onToggle,header:g(p,{style:a.row,children:[o(w,{children:R}),o(h,{size:s.xSmall_8}),o(Q,{color:y,lineStyle:"solid"})]}),children:[o(p,{style:[a.row,a.spaceUnder],children:o(K,{selectedValue:y,onChange:B})}),b&&o($,{style:a.errorText,children:Y}),o(v,{expanded:!0,containerStyle:a.container,panelStyle:a.accordionPanel,header:o(p,{style:a.row,children:o(w,{children:`Tail (${i[0]}, ${i[1]})`})}),children:o(_,{coord:i,error:b,onChange:e=>{C(e,0)}})}),o(v,{expanded:!0,containerStyle:a.container,panelStyle:a.accordionPanel,header:o(p,{style:a.row,children:o(w,{children:`Tip (${l[0]}, ${l[1]})`})}),children:o(_,{coord:l,error:b,onChange:e=>{C(e,1)}})}),((S=c==null?void 0:c.mafs)==null?void 0:S["locked-figures-aria"])&&g(T,{children:[o(h,{size:s.small_12}),o(p,{style:a.horizontalRule}),o(U,{ariaLabel:V,prePopulatedAriaLabel:z(),onChangeProps:e=>{m(e)}})]}),((P=c==null?void 0:c.mafs)==null?void 0:P["locked-vector-labels"])&&g(T,{children:[o(h,{size:s.xxxSmall_4}),o(p,{style:a.horizontalRule}),o(h,{size:s.small_12}),o($,{children:"Visible labels"}),n==null?void 0:n.map((e,t)=>o(H,{...e,expanded:!0,onChangeProps:r=>{M(r,t)},onRemove:()=>{I(t)},containerStyle:a.labelContainer})),o(N,{kind:"tertiary",startIcon:W,onClick:()=>{const e=[0,-1],t=d.add(d.scale(e,(n==null?void 0:n.length)??0),d.midpoint(i,l)),r={...X("label"),coord:t,color:y};m({labels:[...n??[],r]})},style:a.addButton,children:"Add visible label"})]}),o(J,{figureType:u.type,onMove:q,onRemove:A})]})},a=G.StyleSheet.create({accordionPanel:{paddingBottom:s.medium_16},container:{marginTop:s.xSmall_8,marginBottom:0,marginLeft:-s.xxxSmall_4,marginRight:-s.xxxSmall_4,backgroundColor:f.white},errorText:{color:f.red,marginTop:s.xSmall_8},row:{flexDirection:"row",alignItems:"center"},addButton:{alignSelf:"start"},horizontalRule:{height:1,backgroundColor:f.offBlack16},labelContainer:{backgroundColor:f.white}}),ge=F;F.__docgenInfo={description:"",methods:[],displayName:"LockedVectorSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:""},showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" +import{a as g,j as o,F as T}from"./jsx-runtime-FVsy8kgq.js";import"./util-YrNvlCNO.js";import{e as O}from"./svg-image-RL9NlJEY.js";import{B as N}from"./choice-E4eyMygy.js";import{V as p}from"./index-6h5t6F0w.js";import{S as h}from"./index-qUyqkRvh.js";import{s,c as f}from"./index-deFLJwr4.js";import{L as w,a as $}from"./index-h_CiYGGb.js";import{L as U,p as W}from"./locked-figure-aria-7tCktpI9.js";import{l as G}from"./index-awljIyHI.js";import{v as d}from"./index-IIMKO4_x.js";import{P as v,C as _,L as H,a as J}from"./locked-label-settings-mrPkDK9u.js";import{C as K}from"./color-select-GgikiV2v.js";import{L as Q}from"./line-swatch-0Zcc1GCG.js";import{g as X}from"./util-yTFMWwoT.js";const Y="The vector cannot have length 0.",F=u=>{var S,P;const{flags:c,points:x,color:y,labels:n,ariaLabel:V,onChangeProps:m,onMove:q,onRemove:A}=u,[i,l]=x,R=`Vector (${i[0]}, ${i[1]}), (${l[0]}, ${l[1]})`,b=O(i,l);function z(){let e=`Vector from (${i[0]}, ${i[1]}) to (${l[0]}, ${l[1]})`;return n&&n.length>0&&(e+=" with label",n.length>1&&(e+="s"),e+=` ${n.map(t=>t.text).join(", ")}`),e}function C(e,t){if(typeof e<"u"){const r=[...x];r[t]=[...e];const L=d.midpoint(i,l),j=d.midpoint(r[0],r[1]),E=d.sub(j,L),D=n==null?void 0:n.map(k=>({...k,coord:d.add(k.coord,E)}));m({points:r,labels:D})}}function B(e){const t={color:e};t.labels=n==null?void 0:n.map(r=>({...r,color:e})),m(t)}function M(e,t){if(!n)return;const r=[...n];r[t]={...n[t],...e},m({labels:r})}function I(e){if(!n)return;const t=n.filter((r,L)=>L!==e);m({labels:t})}return g(v,{expanded:u.expanded,onToggle:u.onToggle,header:g(p,{style:a.row,children:[o(w,{children:R}),o(h,{size:s.xSmall_8}),o(Q,{color:y,lineStyle:"solid"})]}),children:[o(p,{style:[a.row,a.spaceUnder],children:o(K,{selectedValue:y,onChange:B})}),b&&o($,{style:a.errorText,children:Y}),o(v,{expanded:!0,containerStyle:a.container,panelStyle:a.accordionPanel,header:o(p,{style:a.row,children:o(w,{children:`Tail (${i[0]}, ${i[1]})`})}),children:o(_,{coord:i,error:b,onChange:e=>{C(e,0)}})}),o(v,{expanded:!0,containerStyle:a.container,panelStyle:a.accordionPanel,header:o(p,{style:a.row,children:o(w,{children:`Tip (${l[0]}, ${l[1]})`})}),children:o(_,{coord:l,error:b,onChange:e=>{C(e,1)}})}),((S=c==null?void 0:c.mafs)==null?void 0:S["locked-figures-aria"])&&g(T,{children:[o(h,{size:s.small_12}),o(p,{style:a.horizontalRule}),o(U,{ariaLabel:V,prePopulatedAriaLabel:z(),onChangeProps:e=>{m(e)}})]}),((P=c==null?void 0:c.mafs)==null?void 0:P["locked-vector-labels"])&&g(T,{children:[o(h,{size:s.xxxSmall_4}),o(p,{style:a.horizontalRule}),o(h,{size:s.small_12}),o($,{children:"Visible labels"}),n==null?void 0:n.map((e,t)=>o(H,{...e,expanded:!0,onChangeProps:r=>{M(r,t)},onRemove:()=>{I(t)},containerStyle:a.labelContainer})),o(N,{kind:"tertiary",startIcon:W,onClick:()=>{const e=[0,-1],t=d.add(d.scale(e,(n==null?void 0:n.length)??0),d.midpoint(i,l)),r={...X("label"),coord:t,color:y};m({labels:[...n??[],r]})},style:a.addButton,children:"Add visible label"})]}),o(J,{figureType:u.type,onMove:q,onRemove:A})]})},a=G.StyleSheet.create({accordionPanel:{paddingBottom:s.medium_16},container:{marginTop:s.xSmall_8,marginBottom:0,marginLeft:-s.xxxSmall_4,marginRight:-s.xxxSmall_4,backgroundColor:f.white},errorText:{color:f.red,marginTop:s.xSmall_8},row:{flexDirection:"row",alignItems:"center"},addButton:{alignSelf:"start"},horizontalRule:{height:1,backgroundColor:f.offBlack16},labelContainer:{backgroundColor:f.white}}),ge=F;F.__docgenInfo={description:"",methods:[],displayName:"LockedVectorSettings",props:{flags:{required:!1,tsType:{name:'APIOptions["flags"]',raw:'APIOptions["flags"]'},description:""},showLabelsFlag:{required:!1,tsType:{name:"boolean"},description:""},onMove:{required:!0,tsType:{name:"signature",type:"function",raw:"(movement: LockedFigureSettingsMovementType) => void",signature:{arguments:[{type:{name:"union",raw:`| "back" | "backward" | "forward" | "front"`,elements:[{name:"literal",value:'"back"'},{name:"literal",value:'"backward"'},{name:"literal",value:'"forward"'},{name:"literal",value:'"front"'}]},name:"movement"}],return:{name:"void"}}},description:"Called when a movement button (top, up, down, bottom) is pressed."},onRemove:{required:!0,tsType:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},description:"Called when the delete button is pressed."},expanded:{required:!1,tsType:{name:"boolean"},description:"Whether this accordion is expanded."},onToggle:{required:!1,tsType:{name:"signature",type:"function",raw:"(expanded: boolean) => void",signature:{arguments:[{type:{name:"boolean"},name:"expanded"}],return:{name:"void"}}},description:"Called when the accordion is expanded or collapsed."},onChangeProps:{required:!0,tsType:{name:"signature",type:"function",raw:"(newProps: Partial) => void",signature:{arguments:[{type:{name:"Partial",elements:[{name:"LockedFigure"}],raw:"Partial"},name:"newProps"}],return:{name:"void"}}},description:"Called when the props (points, color, etc.) are updated."}}};export{ge as L}; diff --git a/assets/locked-vector-settings.stories-udVxWXO2.js b/assets/locked-vector-settings.stories-jtlx9nip.js similarity index 73% rename from assets/locked-vector-settings.stories-udVxWXO2.js rename to assets/locked-vector-settings.stories-jtlx9nip.js index 74f521750d..3e39edac7c 100644 --- a/assets/locked-vector-settings.stories-udVxWXO2.js +++ b/assets/locked-vector-settings.stories-jtlx9nip.js @@ -1,4 +1,4 @@ -import{j as n}from"./jsx-runtime-FVsy8kgq.js";import{r as R}from"./index-TT1qJ6UJ.js";import{L as e}from"./locked-vector-settings-JVpVhbIu.js";import{g as k}from"./util-3pmDu6r6.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./svg-image-VUqtnnD6.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./index-dnMhQZ-1.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./index-7vsPyIck.js";import"./index-J2t_5nK1.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./media-queries-MaBBbpNq.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./locked-figure-aria-RWwSDIb0.js";import"./article-renderer-6f7Dak4j.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./locked-label-settings-X4RKk04F.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./color-select-G-xDxP7-.js";import"./line-swatch-xLt6fclZ.js";const St={title:"PerseusEditor/Components/Locked Vector Settings",component:e},r=i=>n(e,{...i}),a={...k("vector"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};r.args=a;const p={render:function(){const[t,s]=R.useState(a);return n(e,{...t,expanded:!0,onChangeProps:m=>{s({...t,...m})}})}},o={render:function(){const[t,s]=R.useState(a);return n(e,{...t,points:[[0,0],[0,0]],expanded:!0,onChangeProps:m=>{s({...t,...m})}})}};r.__docgenInfo={description:"",methods:[],displayName:"Default"};var d,c,u;r.parameters={...r.parameters,docs:{...(d=r.parameters)==null?void 0:d.docs,source:{originalSource:`(args): React.ReactElement => { +import{j as n}from"./jsx-runtime-FVsy8kgq.js";import{r as R}from"./index-TT1qJ6UJ.js";import{L as e}from"./locked-vector-settings-214PJGeS.js";import{g as k}from"./util-yTFMWwoT.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./svg-image-RL9NlJEY.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./index-dnMhQZ-1.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./index-7vsPyIck.js";import"./index-J2t_5nK1.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./media-queries-MaBBbpNq.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./locked-figure-aria-7tCktpI9.js";import"./article-renderer-TMdCDA85.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./locked-label-settings-mrPkDK9u.js";import"./scrollless-number-text-field-U5Bx_xXb.js";import"./color-select-GgikiV2v.js";import"./line-swatch-0Zcc1GCG.js";const St={title:"PerseusEditor/Components/Locked Vector Settings",component:e},r=i=>n(e,{...i}),a={...k("vector"),onChangeProps:()=>{},onMove:()=>{},onRemove:()=>{}};r.args=a;const p={render:function(){const[t,s]=R.useState(a);return n(e,{...t,expanded:!0,onChangeProps:m=>{s({...t,...m})}})}},o={render:function(){const[t,s]=R.useState(a);return n(e,{...t,points:[[0,0],[0,0]],expanded:!0,onChangeProps:m=>{s({...t,...m})}})}};r.__docgenInfo={description:"",methods:[],displayName:"Default"};var d,c,u;r.parameters={...r.parameters,docs:{...(d=r.parameters)==null?void 0:d.docs,source:{originalSource:`(args): React.ReactElement => { return ; }`,...(u=(c=r.parameters)==null?void 0:c.docs)==null?void 0:u.source}}};var l,P,g;p.parameters={...p.parameters,docs:{...(l=p.parameters)==null?void 0:l.docs,source:{originalSource:`{ render: function Render() { diff --git a/assets/marker-ika3cQ1R.js b/assets/marker-o8uSzdrK.js similarity index 92% rename from assets/marker-ika3cQ1R.js rename to assets/marker-o8uSzdrK.js index 3e08b97f13..5bc3d2720c 100644 --- a/assets/marker-ika3cQ1R.js +++ b/assets/marker-o8uSzdrK.js @@ -1,4 +1,4 @@ -import{a as b,j as a,F as S}from"./jsx-runtime-FVsy8kgq.js";import{g as k}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import{z as D}from"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{l as s}from"./index-awljIyHI.js";import{r as u}from"./index-TT1qJ6UJ.js";import{c as x}from"./components-GHvuFaIn.js";import{R as E}from"./index-7vsPyIck.js";import{f as T}from"./util-qk2aeK8X.js";import{F as A}from"./form-wrapped-text-field-DtGz9PJ5.js";const{Icon:M}=x,{colors:g}=k,N=h=>{const e=E.findDOMNode(h);e.focus&&T(e)},q=`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 +import{a as b,j as a,F as S}from"./jsx-runtime-FVsy8kgq.js";import{g as k}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import{z as D}from"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{l as s}from"./index-awljIyHI.js";import{r as u}from"./index-TT1qJ6UJ.js";import{c as x}from"./components-h6HHhmoA.js";import{R as E}from"./index-7vsPyIck.js";import{f as T}from"./util-qk2aeK8X.js";import{F as A}from"./form-wrapped-text-field-BopYavUW.js";const{Icon:M}=x,{colors:g}=k,N=h=>{const e=E.findDOMNode(h);e.focus&&T(e)},q=`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 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 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 -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, diff --git a/assets/marker-bfDDVuIS.js b/assets/marker-ockQWLHi.js similarity index 98% rename from assets/marker-bfDDVuIS.js rename to assets/marker-ockQWLHi.js index 168b8a06d7..274bb69676 100644 --- a/assets/marker-bfDDVuIS.js +++ b/assets/marker-ockQWLHi.js @@ -1,3 +1,3 @@ -import{j as d,a as w,F as k}from"./jsx-runtime-FVsy8kgq.js";import{V as b}from"./index-6h5t6F0w.js";import{c as r}from"./index-deFLJwr4.js";import{l as g}from"./index-awljIyHI.js";import{r as x}from"./index-TT1qJ6UJ.js";import{P as C}from"./i18n-context-hxuRe8oU.js";import{I as v}from"./icon-YuYiVxsK.js";import{i as I,a as S,b as A}from"./icon-paths-AuJwhOz7.js";import{A as T}from"./answer-pill-YUUkj-ih.js";function q(){if(typeof window.matchMedia!="function")return!0;const y=window.matchMedia("(prefers-reduced-motion: reduce)");return!y||y.matches}const t=24,m=class m extends x.Component{constructor(){super(...arguments),this._mounted=!1}componentDidMount(){this._mounted=!0}componentWillUnmount(){this._mounted=!1}renderIcon(){const{selected:c,showCorrectness:i,showSelected:u,showPulsate:a}=this.props,s=u,l=c;let n;const p={path:"",height:1,width:1};let o={size:t,color:r.white,icon:p};return i?(n=[e.markerGraded,i==="correct"?e.markerCorrect:e.markerIncorrect,s&&e.markerSelected],o={...o,icon:i==="correct"?I:S}):l&&l.length>0?n=[e.markerFilled,s&&e.markerSelected]:s?(n=[e.markerSelected],o={...o,icon:A,size:8}):a&&(n=[e.markerPulsateBase,this._mounted&&q()?a&&e.markerUnfilledPulsateOnce:a&&e.markerUnfilledPulsateInfinite]),d(b,{style:[e.markerIcon,n],ref:f=>this._icon=f,children:d(v,{...o})})}render(){const{showCorrectness:c,selected:i,showAnswer:u,answerSide:a,answerStyles:s,hovered:l,focused:n,label:p}=this.props,o=c==="correct",f=l||n;return w(k,{children:[d(b,{style:[e.marker,f&&!o&&e.markerActive],"aria-label":o?this.context.strings.correctExcited:p,children:this.renderIcon()}),!!i&&u&&d(T,{selectedAnswers:i,showCorrectness:c,side:a,style:s,markerRef:this._icon??void 0,hovered:l,focused:n})]})}};m.contextType=C,m.defaultProps={selected:[]};let h=m;const e=g.StyleSheet.create({marker:{position:"absolute",backgroundColor:r.white,borderRadius:t,width:t,height:t,marginLeft:t/-2,marginTop:t/-2,boxShadow:`0 8px 8px ${r.offBlack8}`},markerIcon:{display:"flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",width:t,height:t,border:`2px solid ${r.offBlack64}`,borderRadius:t},markerPulsateBase:{animationName:{"0%":{transform:"scale(1)",backgroundColor:r.blue},"100%":{transform:"scale(1.3)",backgroundColor:r.blue}},animationDirection:"alternate",animationDuration:"0.8s",animationTimingFunction:"ease-in",transformOrigin:"50% 50%",animationIterationCount:"0"},markerUnfilledPulsateInfinite:{animationIterationCount:"infinite"},markerUnfilledPulsateOnce:{animationIterationCount:"2"},markerActive:{outline:`2px solid ${r.blue}`,outlineOffset:2},markerSelected:{boxShadow:`0 8px 8px ${r.offBlack8}`,border:`solid 4px ${r.white}`,backgroundColor:r.blue,borderRadius:t,transform:"rotate(180deg)"},markerFilled:{backgroundColor:"#ECF3FE",border:`4px solid ${r.blue}`},markerGraded:{width:t,height:t,justifyContent:"center",alignItems:"center",border:`2px solid ${r.white}`},markerCorrect:{background:"#00880b"},markerIncorrect:{background:r.offBlack64}});h.__docgenInfo={description:"",methods:[{name:"renderIcon",docblock:null,modifiers:[],params:[],returns:null}],displayName:"Marker",props:{answers:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:""},label:{required:!0,tsType:{name:"string"},description:""},x:{required:!0,tsType:{name:"number"},description:""},y:{required:!0,tsType:{name:"number"},description:""},selected:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[]",computed:!1}},showCorrectness:{required:!1,tsType:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}]},description:""},focused:{required:!0,tsType:{name:"boolean"},description:""},showSelected:{required:!0,tsType:{name:"boolean"},description:""},showPulsate:{required:!0,tsType:{name:"boolean"},description:""},answerSide:{required:!0,tsType:{name:"union",raw:'"top" | "bottom" | "left" | "right"',elements:[{name:"literal",value:'"top"'},{name:"literal",value:'"bottom"'},{name:"literal",value:'"left"'},{name:"literal",value:'"right"'}]},description:""},answerStyles:{required:!1,tsType:{name:"CSSProperties"},description:""},showAnswer:{required:!1,tsType:{name:"boolean"},description:""},analytics:{required:!1,tsType:{name:"signature",type:"object",raw:`{ +import{j as d,a as w,F as k}from"./jsx-runtime-FVsy8kgq.js";import{V as b}from"./index-6h5t6F0w.js";import{c as r}from"./index-deFLJwr4.js";import{l as g}from"./index-awljIyHI.js";import{r as x}from"./index-TT1qJ6UJ.js";import{P as C}from"./i18n-context-hxuRe8oU.js";import{I as v}from"./icon-YuYiVxsK.js";import{i as I,a as S,b as A}from"./icon-paths-AuJwhOz7.js";import{A as T}from"./answer-pill-NjYGKpaV.js";function q(){if(typeof window.matchMedia!="function")return!0;const y=window.matchMedia("(prefers-reduced-motion: reduce)");return!y||y.matches}const t=24,m=class m extends x.Component{constructor(){super(...arguments),this._mounted=!1}componentDidMount(){this._mounted=!0}componentWillUnmount(){this._mounted=!1}renderIcon(){const{selected:c,showCorrectness:i,showSelected:u,showPulsate:a}=this.props,s=u,l=c;let n;const p={path:"",height:1,width:1};let o={size:t,color:r.white,icon:p};return i?(n=[e.markerGraded,i==="correct"?e.markerCorrect:e.markerIncorrect,s&&e.markerSelected],o={...o,icon:i==="correct"?I:S}):l&&l.length>0?n=[e.markerFilled,s&&e.markerSelected]:s?(n=[e.markerSelected],o={...o,icon:A,size:8}):a&&(n=[e.markerPulsateBase,this._mounted&&q()?a&&e.markerUnfilledPulsateOnce:a&&e.markerUnfilledPulsateInfinite]),d(b,{style:[e.markerIcon,n],ref:f=>this._icon=f,children:d(v,{...o})})}render(){const{showCorrectness:c,selected:i,showAnswer:u,answerSide:a,answerStyles:s,hovered:l,focused:n,label:p}=this.props,o=c==="correct",f=l||n;return w(k,{children:[d(b,{style:[e.marker,f&&!o&&e.markerActive],"aria-label":o?this.context.strings.correctExcited:p,children:this.renderIcon()}),!!i&&u&&d(T,{selectedAnswers:i,showCorrectness:c,side:a,style:s,markerRef:this._icon??void 0,hovered:l,focused:n})]})}};m.contextType=C,m.defaultProps={selected:[]};let h=m;const e=g.StyleSheet.create({marker:{position:"absolute",backgroundColor:r.white,borderRadius:t,width:t,height:t,marginLeft:t/-2,marginTop:t/-2,boxShadow:`0 8px 8px ${r.offBlack8}`},markerIcon:{display:"flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",width:t,height:t,border:`2px solid ${r.offBlack64}`,borderRadius:t},markerPulsateBase:{animationName:{"0%":{transform:"scale(1)",backgroundColor:r.blue},"100%":{transform:"scale(1.3)",backgroundColor:r.blue}},animationDirection:"alternate",animationDuration:"0.8s",animationTimingFunction:"ease-in",transformOrigin:"50% 50%",animationIterationCount:"0"},markerUnfilledPulsateInfinite:{animationIterationCount:"infinite"},markerUnfilledPulsateOnce:{animationIterationCount:"2"},markerActive:{outline:`2px solid ${r.blue}`,outlineOffset:2},markerSelected:{boxShadow:`0 8px 8px ${r.offBlack8}`,border:`solid 4px ${r.white}`,backgroundColor:r.blue,borderRadius:t,transform:"rotate(180deg)"},markerFilled:{backgroundColor:"#ECF3FE",border:`4px solid ${r.blue}`},markerGraded:{width:t,height:t,justifyContent:"center",alignItems:"center",border:`2px solid ${r.white}`},markerCorrect:{background:"#00880b"},markerIncorrect:{background:r.offBlack64}});h.__docgenInfo={description:"",methods:[{name:"renderIcon",docblock:null,modifiers:[],params:[],returns:null}],displayName:"Marker",props:{answers:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:""},label:{required:!0,tsType:{name:"string"},description:""},x:{required:!0,tsType:{name:"number"},description:""},y:{required:!0,tsType:{name:"number"},description:""},selected:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[]",computed:!1}},showCorrectness:{required:!1,tsType:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}]},description:""},focused:{required:!0,tsType:{name:"boolean"},description:""},showSelected:{required:!0,tsType:{name:"boolean"},description:""},showPulsate:{required:!0,tsType:{name:"boolean"},description:""},answerSide:{required:!0,tsType:{name:"union",raw:'"top" | "bottom" | "left" | "right"',elements:[{name:"literal",value:'"top"'},{name:"literal",value:'"bottom"'},{name:"literal",value:'"left"'},{name:"literal",value:'"right"'}]},description:""},answerStyles:{required:!1,tsType:{name:"CSSProperties"},description:""},showAnswer:{required:!1,tsType:{name:"boolean"},description:""},analytics:{required:!1,tsType:{name:"signature",type:"object",raw:`{ onAnalyticsEvent: AnalyticsEventHandlerFn; }`,signature:{properties:[{key:"onAnalyticsEvent",value:{name:"AnalyticsEventHandlerFn",required:!0}}]}},description:""},hovered:{required:!0,tsType:{name:"boolean"},description:""}}};export{h as M}; diff --git a/assets/marker.stories-t5e_DMOa.js b/assets/marker.stories-LdIoBqfp.js similarity index 75% rename from assets/marker.stories-t5e_DMOa.js rename to assets/marker.stories-LdIoBqfp.js index ff0441ec54..ebe1183176 100644 --- a/assets/marker.stories-t5e_DMOa.js +++ b/assets/marker.stories-LdIoBqfp.js @@ -1,4 +1,4 @@ -import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{l as h}from"./index-awljIyHI.js";import{M as u}from"./marker-ika3cQ1R.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./util-qk2aeK8X.js";import"./form-wrapped-text-field-DtGz9PJ5.js";const co={title:"PerseusEditor/Widgets/Label Image/Marker"},y=h.StyleSheet.create({wrapper:{marginTop:150,position:"relative",width:32,height:32}}),l=m=>i("div",{className:h.css(y.wrapper),children:i(u,{...m})}),o=m=>i(l,{...{answers:[],choices:[],label:"",onChange:(...r)=>{p("onChange")(...r)},onRemove:(...r)=>{p("onRemove")(...r)},x:50,y:50}}),t=m=>i(l,{...{answers:["BMW","Ferrari"],choices:["Lamborghini","BMW","Volkswagen","Fiat","Porsche","Ferrari"],label:"Automotive",onChange:(...r)=>{p("onChange")(...r)},onRemove:(...r)=>{p("onRemove")(...r)},x:50,y:50}});o.__docgenInfo={description:"",methods:[],displayName:"Empty"};t.__docgenInfo={description:"",methods:[],displayName:"WithAnswers"};var e,s,n;o.parameters={...o.parameters,docs:{...(e=o.parameters)==null?void 0:e.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{l as h}from"./index-awljIyHI.js";import{M as u}from"./marker-o8uSzdrK.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./util-qk2aeK8X.js";import"./form-wrapped-text-field-BopYavUW.js";const co={title:"PerseusEditor/Widgets/Label Image/Marker"},y=h.StyleSheet.create({wrapper:{marginTop:150,position:"relative",width:32,height:32}}),l=m=>i("div",{className:h.css(y.wrapper),children:i(u,{...m})}),o=m=>i(l,{...{answers:[],choices:[],label:"",onChange:(...r)=>{p("onChange")(...r)},onRemove:(...r)=>{p("onRemove")(...r)},x:50,y:50}}),t=m=>i(l,{...{answers:["BMW","Ferrari"],choices:["Lamborghini","BMW","Volkswagen","Fiat","Porsche","Ferrari"],label:"Automotive",onChange:(...r)=>{p("onChange")(...r)},onRemove:(...r)=>{p("onRemove")(...r)},x:50,y:50}});o.__docgenInfo={description:"",methods:[],displayName:"Empty"};t.__docgenInfo={description:"",methods:[],displayName:"WithAnswers"};var e,s,n;o.parameters={...o.parameters,docs:{...(e=o.parameters)==null?void 0:e.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const props = ({ answers: [], choices: [], diff --git a/assets/marker.stories-DOVdrW59.js b/assets/marker.stories-poEv59W3.js similarity index 94% rename from assets/marker.stories-DOVdrW59.js rename to assets/marker.stories-poEv59W3.js index dfe7d40251..69242af119 100644 --- a/assets/marker.stories-DOVdrW59.js +++ b/assets/marker.stories-poEv59W3.js @@ -1,4 +1,4 @@ -import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{l as L}from"./index-awljIyHI.js";import{M as O}from"./marker-bfDDVuIS.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./icon-paths-AuJwhOz7.js";import"./answer-pill-YUUkj-ih.js";import"./index-o3wWn3Y5.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./index-7vsPyIck.js";import"./renderer-vBOYiNCS.js";import"./version-akiLXZts.js";import"./util-XcxTwqb0.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";const be={title:"Perseus/Widgets/Label Image/Marker"},q=L.StyleSheet.create({wrapper:{position:"relative",width:32,height:32}}),s=r=>e("div",{className:L.css(q.wrapper),children:e(O,{...r})}),t=r=>e(s,{...{answers:["BMW","Ferrari"],selected:[],label:"Automotive",x:50,y:50,showSelected:!1,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),n=r=>e(s,{...{answers:["BMW","Ferrari"],selected:[],label:"Automotive",x:50,y:50,showSelected:!1,showPulsate:!0,onClick:()=>{},onKeyDown:()=>{}}}),a=r=>e(s,{...{answers:["BMW","Ferrari"],selected:[],label:"Automotive",x:50,y:50,showSelected:!0,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),c=r=>e(s,{...{answers:["BMW","Ferrari"],selected:["Fiat"],label:"Automotive",x:50,y:50,showSelected:!1,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),l=r=>e(s,{...{answers:["BMW","Ferrari"],selected:["Fiat"],label:"Automotive",x:50,y:50,showSelected:!0,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),p=r=>e(s,{...{answers:["BMW","Ferrari"],selected:["Fiat"],label:"Automotive",x:50,y:50,showCorrectness:"incorrect",showSelected:!1,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),i=r=>e(s,{...{answers:["BMW","Ferrari"],selected:["Fiat"],label:"Automotive",x:50,y:50,showCorrectness:"incorrect",showSelected:!0,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),d=r=>e(s,{...{answers:["BMW","Ferrari"],selected:["BMW","Ferrari"],label:"Automotive",x:50,y:50,showCorrectness:"correct",showSelected:!1,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),m=r=>e(s,{...{answers:["BMW","Ferrari"],selected:["BMW","Ferrari"],label:"Automotive",x:50,y:50,showCorrectness:"correct",showSelected:!0,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}});t.__docgenInfo={description:"",methods:[],displayName:"Unfilled"};n.__docgenInfo={description:"",methods:[],displayName:"UnfilledPulsate"};a.__docgenInfo={description:"",methods:[],displayName:"UnfilledSelected"};c.__docgenInfo={description:"",methods:[],displayName:"Filled"};l.__docgenInfo={description:"",methods:[],displayName:"FilledSelected"};p.__docgenInfo={description:"",methods:[],displayName:"Incorrect"};i.__docgenInfo={description:"",methods:[],displayName:"IncorrectSelected"};d.__docgenInfo={description:"",methods:[],displayName:"Correct"};m.__docgenInfo={description:"",methods:[],displayName:"CorrectSelected"};var u,w,h;t.parameters={...t.parameters,docs:{...(u=t.parameters)==null?void 0:u.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{l as L}from"./index-awljIyHI.js";import{M as O}from"./marker-ockQWLHi.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./icon-paths-AuJwhOz7.js";import"./answer-pill-NjYGKpaV.js";import"./index-o3wWn3Y5.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./index-7vsPyIck.js";import"./renderer-hPmI_Chp.js";import"./version-akiLXZts.js";import"./util-YrNvlCNO.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";const be={title:"Perseus/Widgets/Label Image/Marker"},q=L.StyleSheet.create({wrapper:{position:"relative",width:32,height:32}}),s=r=>e("div",{className:L.css(q.wrapper),children:e(O,{...r})}),t=r=>e(s,{...{answers:["BMW","Ferrari"],selected:[],label:"Automotive",x:50,y:50,showSelected:!1,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),n=r=>e(s,{...{answers:["BMW","Ferrari"],selected:[],label:"Automotive",x:50,y:50,showSelected:!1,showPulsate:!0,onClick:()=>{},onKeyDown:()=>{}}}),a=r=>e(s,{...{answers:["BMW","Ferrari"],selected:[],label:"Automotive",x:50,y:50,showSelected:!0,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),c=r=>e(s,{...{answers:["BMW","Ferrari"],selected:["Fiat"],label:"Automotive",x:50,y:50,showSelected:!1,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),l=r=>e(s,{...{answers:["BMW","Ferrari"],selected:["Fiat"],label:"Automotive",x:50,y:50,showSelected:!0,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),p=r=>e(s,{...{answers:["BMW","Ferrari"],selected:["Fiat"],label:"Automotive",x:50,y:50,showCorrectness:"incorrect",showSelected:!1,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),i=r=>e(s,{...{answers:["BMW","Ferrari"],selected:["Fiat"],label:"Automotive",x:50,y:50,showCorrectness:"incorrect",showSelected:!0,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),d=r=>e(s,{...{answers:["BMW","Ferrari"],selected:["BMW","Ferrari"],label:"Automotive",x:50,y:50,showCorrectness:"correct",showSelected:!1,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}}),m=r=>e(s,{...{answers:["BMW","Ferrari"],selected:["BMW","Ferrari"],label:"Automotive",x:50,y:50,showCorrectness:"correct",showSelected:!0,showPulsate:!1,onClick:()=>{},onKeyDown:()=>{}}});t.__docgenInfo={description:"",methods:[],displayName:"Unfilled"};n.__docgenInfo={description:"",methods:[],displayName:"UnfilledPulsate"};a.__docgenInfo={description:"",methods:[],displayName:"UnfilledSelected"};c.__docgenInfo={description:"",methods:[],displayName:"Filled"};l.__docgenInfo={description:"",methods:[],displayName:"FilledSelected"};p.__docgenInfo={description:"",methods:[],displayName:"Incorrect"};i.__docgenInfo={description:"",methods:[],displayName:"IncorrectSelected"};d.__docgenInfo={description:"",methods:[],displayName:"Correct"};m.__docgenInfo={description:"",methods:[],displayName:"CorrectSelected"};var u,w,h;t.parameters={...t.parameters,docs:{...(u=t.parameters)==null?void 0:u.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const props = ({ answers: ["BMW", "Ferrari"], selected: [], diff --git a/assets/matcher-editor-Aey-GH6J.js b/assets/matcher-editor-roy8eQL9.js similarity index 87% rename from assets/matcher-editor-Aey-GH6J.js rename to assets/matcher-editor-roy8eQL9.js index ee4e37e60b..5efde3478a 100644 --- a/assets/matcher-editor-Aey-GH6J.js +++ b/assets/matcher-editor-roy8eQL9.js @@ -1 +1 @@ -import{a as t,j as e}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import{_ as p}from"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{C as d}from"./index-QCAhLhLD.js";import{P as i}from"./index-0C4KXdeC.js";import{r as m}from"./index-TT1qJ6UJ.js";const{InfoTip:o,TextListEditor:h}=c,s=class s extends m.Component{constructor(){super(...arguments),this.onLabelChange=(r,a)=>{const l=p.clone(this.props.labels);l[r]=a.target.value,this.props.onChange({labels:l})},this.getSaveWarnings=()=>this.props.left.length!==this.props.right.length?["The two halves of the matcher have different numbers of cards."]:[],this.serialize=()=>p.pick(this.props,"left","right","labels","orderMatters","padding")}render(){return t("div",{className:"perseus-matcher-editor",children:[t("div",{children:[" ","Correct answer:"," ",e(o,{children:e("p",{children:"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."})})]}),t("div",{className:"perseus-clearfix",children:[e(h,{options:this.props.left,onChange:(r,a)=>{this.props.onChange({left:r},a)},layout:"vertical"}),e(h,{options:this.props.right,onChange:(r,a)=>{this.props.onChange({right:r},a)},layout:"vertical"})]}),t("span",{children:[" ","Labels:"," ",e(o,{children:e("p",{children:"These are entirely optional."})})]}),t("div",{children:[e("input",{type:"text",defaultValue:this.props.labels[0],onChange:this.onLabelChange.bind(this,0)}),e("input",{type:"text",defaultValue:this.props.labels[1],onChange:this.onLabelChange.bind(this,1)})]}),t("div",{children:[e(d,{label:"Order of the matched pairs matters:",checked:this.props.orderMatters,onChange:r=>{this.props.onChange({orderMatters:r})}}),t(o,{children:[e("p",{children:"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."}),e("p",{children:"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."})]})]}),t("div",{children:[e(d,{label:"Padding:",checked:this.props.padding,onChange:r=>{this.props.onChange({padding:r})}}),e(o,{children:e("p",{children:"Padding is good for text, but not needed for images."})})]})]})}};s.propTypes={left:i.array,right:i.array,labels:i.array,orderMatters:i.bool,padding:i.bool},s.widgetName="matcher",s.defaultProps={left:["$x$","$y$","$z$"],right:["$1$","$2$","$3$"],labels:["test","label"],orderMatters:!1,padding:!0};let n=s;n.__docgenInfo={description:"",methods:[{name:"onLabelChange",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"MatcherEditor",props:{left:{defaultValue:{value:'["$x$", "$y$", "$z$"]',computed:!1},description:"",type:{name:"array"},required:!1},right:{defaultValue:{value:'["$1$", "$2$", "$3$"]',computed:!1},description:"",type:{name:"array"},required:!1},labels:{defaultValue:{value:'["test", "label"]',computed:!1},description:"",type:{name:"array"},required:!1},orderMatters:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},padding:{defaultValue:{value:"true",computed:!1},description:"",type:{name:"bool"},required:!1}}};export{n as M}; +import{a as t,j as e}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import{_ as p}from"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{C as d}from"./index-QCAhLhLD.js";import{P as i}from"./index-k-0mNqHS.js";import{r as m}from"./index-TT1qJ6UJ.js";const{InfoTip:o,TextListEditor:h}=c,s=class s extends m.Component{constructor(){super(...arguments),this.onLabelChange=(r,a)=>{const l=p.clone(this.props.labels);l[r]=a.target.value,this.props.onChange({labels:l})},this.getSaveWarnings=()=>this.props.left.length!==this.props.right.length?["The two halves of the matcher have different numbers of cards."]:[],this.serialize=()=>p.pick(this.props,"left","right","labels","orderMatters","padding")}render(){return t("div",{className:"perseus-matcher-editor",children:[t("div",{children:[" ","Correct answer:"," ",e(o,{children:e("p",{children:"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."})})]}),t("div",{className:"perseus-clearfix",children:[e(h,{options:this.props.left,onChange:(r,a)=>{this.props.onChange({left:r},a)},layout:"vertical"}),e(h,{options:this.props.right,onChange:(r,a)=>{this.props.onChange({right:r},a)},layout:"vertical"})]}),t("span",{children:[" ","Labels:"," ",e(o,{children:e("p",{children:"These are entirely optional."})})]}),t("div",{children:[e("input",{type:"text",defaultValue:this.props.labels[0],onChange:this.onLabelChange.bind(this,0)}),e("input",{type:"text",defaultValue:this.props.labels[1],onChange:this.onLabelChange.bind(this,1)})]}),t("div",{children:[e(d,{label:"Order of the matched pairs matters:",checked:this.props.orderMatters,onChange:r=>{this.props.onChange({orderMatters:r})}}),t(o,{children:[e("p",{children:"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."}),e("p",{children:"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."})]})]}),t("div",{children:[e(d,{label:"Padding:",checked:this.props.padding,onChange:r=>{this.props.onChange({padding:r})}}),e(o,{children:e("p",{children:"Padding is good for text, but not needed for images."})})]})]})}};s.propTypes={left:i.array,right:i.array,labels:i.array,orderMatters:i.bool,padding:i.bool},s.widgetName="matcher",s.defaultProps={left:["$x$","$y$","$z$"],right:["$1$","$2$","$3$"],labels:["test","label"],orderMatters:!1,padding:!0};let n=s;n.__docgenInfo={description:"",methods:[{name:"onLabelChange",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"MatcherEditor",props:{left:{defaultValue:{value:'["$x$", "$y$", "$z$"]',computed:!1},description:"",type:{name:"array"},required:!1},right:{defaultValue:{value:'["$1$", "$2$", "$3$"]',computed:!1},description:"",type:{name:"array"},required:!1},labels:{defaultValue:{value:'["test", "label"]',computed:!1},description:"",type:{name:"array"},required:!1},orderMatters:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},padding:{defaultValue:{value:"true",computed:!1},description:"",type:{name:"bool"},required:!1}}};export{n as M}; diff --git a/assets/matcher-editor.stories-crM94-Mu.js b/assets/matcher-editor.stories-mQhhvJt8.js similarity index 66% rename from assets/matcher-editor.stories-crM94-Mu.js rename to assets/matcher-editor.stories-mQhhvJt8.js index 17dbc4a9c1..1224d5222d 100644 --- a/assets/matcher-editor.stories-crM94-Mu.js +++ b/assets/matcher-editor.stories-mQhhvJt8.js @@ -1,3 +1,3 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{M as e}from"./matcher-editor-Aey-GH6J.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./index-0C4KXdeC.js";const rt={title:"PerseusEditor/Widgets/Matcher Editor"},r=a=>m(e,{onChange:p("onChange")});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var t,o,i;r.parameters={...r.parameters,docs:{...(t=r.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{M as e}from"./matcher-editor-roy8eQL9.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./index-k-0mNqHS.js";const rt={title:"PerseusEditor/Widgets/Matcher Editor"},r=a=>m(e,{onChange:p("onChange")});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var t,o,i;r.parameters={...r.parameters,docs:{...(t=r.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(i=(o=r.parameters)==null?void 0:o.docs)==null?void 0:i.source}}};const tt=["Default"];export{r as Default,tt as __namedExportsOrder,rt as default}; diff --git a/assets/matcher.stories-EUShu0d6.js b/assets/matcher.stories-SZ5TFBh-.js similarity index 72% rename from assets/matcher.stories-EUShu0d6.js rename to assets/matcher.stories-SZ5TFBh-.js index db536eb7fb..11f6f58178 100644 --- a/assets/matcher.stories-EUShu0d6.js +++ b/assets/matcher.stories-SZ5TFBh-.js @@ -1,4 +1,4 @@ -import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{R as m}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const p={content:`**Match each claim with its supporting evidence.** +import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{R as m}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const p={content:`**Match each claim with its supporting evidence.** [[☃ matcher 1]]`,images:{},widgets:{"matcher 1":{version:{major:0,minor:0},type:"matcher",graded:!0,options:{labels:["**Claims**","**Evidence**"],padding:!0,orderMatters:!1,right:["Medium-sized stars typically exist for roughly 10 billion years","The current trajectory of the Earth’s tectonic plate movement","The life cycle of medium-sized stars includes a red giant stage and ends in a whimper as a white dwarf","Rapid escalation of greenhouse gas emissions","The current trajectory of the Milky Way galaxy and those in its immediate proximity"],left:["Our Sun will run out of fuel and die in around 5 billion years ","Plate tectonics will rearrange the continents: the Pacific will narrow, bringing Australia closer to the Americas, and the Atlantic will expand to form the largest of the oceans ","Our Sun will run out of hydrogen, swell into a red giant, gobble up the inner rocky planets, and then collapse and die ","Average global temperatures will rise ","In 3 to 4 billion years, our galaxy will begin a slow collision with its closest large neighbor, Andromeda "]}}}},Yt={title:"Perseus/Widgets/Matcher"},t=a=>e(m,{question:p});t.__docgenInfo={description:"",methods:[],displayName:"Question1"};var r,i,o;t.parameters={...t.parameters,docs:{...(r=t.parameters)==null?void 0:r.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/math-input-b6JdL4xR.js b/assets/math-input-b6JdL4xR.js index cbe4aa6302..5d91b3c727 100644 --- a/assets/math-input-b6JdL4xR.js +++ b/assets/math-input-b6JdL4xR.js @@ -1,4 +1,4 @@ -import{j as i,a as v,F as q}from"./jsx-runtime-FVsy8kgq.js";import"./prop-types-3bOVFRDQ.js";import{a as x,c as K,g as h,m as _}from"./key-translator-IA-2V2LV.js";import{C as B,K as A}from"./mobile-keypad-hKjeQGNp.js";import{M as V,c as D}from"./button-assets-txIojR3b.js";import{C as O}from"./index-2dmvOE3q.js";import{V as R}from"./index-6h5t6F0w.js";import{P as U,a as E}from"./index-BPSWBbj5.js";import{c as l,s as k}from"./index-deFLJwr4.js";import{e as W}from"./index-h_CiYGGb.js";import{l as S}from"./index-awljIyHI.js";import{c as I}from"./index-dnMhQZ-1.js";import{_ as L,$ as P}from"./jquery-yG1GhClm.js";import{r as b}from"./index-TT1qJ6UJ.js";import{P as H}from"./i18n-context-hxuRe8oU.js";var n=[];for(var y=0;y<256;++y)n.push((y+256).toString(16).slice(1));function N(a,e=0){return(n[a[e+0]]+n[a[e+1]]+n[a[e+2]]+n[a[e+3]]+"-"+n[a[e+4]]+n[a[e+5]]+"-"+n[a[e+6]]+n[a[e+7]]+"-"+n[a[e+8]]+n[a[e+9]]+"-"+n[a[e+10]]+n[a[e+11]]+n[a[e+12]]+n[a[e+13]]+n[a[e+14]]+n[a[e+15]]).toLowerCase()}var p,M=new Uint8Array(16);function j(){if(!p&&(p=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!p))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return p(M)}var Z=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);const w={randomUUID:Z};function $(a,e,t){if(w.randomUUID&&!e&&!a)return w.randomUUID();a=a||{};var r=a.random||(a.rng||j)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,e){t=t||0;for(var s=0;s<16;++s)e[t+s]=r[s];return e}return N(r)}const z=S.StyleSheet.create({srOnly:{border:0,clip:"rect(0,0,0,0)",height:1,margin:-1,overflow:"hidden",padding:0,position:"absolute",width:1}}),G=(a,e)=>{let t=null;return(...r)=>{t&&clearTimeout(t),t=window.setTimeout(()=>{a(...r)},e)}},u=class u extends b.Component{constructor(){super(...arguments),this.__mathFieldWrapperRef=null,this.__mathField=null,this.state={focused:!1,keypadOpen:this.props.buttonsVisible==="always",cursorContext:B.NONE},this.insert=e=>{const t=this.mathField(),{locale:r}=this.context,o={...x(r,this.context.strings),FRAC:c=>{const F=c.latex();c.typedText("/"),c.latex()===F&&c.cmd("\\frac")}}[e];if(o){o(t,e),t==null||t.focus();return}L(e).isFunction()?e(t):e[0]==="\\"?t==null||t.cmd(e).focus():t==null||t.write(e).focus(),t==null||t.focus()},this.mathField=()=>{var e;if(!this.__mathField&&this.__mathFieldWrapperRef){const{locale:t}=this.context;this.__mathField=K(this.__mathFieldWrapperRef,t,this.props.mathInputStrings,r=>({...r,handlers:{edit:G(s=>{let o=s.latex();if(o=o.replace(/<>/g,"\\ne"),D(t,this.props.convertDotToTimes)){o=o.replace(/\\cdot/g,"\\times");const c=s.cursor()[_.L];c&&c.ctrlSeq==="\\cdot "&&(s.controller().backspace(),s.cmd("\\times"))}else o=o.replace(/\\times/g,"\\cdot");this.props.value!==o&&this.props.onChange(o),this.setState({cursorContext:h(s)})},100),enter:()=>{this.__mathFieldWrapperRef&&P(this.__mathFieldWrapperRef).submit()},upOutOf:s=>{s.typedText("^")}}}))}return(e=this.__mathField)==null||e.setAriaLabel(this.props.ariaLabel),this.__mathField},this.focus=()=>{var e;(e=this.mathField())==null||e.focus(),this.setState({focused:!0})},this.blur=()=>this.setState({focused:!1}),this.handleKeypadPress=(e,t)=>{const{locale:r}=this.context,s=x(r,this.context.strings)[e],o=this.mathField();o&&(s&&s(o,e),this.setState({cursorContext:h(o)})),t.type==="click"&&this.focus()}}componentDidMount(){var e;(e=this.mathField())==null||e.latex(this.props.value)}openKeypad(){this.props.buttonsVisible!=="never"&&this.setState({keypadOpen:!0})}closeKeypad(){this.setState({keypadOpen:!1})}render(){let e=I({"perseus-math-input":!0,"mq-editable-field":!0,"mq-math-mode":!0});const t=$().slice(0,8);return this.props.className&&(e=e+" "+this.props.className),i(R,{style:[d.outerWrapper,this.state.focused&&d.wrapperFocused,this.props.hasError&&d.wrapperError],children:v("div",{style:{display:"flex",padding:1},onClick:r=>{r.stopPropagation();const s=this.mathField();s&&this.setState({cursorContext:h(s)})},children:[i("span",{className:e,ref:r=>this.__mathFieldWrapperRef=r,onFocus:()=>this.focus(),onBlur:()=>this.blur()}),i(U,{rootBoundary:"document",opened:this.state.keypadOpen,onClose:()=>this.closeKeypad(),dismissEnabled:!0,"aria-label":this.context.strings.mathInputTitle,"aria-describedby":`popover-content-${t}`,content:()=>{var r;return v(q,{children:[i(W,{id:`popover-content-${t}`,style:z.srOnly,children:this.context.strings.mathInputDescription}),i(E,{closeButtonVisible:!0,style:d.popoverContent,children:i(A,{onAnalyticsEvent:this.props.analytics.onAnalyticsEvent,extraKeys:this.props.extraKeys,onClickKey:this.handleKeypadPress,cursorContext:this.state.cursorContext,convertDotToTimes:this.props.convertDotToTimes,...this.props.keypadButtonSets??J((r=this.props)==null?void 0:r.buttonSets)})})]})},children:this.props.buttonsVisible==="never"?i(C,{hovered:!1,focused:!1,active:!1}):i(O,{"aria-label":this.state.keypadOpen?this.context.strings.closeKeypad:this.context.strings.openKeypad,role:"button",onClick:()=>this.state.keypadOpen?this.closeKeypad():this.openKeypad(),children:r=>i(C,{active:this.state.keypadOpen,...r})})})]})})}};u.contextType=H,u.defaultProps={value:"",convertDotToTimes:!1};let f=u;const m=class m extends b.Component{constructor(){super(...arguments),this.inputRef=b.createRef()}blur(){var e;(e=this.inputRef.current)==null||e.blur()}focus(){var e;(e=this.inputRef.current)==null||e.focus()}insert(e){var t;(t=this.inputRef.current)==null||t.insert(e)}render(){return i(f,{...this.props,ref:this.inputRef,mathInputStrings:this.context.strings})}};m.contextType=V,m.defaultProps={ariaLabel:"Math input"};let g=m;const C=({hovered:a,focused:e,active:t})=>{let r;switch(!0){case(e||t):r=l.white;break;case a:r=l.blue;break;default:r=l.offBlack;break}const s=t||e?d.iconActive:d.iconInactive;return i(R,{style:[d.iconContainer,s],children:i("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:r,viewBox:"0 0 256 256",children:i("path",{d:"M112,72a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16h64A8,8,0,0,1,112,72Zm-8,104H80V152a8,8,0,0,0-16,0v24H40a8,8,0,0,0,0,16H64v24a8,8,0,0,0,16,0V192h24a8,8,0,0,0,0-16Zm48,0h64a8,8,0,0,0,0-16H152a8,8,0,0,0,0,16Zm64,16H152a8,8,0,0,0,0,16h64a8,8,0,0,0,0-16Zm-61.66-90.34a8,8,0,0,0,11.32,0L184,83.31l18.34,18.35a8,8,0,0,0,11.32-11.32L195.31,72l18.35-18.34a8,8,0,0,0-11.32-11.32L184,60.69,165.66,42.34a8,8,0,0,0-11.32,11.32L172.69,72,154.34,90.34A8,8,0,0,0,154.34,101.66Z"})})})},J=a=>{const e={};return a&&a.forEach(t=>{switch(t){case"advanced relations":e.advancedRelations=!0;break;case"basic relations":e.basicRelations=!0;break;case"basic+div":e.divisionKey=!0;break;case"logarithms":e.logarithms=!0;break;case"prealgebra":e.preAlgebra=!0;break;case"trig":e.trigonometry=!0;break}}),e},T={borderWidth:2,borderColor:l.blue,margin:-1},d=S.StyleSheet.create({iconContainer:{display:"flex",justifyContent:"center",height:"100%",padding:k.xxxSmall_4,borderRadius:1},iconInactive:{border:"2px solid transparent",backgroundColor:l.offBlack8},iconActive:{border:`2px solid ${l.white}`,backgroundColor:l.offBlack64},outerWrapper:{display:"inline-block",borderStyle:"solid",borderWidth:1,borderColor:l.offBlack50,borderRadius:3,background:l.white,":hover":T},wrapperFocused:T,wrapperError:{borderColor:l.red,background:l.fadedRed8,":hover":{borderColor:l.red}},popoverContent:{padding:0,paddingBottom:k.xxSmall_6,maxWidth:"initial"}});g.__docgenInfo={description:"",methods:[{name:"blur",docblock:null,modifiers:[],params:[],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"insert",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:{name:"any"}}],returns:null}],displayName:"MathInput",props:{className:{required:!1,tsType:{name:"string"},description:""},value:{required:!0,tsType:{name:"string"},description:""},onChange:{required:!0,tsType:{name:"any"},description:""},convertDotToTimes:{required:!0,tsType:{name:"boolean"},description:""},buttonSets:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"union",raw:`| "basic" +import{j as i,a as v,F as q}from"./jsx-runtime-FVsy8kgq.js";import"./prop-types-3bOVFRDQ.js";import{a as x,c as K,g as h,m as _}from"./key-translator-IA-2V2LV.js";import{C as B,K as A}from"./mobile-keypad-hKjeQGNp.js";import{M as V,c as D}from"./button-assets-txIojR3b.js";import{C as O}from"./index-WNT3sUKf.js";import{V as R}from"./index-6h5t6F0w.js";import{P as U,a as E}from"./index-BPSWBbj5.js";import{c as l,s as k}from"./index-deFLJwr4.js";import{e as W}from"./index-h_CiYGGb.js";import{l as S}from"./index-awljIyHI.js";import{c as I}from"./index-dnMhQZ-1.js";import{_ as L,$ as P}from"./jquery-yG1GhClm.js";import{r as b}from"./index-TT1qJ6UJ.js";import{P as H}from"./i18n-context-hxuRe8oU.js";var n=[];for(var y=0;y<256;++y)n.push((y+256).toString(16).slice(1));function N(a,e=0){return(n[a[e+0]]+n[a[e+1]]+n[a[e+2]]+n[a[e+3]]+"-"+n[a[e+4]]+n[a[e+5]]+"-"+n[a[e+6]]+n[a[e+7]]+"-"+n[a[e+8]]+n[a[e+9]]+"-"+n[a[e+10]]+n[a[e+11]]+n[a[e+12]]+n[a[e+13]]+n[a[e+14]]+n[a[e+15]]).toLowerCase()}var p,M=new Uint8Array(16);function j(){if(!p&&(p=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!p))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return p(M)}var Z=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);const w={randomUUID:Z};function $(a,e,t){if(w.randomUUID&&!e&&!a)return w.randomUUID();a=a||{};var r=a.random||(a.rng||j)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,e){t=t||0;for(var s=0;s<16;++s)e[t+s]=r[s];return e}return N(r)}const z=S.StyleSheet.create({srOnly:{border:0,clip:"rect(0,0,0,0)",height:1,margin:-1,overflow:"hidden",padding:0,position:"absolute",width:1}}),G=(a,e)=>{let t=null;return(...r)=>{t&&clearTimeout(t),t=window.setTimeout(()=>{a(...r)},e)}},u=class u extends b.Component{constructor(){super(...arguments),this.__mathFieldWrapperRef=null,this.__mathField=null,this.state={focused:!1,keypadOpen:this.props.buttonsVisible==="always",cursorContext:B.NONE},this.insert=e=>{const t=this.mathField(),{locale:r}=this.context,o={...x(r,this.context.strings),FRAC:c=>{const F=c.latex();c.typedText("/"),c.latex()===F&&c.cmd("\\frac")}}[e];if(o){o(t,e),t==null||t.focus();return}L(e).isFunction()?e(t):e[0]==="\\"?t==null||t.cmd(e).focus():t==null||t.write(e).focus(),t==null||t.focus()},this.mathField=()=>{var e;if(!this.__mathField&&this.__mathFieldWrapperRef){const{locale:t}=this.context;this.__mathField=K(this.__mathFieldWrapperRef,t,this.props.mathInputStrings,r=>({...r,handlers:{edit:G(s=>{let o=s.latex();if(o=o.replace(/<>/g,"\\ne"),D(t,this.props.convertDotToTimes)){o=o.replace(/\\cdot/g,"\\times");const c=s.cursor()[_.L];c&&c.ctrlSeq==="\\cdot "&&(s.controller().backspace(),s.cmd("\\times"))}else o=o.replace(/\\times/g,"\\cdot");this.props.value!==o&&this.props.onChange(o),this.setState({cursorContext:h(s)})},100),enter:()=>{this.__mathFieldWrapperRef&&P(this.__mathFieldWrapperRef).submit()},upOutOf:s=>{s.typedText("^")}}}))}return(e=this.__mathField)==null||e.setAriaLabel(this.props.ariaLabel),this.__mathField},this.focus=()=>{var e;(e=this.mathField())==null||e.focus(),this.setState({focused:!0})},this.blur=()=>this.setState({focused:!1}),this.handleKeypadPress=(e,t)=>{const{locale:r}=this.context,s=x(r,this.context.strings)[e],o=this.mathField();o&&(s&&s(o,e),this.setState({cursorContext:h(o)})),t.type==="click"&&this.focus()}}componentDidMount(){var e;(e=this.mathField())==null||e.latex(this.props.value)}openKeypad(){this.props.buttonsVisible!=="never"&&this.setState({keypadOpen:!0})}closeKeypad(){this.setState({keypadOpen:!1})}render(){let e=I({"perseus-math-input":!0,"mq-editable-field":!0,"mq-math-mode":!0});const t=$().slice(0,8);return this.props.className&&(e=e+" "+this.props.className),i(R,{style:[d.outerWrapper,this.state.focused&&d.wrapperFocused,this.props.hasError&&d.wrapperError],children:v("div",{style:{display:"flex",padding:1},onClick:r=>{r.stopPropagation();const s=this.mathField();s&&this.setState({cursorContext:h(s)})},children:[i("span",{className:e,ref:r=>this.__mathFieldWrapperRef=r,onFocus:()=>this.focus(),onBlur:()=>this.blur()}),i(U,{rootBoundary:"document",opened:this.state.keypadOpen,onClose:()=>this.closeKeypad(),dismissEnabled:!0,"aria-label":this.context.strings.mathInputTitle,"aria-describedby":`popover-content-${t}`,content:()=>{var r;return v(q,{children:[i(W,{id:`popover-content-${t}`,style:z.srOnly,children:this.context.strings.mathInputDescription}),i(E,{closeButtonVisible:!0,style:d.popoverContent,children:i(A,{onAnalyticsEvent:this.props.analytics.onAnalyticsEvent,extraKeys:this.props.extraKeys,onClickKey:this.handleKeypadPress,cursorContext:this.state.cursorContext,convertDotToTimes:this.props.convertDotToTimes,...this.props.keypadButtonSets??J((r=this.props)==null?void 0:r.buttonSets)})})]})},children:this.props.buttonsVisible==="never"?i(C,{hovered:!1,focused:!1,active:!1}):i(O,{"aria-label":this.state.keypadOpen?this.context.strings.closeKeypad:this.context.strings.openKeypad,role:"button",onClick:()=>this.state.keypadOpen?this.closeKeypad():this.openKeypad(),children:r=>i(C,{active:this.state.keypadOpen,...r})})})]})})}};u.contextType=H,u.defaultProps={value:"",convertDotToTimes:!1};let f=u;const m=class m extends b.Component{constructor(){super(...arguments),this.inputRef=b.createRef()}blur(){var e;(e=this.inputRef.current)==null||e.blur()}focus(){var e;(e=this.inputRef.current)==null||e.focus()}insert(e){var t;(t=this.inputRef.current)==null||t.insert(e)}render(){return i(f,{...this.props,ref:this.inputRef,mathInputStrings:this.context.strings})}};m.contextType=V,m.defaultProps={ariaLabel:"Math input"};let g=m;const C=({hovered:a,focused:e,active:t})=>{let r;switch(!0){case(e||t):r=l.white;break;case a:r=l.blue;break;default:r=l.offBlack;break}const s=t||e?d.iconActive:d.iconInactive;return i(R,{style:[d.iconContainer,s],children:i("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:r,viewBox:"0 0 256 256",children:i("path",{d:"M112,72a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16h64A8,8,0,0,1,112,72Zm-8,104H80V152a8,8,0,0,0-16,0v24H40a8,8,0,0,0,0,16H64v24a8,8,0,0,0,16,0V192h24a8,8,0,0,0,0-16Zm48,0h64a8,8,0,0,0,0-16H152a8,8,0,0,0,0,16Zm64,16H152a8,8,0,0,0,0,16h64a8,8,0,0,0,0-16Zm-61.66-90.34a8,8,0,0,0,11.32,0L184,83.31l18.34,18.35a8,8,0,0,0,11.32-11.32L195.31,72l18.35-18.34a8,8,0,0,0-11.32-11.32L184,60.69,165.66,42.34a8,8,0,0,0-11.32,11.32L172.69,72,154.34,90.34A8,8,0,0,0,154.34,101.66Z"})})})},J=a=>{const e={};return a&&a.forEach(t=>{switch(t){case"advanced relations":e.advancedRelations=!0;break;case"basic relations":e.basicRelations=!0;break;case"basic+div":e.divisionKey=!0;break;case"logarithms":e.logarithms=!0;break;case"prealgebra":e.preAlgebra=!0;break;case"trig":e.trigonometry=!0;break}}),e},T={borderWidth:2,borderColor:l.blue,margin:-1},d=S.StyleSheet.create({iconContainer:{display:"flex",justifyContent:"center",height:"100%",padding:k.xxxSmall_4,borderRadius:1},iconInactive:{border:"2px solid transparent",backgroundColor:l.offBlack8},iconActive:{border:`2px solid ${l.white}`,backgroundColor:l.offBlack64},outerWrapper:{display:"inline-block",borderStyle:"solid",borderWidth:1,borderColor:l.offBlack50,borderRadius:3,background:l.white,":hover":T},wrapperFocused:T,wrapperError:{borderColor:l.red,background:l.fadedRed8,":hover":{borderColor:l.red}},popoverContent:{padding:0,paddingBottom:k.xxSmall_6,maxWidth:"initial"}});g.__docgenInfo={description:"",methods:[{name:"blur",docblock:null,modifiers:[],params:[],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"insert",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:{name:"any"}}],returns:null}],displayName:"MathInput",props:{className:{required:!1,tsType:{name:"string"},description:""},value:{required:!0,tsType:{name:"string"},description:""},onChange:{required:!0,tsType:{name:"any"},description:""},convertDotToTimes:{required:!0,tsType:{name:"boolean"},description:""},buttonSets:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"union",raw:`| "basic" | "basic+div" | "trig" | "prealgebra" diff --git a/assets/math-input.stories-6v1Hp3Uf.js b/assets/math-input.stories-6v1Hp3Uf.js index f3b79213e7..e000571b75 100644 --- a/assets/math-input.stories-6v1Hp3Uf.js +++ b/assets/math-input.stories-6v1Hp3Uf.js @@ -1,4 +1,4 @@ -import{j as o}from"./jsx-runtime-FVsy8kgq.js";import{M as s}from"./math-input-b6JdL4xR.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./prop-types-3bOVFRDQ.js";import"./version-akiLXZts.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./index-h_CiYGGb.js";import"./index-dnMhQZ-1.js";import"./jquery-yG1GhClm.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";const re={title:"Perseus/Components/Math Input"},i={keypadButtonSets:{advancedRelations:!0,basicRelations:!0,divisionKey:!0,logarithms:!0,preAlgebra:!0,trigonometry:!0},convertDotToTimes:!1,value:"",onChange:()=>{},analytics:{onAnalyticsEvent:()=>Promise.resolve()},labelText:"Math input"},e=p=>o(s,{...i}),t=p=>o(s,{...i,ariaLabel:"Sample label"}),r=p=>o(s,{...i,buttonsVisible:"always"}),a=p=>o(s,{...i,buttonsVisible:"never"});e.__docgenInfo={description:"",methods:[],displayName:"DefaultWithBasicButtonSet"};t.__docgenInfo={description:"",methods:[],displayName:"DefaultWithAriaLabel"};r.__docgenInfo={description:"",methods:[],displayName:"KeypadOpenByDefault"};a.__docgenInfo={description:"",methods:[],displayName:"KeypadNeverVisible"};var n,m,c;e.parameters={...e.parameters,docs:{...(n=e.parameters)==null?void 0:n.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as o}from"./jsx-runtime-FVsy8kgq.js";import{M as s}from"./math-input-b6JdL4xR.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./prop-types-3bOVFRDQ.js";import"./version-akiLXZts.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./index-h_CiYGGb.js";import"./index-dnMhQZ-1.js";import"./jquery-yG1GhClm.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";const re={title:"Perseus/Components/Math Input"},i={keypadButtonSets:{advancedRelations:!0,basicRelations:!0,divisionKey:!0,logarithms:!0,preAlgebra:!0,trigonometry:!0},convertDotToTimes:!1,value:"",onChange:()=>{},analytics:{onAnalyticsEvent:()=>Promise.resolve()},labelText:"Math input"},e=p=>o(s,{...i}),t=p=>o(s,{...i,ariaLabel:"Sample label"}),r=p=>o(s,{...i,buttonsVisible:"always"}),a=p=>o(s,{...i,buttonsVisible:"never"});e.__docgenInfo={description:"",methods:[],displayName:"DefaultWithBasicButtonSet"};t.__docgenInfo={description:"",methods:[],displayName:"DefaultWithAriaLabel"};r.__docgenInfo={description:"",methods:[],displayName:"KeypadOpenByDefault"};a.__docgenInfo={description:"",methods:[],displayName:"KeypadNeverVisible"};var n,m,c;e.parameters={...e.parameters,docs:{...(n=e.parameters)==null?void 0:n.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(c=(m=e.parameters)==null?void 0:m.docs)==null?void 0:c.source}}};var l,u,d;t.parameters={...t.parameters,docs:{...(l=t.parameters)==null?void 0:l.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/matrix.stories-jxKAaBOe.js b/assets/matrix.stories-9tO3WwDv.js similarity index 67% rename from assets/matrix.stories-jxKAaBOe.js rename to assets/matrix.stories-9tO3WwDv.js index 53f041acf5..d7919fa716 100644 --- a/assets/matrix.stories-jxKAaBOe.js +++ b/assets/matrix.stories-9tO3WwDv.js @@ -1,4 +1,4 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{R as p}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const e={content:`**Perform the row operation, $R_3 \\leftrightarrow R_2$, on the following matrix.** +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{R as p}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const e={content:`**Perform the row operation, $R_3 \\leftrightarrow R_2$, on the following matrix.** $\\left[\\begin{array} {ccc} 5 & -2 & 1 & 1 \\\\ diff --git a/assets/multi-items-SYXQQaEF.js b/assets/multi-items-zAjfw5su.js similarity index 88% rename from assets/multi-items-SYXQQaEF.js rename to assets/multi-items-zAjfw5su.js index 9b42a589e1..2ad3fe8c85 100644 --- a/assets/multi-items-SYXQQaEF.js +++ b/assets/multi-items-zAjfw5su.js @@ -1 +1 @@ -import{M as s,s as p,b as a,f,a as u,i as y}from"./multi-renderer-PglzmXdY.js";import"./version-akiLXZts.js";import{P as c,E as m}from"./util-XcxTwqb0.js";import{P as e}from"./index-k-0mNqHS.js";function d(t){return e.oneOfType([e.shape({_multi:n(t)}),e.oneOf([null,void 0])])}function n(t){if(t.type==="content")return e.shape({__type:e.oneOf(["content","item"]).isRequired,content:e.string,images:e.objectOf(e.any),widgets:e.objectOf(e.any)});if(t.type==="hint")return e.shape({__type:e.oneOf(["hint"]).isRequired,content:e.string,images:e.objectOf(e.any),widgets:e.objectOf(e.any),replace:e.bool});if(t.type==="tags")return e.arrayOf(e.string.isRequired);if(t.type==="array"){const r=n(t.elementShape);return e.arrayOf(r.isRequired)}if(t.type==="object"){const r=t.shape,o={};return Object.keys(r).forEach(i=>{o[i]=n(r[i]).isRequired}),e.shape(o)}throw new c(`unexpected shape type ${t.type}`,m.InvalidInput)}const I={MultiRenderer:s,shapes:p,buildPropTypeForShape:d,buildEmptyItemForShape:a,findContentNodesInItem:f,findHintNodesInItem:u,inferItemShape:y};export{I as M}; +import{M as s,s as p,b as a,f,a as u,i as y}from"./multi-renderer-vtdVtdWv.js";import"./version-akiLXZts.js";import{P as c,E as m}from"./util-YrNvlCNO.js";import{P as e}from"./index-0C4KXdeC.js";function d(t){return e.oneOfType([e.shape({_multi:n(t)}),e.oneOf([null,void 0])])}function n(t){if(t.type==="content")return e.shape({__type:e.oneOf(["content","item"]).isRequired,content:e.string,images:e.objectOf(e.any),widgets:e.objectOf(e.any)});if(t.type==="hint")return e.shape({__type:e.oneOf(["hint"]).isRequired,content:e.string,images:e.objectOf(e.any),widgets:e.objectOf(e.any),replace:e.bool});if(t.type==="tags")return e.arrayOf(e.string.isRequired);if(t.type==="array"){const r=n(t.elementShape);return e.arrayOf(r.isRequired)}if(t.type==="object"){const r=t.shape,o={};return Object.keys(r).forEach(i=>{o[i]=n(r[i]).isRequired}),e.shape(o)}throw new c(`unexpected shape type ${t.type}`,m.InvalidInput)}const I={MultiRenderer:s,shapes:p,buildPropTypeForShape:d,buildEmptyItemForShape:a,findContentNodesInItem:f,findHintNodesInItem:u,inferItemShape:y};export{I as M}; diff --git a/assets/multi-renderer-PglzmXdY.js b/assets/multi-renderer-PglzmXdY.js deleted file mode 100644 index 7d7185d3b4..0000000000 --- a/assets/multi-renderer-PglzmXdY.js +++ /dev/null @@ -1,10731 +0,0 @@ -import{a as $}from"./version-akiLXZts.js";import{w as D}from"./article-renderer-6f7Dak4j.js";import{r as M,k as H,l as G,R as S,p as E}from"./renderer-vBOYiNCS.js";import{j as l,a as K}from"./jsx-runtime-FVsy8kgq.js";import{l as T}from"./index-awljIyHI.js";import{r as A}from"./index-TT1qJ6UJ.js";import{_ as j}from"./jquery-yG1GhClm.js";import{c as B}from"./asset-context-I7yIqWki.js";import{P as N}from"./i18n-context-hxuRe8oU.js";import{D as z}from"./dependencies-8XILypbq.js";import{H as O}from"./hints-renderer-zKC46_AN.js";import{A as Q}from"./perseus-api-mOiZT07d.js";import{U as h,P as g,E as m}from"./util-XcxTwqb0.js";import{L as Z}from"./svg-image-VUqtnnD6.js";const J="@khanacademy/perseus",X="__lib_version__";$(J,X);const Y={major:0,minor:1};M(D);const ee=H();ee["::renderer::"]=Y;const ne={onRendered:r=>{}},re=A.createContext(ne),R=class R extends A.Component{constructor(e){super(e),this._handleFocusChange=(n,t)=>{n!=null?this._setCurrentFocus(n):this._onRendererBlur(t)},this.handleInteractWithWidget=n=>{var a,i;const t=j.difference(this.state.questionHighlightedWidgets,[n]);this.setState({questionCompleted:!1,questionHighlightedWidgets:t}),(i=(a=this.props.apiOptions)==null?void 0:a.interactionCallback)==null||i.call(a,this.questionRenderer.getUserInputForWidgets())},this.setAssetStatus=(n,t)=>{const a={...this.state.assetStatuses,[n]:t};this.setState({assetStatuses:a})},this.state={questionCompleted:!1,questionHighlightedWidgets:[],assetStatuses:{}},this._fullyRendered=!1}componentDidMount(){this._currentFocus=null,this._fullyRendered=!1}UNSAFE_componentWillReceiveProps(e){this.setState({questionHighlightedWidgets:[]})}componentDidUpdate(e,n){if(this.props.apiOptions.answerableCallback){const t=this.questionRenderer.emptyWidgets().length===0,{answerableCallback:a}=this.props.apiOptions;a&&a(t)}this._fullyRendered||Object.values(this.state.assetStatuses).every(Boolean)&&(this._fullyRendered=!0,this.props.onRendered(!0))}componentWillUnmount(){this.blurTimeoutID!=null&&(clearTimeout(this.blurTimeoutID),this.blurTimeoutID=null)}_setCurrentFocus(e){const{apiOptions:{isMobile:n,onFocusChange:t},keypadElement:a}=this.props,i=this._currentFocus;this._currentFocus=e;const s=this.getInputPaths(),o=this._currentFocus&&s.some(d=>h.inputPathsEqual(d,this._currentFocus));t!=null&&setTimeout(()=>{const d=a==null?void 0:a.getDOMNode(),f=d&&o?d.getBoundingClientRect().height:0;t(this._currentFocus,i,f,o&&this.questionRenderer.getDOMNodeForPath(e))},0),a&&n&&(o?a.activate():a.dismiss())}_onRendererBlur(e){const n=this._currentFocus;j.isEqual(e,n)&&(this.blurTimeoutID=setTimeout(()=>{j.isEqual(this._currentFocus,n)&&this._setCurrentFocus(null)},0))}_setWidgetProps(e,n,t){this.questionRenderer._setWidgetProps(e,n,t)}setInputValue(e,n,t){return this.questionRenderer.setInputValue(e,n,t)}focusPath(e){return this.questionRenderer.focusPath(e)}blurPath(e){return this.questionRenderer.blurPath(e)}getDOMNodeForPath(e){return this.questionRenderer.getDOMNodeForPath(e)}getGrammarTypeForPath(e){return this.questionRenderer.getGrammarTypeForPath(e)}getInputPaths(){return this.questionRenderer.getInputPaths()}focus(){return this.questionRenderer.focus()}blur(){this._currentFocus&&this.blurPath(this._currentFocus)}getNumHints(){return this.props.item.hints.length}scoreInput(){const e=this.questionRenderer.guessAndScore(),n=e[0],t=e[1],a=[n,[]],i=h.keScoreFromPerseusScore(t,a,this.questionRenderer.getSerializedState()),s=this.questionRenderer.emptyWidgets();return this.setState({questionCompleted:i.correct,questionHighlightedWidgets:s}),i}getWidgetIds(){return this.questionRenderer.getWidgetIds()}getSerializedState(){return{question:this.questionRenderer.getSerializedState(),hints:this.hintsRenderer.getSerializedState()}}restoreSerializedState(e,n){let t=2;const a=()=>{--t,n&&t===0&&n()};this.questionRenderer.restoreSerializedState(e.question,a),this.hintsRenderer.restoreSerializedState(e.hints,a)}showRationalesForCurrentlySelectedChoices(){this.questionRenderer.showRationalesForCurrentlySelectedChoices()}deselectIncorrectSelectedChoices(){this.questionRenderer.deselectIncorrectSelectedChoices()}render(){const e={...Q.defaults,...this.props.apiOptions,onFocusChange:this._handleFocusChange},n={assetStatuses:this.state.assetStatuses,setAssetStatus:this.setAssetStatus},t=l(B.Provider,{value:n,children:l(S,{keypadElement:this.props.keypadElement,problemNum:this.props.problemNum,onInteractWithWidget:this.handleInteractWithWidget,highlightedWidgets:this.state.questionHighlightedWidgets,apiOptions:e,questionCompleted:this.state.questionCompleted,reviewMode:this.props.reviewMode,showSolutions:this.props.showSolutions,ref:i=>{i!=null&&(this.questionRenderer=i)},content:this.props.item.question.content,widgets:this.props.item.question.widgets,images:this.props.item.question.images,linterContext:E(this.props.linterContext,"question"),strings:this.context.strings,...this.props.dependencies})}),a=l(O,{hints:this.props.item.hints,hintsVisible:this.props.hintsVisible,apiOptions:e,ref:i=>this.hintsRenderer=i,linterContext:E(this.props.linterContext,"hints"),strings:this.context.strings});return l(z.Provider,{value:this.props.dependencies,children:K("div",{children:[l("div",{children:t}),l("div",{className:e.isMobile?void 0:T.css(te.hintsContainer),children:a})]})})}};R.contextType=N,R.defaultProps={apiOptions:{},linterContext:G,onRendered:e=>{}};let k=R;const te=T.StyleSheet.create({hintsContainer:{marginLeft:50}}),ae=A.forwardRef((r,e)=>l(re.Consumer,{children:({onRendered:n})=>l(k,{...r,onRendered:n,ref:e})}));k.__docgenInfo={description:"",methods:[{name:"_handleFocusChange",docblock:null,modifiers:[],params:[{name:"newFocus",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}},{name:"oldFocus",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:null},{name:"_setCurrentFocus",docblock:null,modifiers:[],params:[{name:"newFocus",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:null},{name:"_onRendererBlur",docblock:null,modifiers:[],params:[{name:"blurPath",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:null},{name:"_setWidgetProps",docblock:`Accepts a question area widgetId, or an answer area widgetId of -the form "answer-input-number 1", or the string "answer-area" -for the whole answer area (if the answer area is a single widget).`,modifiers:[],params:[{name:"widgetId",optional:!1,type:{name:"string"}},{name:"newProps",optional:!1,type:{name:"intersection",raw:"SharedRendererProps & OwnProps & HOCProps",elements:[{name:"signature",type:"object",raw:`{ - apiOptions: APIOptions; - linterContext: LinterContextProps; -}`,signature:{properties:[{key:"apiOptions",value:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}}],required:!0},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`,required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}}]}},{name:"signature",type:"object",raw:`{ - hintsVisible?: number; - item: PerseusItem; - problemNum?: number; - reviewMode?: boolean; - keypadElement?: KeypadAPI | null | undefined; - dependencies: PerseusDependenciesV2; - showSolutions?: ShowSolutions; -}`,signature:{properties:[{key:"hintsVisible",value:{name:"number",required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - // The details of the question being asked to the user. - question: PerseusRenderer; - // A collection of hints to be offered to the user that support answering the question. - hints: ReadonlyArray; - // Details about the tools the user might need to answer the question - answerArea: PerseusAnswerArea | null | undefined; - // The version of the item. Not used by Perseus - itemDataVersion: Version; - // Deprecated field - answer: any; -}`,signature:{properties:[{key:"question",value:{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; - }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]},required:!0}},{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; - }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]},required:!0},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!0}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null | undefined",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"},{name:"undefined"}],required:!0}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}},{key:"answer",value:{name:"any",required:!0}}]},required:!0}},{key:"problemNum",value:{name:"number",required:!1}},{key:"reviewMode",value:{name:"boolean",required:!1}},{key:"keypadElement",value:{name:"union",raw:"KeypadAPI | null | undefined",elements:[{name:"KeypadAPI"},{name:"null"},{name:"undefined"}],required:!1}},{key:"dependencies",value:{name:"signature",type:"object",raw:`{ - analytics: {onAnalyticsEvent: AnalyticsEventHandlerFn}; -}`,signature:{properties:[{key:"analytics",value:{name:"signature",type:"object",raw:"{onAnalyticsEvent: AnalyticsEventHandlerFn}",signature:{properties:[{key:"onAnalyticsEvent",value:{name:"AnalyticsEventHandlerFn",required:!0}}]},required:!0}}]},required:!0}},{key:"showSolutions",value:{name:"union",raw:'"all" | "selected" | "none"',elements:[{name:"literal",value:'"all"'},{name:"literal",value:'"selected"'},{name:"literal",value:'"none"'}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - onRendered: (isRendered: boolean) => void; -}`,signature:{properties:[{key:"onRendered",value:{name:"signature",type:"function",raw:"(isRendered: boolean) => void",signature:{arguments:[{type:{name:"boolean"},name:"isRendered"}],return:{name:"void"}},required:!0}}]}}],alias:"Props"}},{name:"callback",optional:!1,type:{name:"any"}}],returns:null,description:`Accepts a question area widgetId, or an answer area widgetId of -the form "answer-input-number 1", or the string "answer-area" -for the whole answer area (if the answer area is a single widget).`},{name:"setInputValue",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}},{name:"newValue",optional:!1,type:{name:"any"}},{name:"focus",optional:!1,type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}}}],returns:{type:{name:"void"}}},{name:"focusPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:{type:{name:"void"}}},{name:"blurPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:{type:{name:"void"}}},{name:"getDOMNodeForPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:{type:{name:"union",raw:"Element | Text | null | undefined",elements:[{name:"Element"},{name:"Text"},{name:"null"},{name:"undefined"}]}}},{name:"getGrammarTypeForPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]}}},{name:"getInputPaths",docblock:null,modifiers:[],params:[],returns:{type:{name:"ReadonlyArray",elements:[{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"handleInteractWithWidget",docblock:null,modifiers:[],params:[{name:"widgetId",optional:!1,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:{type:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]}}},{name:"blur",docblock:null,modifiers:[],params:[],returns:{type:{name:"void"}}},{name:"getNumHints",docblock:null,modifiers:[],params:[],returns:{type:{name:"number"}}},{name:"scoreInput",docblock:"Grades the item.",modifiers:[],params:[],returns:{type:{name:"KEScore"}},description:"Grades the item."},{name:"getWidgetIds",docblock:`Returns an array of all widget IDs in the order they occur in -the question content.`,modifiers:[],params:[],returns:{type:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}},description:`Returns an array of all widget IDs in the order they occur in -the question content.`},{name:"getSerializedState",docblock:"Get a representation of the current state of the item.",modifiers:[],params:[],returns:{type:{name:"signature",type:"object",raw:`{ - question: any; - hints: any; -}`,signature:{properties:[{key:"question",value:{name:"any",required:!0}},{key:"hints",value:{name:"any",required:!0}}]}}},description:"Get a representation of the current state of the item."},{name:"restoreSerializedState",docblock:null,modifiers:[],params:[{name:"state",optional:!1,type:{name:"signature",type:"object",raw:`{ - question: any; - hints: any; -}`,signature:{properties:[{key:"question",value:{name:"any",required:!0}},{key:"hints",value:{name:"any",required:!0}}]},alias:"SerializedState"}},{name:"callback",optional:!0,type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}}}],returns:null},{name:"showRationalesForCurrentlySelectedChoices",docblock:null,modifiers:[],params:[],returns:null},{name:"deselectIncorrectSelectedChoices",docblock:null,modifiers:[],params:[],returns:null},{name:"setAssetStatus",docblock:null,modifiers:[],params:[{name:"assetKey",optional:!1,type:null},{name:"status",optional:!1,type:null}],returns:null}],displayName:"ServerItemRenderer",props:{apiOptions:{defaultValue:{value:"{}",computed:!1},required:!1},linterContext:{defaultValue:{value:"PerseusLinter.linterContextDefault",computed:!0},required:!1},onRendered:{defaultValue:{value:"(isRendered: boolean) => {}",computed:!1},required:!1}}};ae.__docgenInfo={description:"",methods:[],displayName:"ref"};const ie={type:"content"},L={type:"hint"},se={type:"tags"},_=r=>({type:"array",elementShape:r}),oe=r=>({type:"object",shape:r}),ue=_(L),y={content:ie,hint:L,hints:ue,tags:se,arrayOf:_,shape:oe};class p{constructor(e,n,t){this.content=e,this.hint=n,this.tags=t,this.array=v}setContentMapper(e){return new p(e,this.hint,this.tags)}setHintMapper(e){return new p(this.content,e,this.tags)}setTagsMapper(e){return new p(this.content,this.hint,e)}setArrayMapper(e){return new I(this.content,this.hint,this.tags,e)}mapTree(e,n){return q(e,n,[],this)}}class I{constructor(e,n,t,a){this.content=e,this.hint=n,this.tags=t,this.array=a}setArrayMapper(e){return new I(this.content,this.hint,this.tags,e)}mapTree(e,n){return q(e,n,[],this)}}function v(r){return r}function c(){return new p(v,v,v)}function q(r,e,n,t){if(e.type==="content"){const a=r;return t.content(a,e,n)}if(e.type==="hint"){const a=r;return t.hint(a,e,n)}if(e.type==="tags"){const a=r;return t.tags(a,e,n)}if(e.type==="array"){const a=r;if(!Array.isArray(a))throw new g(`Invalid object of type "${typeof a}" found at path ${[""].concat(n).join(".")}. Expected array.`,m.Internal);const i=e.elementShape,s=a.map((o,d)=>q(o,i,n.concat(d),t));return t.array(s,a,e,n)}if(e.type==="object"){const a=r;if(a&&typeof a!="object")throw new g(`Invalid object of type "${typeof a}" found at path ${[""].concat(n).join(".")}. Expected "object" type.`,m.InvalidInput);const i=e.shape;if(!i)throw new g(`Unexpected shape ${JSON.stringify(e)} at path ${[""].concat(n).join(".")}.`,m.InvalidInput);const s={};return Object.keys(i).forEach(o=>{if(!(o in a))throw new g(`Key "${o}" is missing from shape at path ${[""].concat(n).join(".")}.`,m.InvalidInput);s[o]=q(a[o],i[o],n.concat(o),t)}),s}throw new g(`unexpected shape type ${e.type}`,m.InvalidInput)}function F(r){if(r.type==="content")return{__type:"content",content:"",images:{},widgets:{}};if(r.type==="hint")return{__type:"hint",replace:!1,content:"",images:{},widgets:{}};if(r.type==="tags")return[];if(r.type==="array")return[];if(r.type==="object"){const e=r.shape,n={};return Object.keys(e).forEach(t=>{n[t]=F(e[t])}),n}throw new g(`unexpected shape type ${r.type}`,m.InvalidInput)}function Oe(r){return le(F(r))}function xe(r,e,n){const t=C(r);c().setContentMapper(n).mapTree(t,e)}function We(r,e,n){const t=C(r);c().setHintMapper(n).mapTree(t,e)}function Ie(r){const e=C(r);return x(e)}function x(r){if(Array.isArray(r))return r.length?typeof r[0]=="string"?y.tags:y.arrayOf(x(r[0])):y.arrayOf(y.content);if(typeof r=="object"&&(r.__type==="content"||r.__type==="item"))return y.content;if(typeof r=="object"&&r.__type==="hint")return y.hint;if(typeof r=="object"){const e={};return Object.keys(r).forEach(n=>{e[n]=x(r[n])}),y.shape(e)}throw new g(`unexpected multi-item node ${JSON.stringify(r)}`,m.InvalidInput)}function C(r){return r._multi}function le(r){return{_multi:r}}var V=function(r){return r===Object(r)},U=function(){for(var r={},e=0;e{const{onSerializedStateUpdated:a}=this.props;if(a){const i=this._getSerializedState(this.props.serializedState);a(u(i).set(n,t).freeze())}},this.rendererDataTreeMapper=c().setContentMapper((n,t,a)=>this._makeContentRendererData(n,a)).setHintMapper(n=>this._makeHintRendererData(n)).setTagsMapper(n=>null),this.getRenderersMapper=c().setContentMapper(n=>n.makeRenderer()).setHintMapper(n=>n.makeRenderer()).setArrayMapper((n,t,a)=>this._annotateRendererArray(n,t,a)),this.state=this._tryMakeRendererState(this.props)}UNSAFE_componentWillReceiveProps(e){e.item!==this.props.item&&this.setState(this._tryMakeRendererState(e))}_tryMakeRendererState(e){try{return{rendererDataTree:this._makeRendererDataTree(e.item,e.shape),renderError:null}}catch(n){return Z.error("Error building tree state",m.Internal,{cause:n}),{rendererDataTree:null,renderError:n}}}_getRendererProps(){const{item:e,children:n,shape:t,serializedState:a,onSerializedStateUpdated:i,...s}=this.props;return{...s,strings:this.context.strings}}_makeContentRendererData(e,n){const t={ref:null,makeRenderer:null},a=o=>t.ref=o,i=o=>this._findWidgets(t,o),s=o=>this._handleSerializedStateUpdated(n,o);return t.makeRenderer=()=>l(S,{...this._getRendererProps(),...e,ref:a,findExternalWidgets:i,serializedState:this.props.serializedState?u(this.props.serializedState).get(n):null,onSerializedStateUpdated:s}),t}_makeHintRendererData(e){const n=t=>this._findWidgets({},t);return{hint:e,findExternalWidgets:n,ref:null,makeRenderer:()=>l(O,{...this._getRendererProps(),findExternalWidgets:n,hints:[e]})}}_makeRendererDataTree(e,n){const t=C(e);return this.rendererDataTreeMapper.mapTree(t,n)}_findWidgets(e,n){const t=[];return this._mapRenderers(a=>{e!==a&&a.ref&&t.push(...a.ref.findInternalWidgets(n))}),t}_mapRenderers(e){const{rendererDataTree:n}=this.state;return n?c().setContentMapper(e).setHintMapper(e).mapTree(n,this.props.shape):null}_scoreFromRef(e){if(!e)return null;const[n,t]=e.guessAndScore();let a;return e.getSerializedState&&(a=e.getSerializedState()),h.keScoreFromPerseusScore(t,n,a)}getScores(){return this._mapRenderers(e=>this._scoreFromRef(e.ref))}score(){const e=[],n=[],t=this._mapRenderers(i=>{var s;return i.ref?(i.ref.getSerializedState&&n.push(i.ref.getSerializedState()),e.push(i.ref.score()),(s=i.ref)==null?void 0:s.getUserInput()):null}),a=e.reduce(h.combineScores);return h.keScoreFromPerseusScore(a,t,n)}_getSerializedState(e){return this._mapRenderers((n,t,a)=>n.ref?n.ref.getSerializedState():e?u(e).get(a):null)}restoreSerializedState(e,n){let t=0;const a=()=>{t--,n&&t===0&&n()};this._mapRenderers((i,s,o)=>{var f;if(!i.ref)return;const d=u(e).get(o);d&&(t++,(f=i.ref)==null||f.restoreSerializedState(d,a))})}_annotateRendererArray(e,n,t){if(t.elementShape.type==="hint"){const a=n;e=[...e],e.firstN=i=>l(O,{...this._getRendererProps(),findExternalWidgets:a[0]?a[0].findExternalWidgets:void 0,hints:a.map(s=>s.hint),hintsVisible:i})}return e}_getRenderers(){return this.getRenderersMapper.mapTree(this.state.rendererDataTree,this.props.shape)}render(){return this.state.renderError?l("div",{className:T.css(ge.error),children:this.context.strings.errorRendering({error:String(this.state.renderError)})}):l(z.Provider,{value:this.props.dependencies,children:this.props.children({renderers:this._getRenderers()})})}};P.contextType=N;let W=P;const ge=T.StyleSheet.create({error:{color:"red"}});W.__docgenInfo={description:"",methods:[{name:"_tryMakeRendererState",docblock:"Attempt to build a State that includes a renderer tree corresponding to\nthe item provided in props. On error, return a state with `renderError`\nset instead.",modifiers:[],params:[{name:"props",optional:!1,type:{name:"signature",type:"object",raw:`{ - item: Item; - shape: Shape; - children: (tree: {renderers: RendererTree}) => React.ReactElement; - serializedState?: SerializedStateTree | null | undefined; - onSerializedStateUpdated?: (state: SerializedStateTree) => void; - onInteractWithWidget?: (id: string) => void; - apiOptions?: APIOptions; - reviewMode?: boolean | null | undefined; - - dependencies: PerseusDependenciesV2; -}`,signature:{properties:[{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!0}},{key:"shape",value:{name:"union",raw:`| ContentShape -| HintShape -| TagsShape -| ArrayShape -| ObjectShape`,elements:[{name:"signature",type:"object",raw:`{ - type: "content"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"content"',required:!0}}]}},{name:"signature",type:"object",raw:`{ - type: "hint"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"hint"',required:!0}}]}},{name:"signature",type:"object",raw:`{ - type: "tags"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"tags"',required:!0}}]}},{name:"signature",type:"object",raw:`{ - type: "array"; - /** - * Each element of an ArrayNode has the same shape, which is specified by - * the \`elementShape\` property. - */ - elementShape: Shape; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"array"',required:!0}},{key:"elementShape",value:{name:"Shape",required:!0},description:"Each element of an ArrayNode has the same shape, which is specified by\nthe `elementShape` property."}]}},{name:"signature",type:"object",raw:`{ - type: "object"; - /** - * Each property of an ObjectNode has its own shape, which is specified - * under the corresponding key in the \`shape\` property. - */ - shape: { - [k: string]: Shape; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"object"',required:!0}},{key:"shape",value:{name:"signature",type:"object",raw:`{ - [k: string]: Shape; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Shape",required:!0}}]},required:!0},description:"Each property of an ObjectNode has its own shape, which is specified\nunder the corresponding key in the `shape` property."}]}}],required:!0}},{key:"children",value:{name:"signature",type:"function",raw:"(tree: {renderers: RendererTree}) => React.ReactElement",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{renderers: RendererTree}",signature:{properties:[{key:"renderers",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]}},name:"tree"}],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"serializedState",value:{name:"union",raw:"SerializedStateTree | null | undefined",elements:[{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0},{name:"null"},{name:"undefined"}],required:!1}},{key:"onSerializedStateUpdated",value:{name:"signature",type:"function",raw:"(state: SerializedStateTree) => void",signature:{arguments:[{type:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0},name:"state"}],return:{name:"void"}},required:!1}},{key:"onInteractWithWidget",value:{name:"signature",type:"function",raw:"(id: string) => void",signature:{arguments:[{type:{name:"string"},name:"id"}],return:{name:"void"}},required:!1}},{key:"apiOptions",value:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"any",required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"any",required:!0}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`,required:!1}},{key:"reviewMode",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}},{key:"dependencies",value:{name:"signature",type:"object",raw:`{ - analytics: {onAnalyticsEvent: AnalyticsEventHandlerFn}; -}`,signature:{properties:[{key:"analytics",value:{name:"signature",type:"object",raw:"{onAnalyticsEvent: AnalyticsEventHandlerFn}",signature:{properties:[{key:"onAnalyticsEvent",value:{name:"AnalyticsEventHandlerFn",required:!0}}]},required:!0}}]},required:!0}}]},alias:"Props"}}],returns:{type:{name:"signature",type:"object",raw:`{ - // We cache functions to generate renderers and refs in \`rendererDataTree\`, - // and change them every time content changes. This isn't just a performance - // optimization; see \`_makeContentRendererData\` for more discussion. - rendererDataTree: RendererDataTree | null | undefined; - // But, if traversing the tree fails, we store the Error in \`renderError\`. - renderError: Error | null | undefined; -}`,signature:{properties:[{key:"rendererDataTree",value:{name:"union",raw:"RendererDataTree | null | undefined",elements:[{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - makeRenderer: () => ContentRendererElement; - ref: Renderer | null | undefined; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - makeRenderer: () => HintRendererElement; - findExternalWidgets: FindWidgetsFunc | null | undefined; - ref: null; - hint: Hint; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( - criterion: FilterCriterion, -) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - focus: () => - | { - id: string; - path: FocusPath; - } - | boolean; - getDOMNodeForPath: (path: FocusPath) => Element | Text | null; - deselectIncorrectSelectedChoices?: () => void; - restoreSerializedState: (props: any, callback: () => void) => any; - // TODO(jeremy): I think this return value is wrong. The widget - // getSerializedState should just return _its_ serialized state, not a - // key/value list of all widget states (i think!) - // Returns widget state that can be passed back to \`restoreSerializedState\` - // to put the widget back into exactly the same state. If the widget does - // not implement this function, the renderer simply returns all of the - // widget's props. - getSerializedState?: () => SerializedState; // SUSPECT, - getGrammarTypeForPath: (path: FocusPath) => string; - blurInputPath?: (path: FocusPath) => null; - focusInputPath?: (path: FocusPath) => null; - getInputPaths?: () => ReadonlyArray; - setInputValue?: ( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, - ) => void; - getUserInput?: () => UserInput | null | undefined; - simpleValidate?: ( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, - ) => PerseusScore; - showRationalesForCurrentlySelectedChoices?: (options?: any) => void; - examples?: () => ReadonlyArray; -}`,signature:{properties:[{key:"focus",value:{name:"signature",type:"function",raw:`() => -| { - id: string; - path: FocusPath; - } -| boolean`,signature:{arguments:[],return:{name:"union",raw:`| { - id: string; - path: FocusPath; - } -| boolean`,elements:[{name:"signature",type:"object",raw:`{ - id: string; - path: FocusPath; -}`,signature:{properties:[{key:"id",value:{name:"string",required:!0}},{key:"path",value:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"boolean"}]}},required:!0}},{key:"getDOMNodeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => Element | Text | null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"union",raw:"Element | Text | null",elements:[{name:"Element"},{name:"Text"},{name:"null"}]}},required:!0}},{key:"deselectIncorrectSelectedChoices",value:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}},required:!1}},{key:"restoreSerializedState",value:{name:"signature",type:"function",raw:"(props: any, callback: () => void) => any",signature:{arguments:[{type:{name:"any"},name:"props"},{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"callback"}],return:{name:"any"}},required:!0}},{key:"getSerializedState",value:{name:"signature",type:"function",raw:"() => SerializedState",signature:{arguments:[],return:{name:"signature",type:"object",raw:`{ - [id: string]: any; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}}},required:!1}},{key:"getGrammarTypeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => string",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"string"}},required:!0}},{key:"blurInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"focusInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"getInputPaths",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}],raw:"ReadonlyArray"}},required:!1}},{key:"setInputValue",value:{name:"signature",type:"function",raw:`( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, -) => void`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"},{type:{name:"string"},name:"newValue"},{type:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},name:"focus"}],return:{name:"void"}},required:!1}},{key:"getUserInput",value:{name:"signature",type:"function",raw:"() => UserInput | null | undefined",signature:{arguments:[],return:{name:"union",raw:"UserInput | null | undefined",elements:[{name:"union",raw:`| PerseusCategorizerUserInput -| PerseusCSProgramUserInput -| PerseusDropdownUserInput -| PerseusExpressionUserInput -| PerseusGrapherUserInput -| PerseusIFrameUserInput -| PerseusInputNumberUserInput -| PerseusInteractiveGraphUserInput -| PerseusLabelImageUserInput -| PerseusMatcherUserInput -| PerseusMatrixUserInput -| PerseusMoleculeUserInput -| PerseusNumberLineUserInput -| PerseusNumericInputUserInput -| PerseusOrdererUserInput -| PerseusPlotterUserInput -| PerseusRadioUserInput -| PerseusSorterUserInput -| PerseusTableUserInput -| EmptyUserInput`,elements:[{name:"signature",type:"object",raw:`{ - values: ReadonlyArray; -}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - value: number; -}`,signature:{properties:[{key:"value",value:{name:"number",required:!0}}]}},{name:"string"},{name:"signature",type:"object",raw:`{ - type: string; - asymptote: ReadonlyArray; - coords: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"asymptote",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}},{key:"coords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}]},{name:"signature",type:"object",raw:`{ - markers: ReadonlyArray; -}`,signature:{properties:[{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - left: ReadonlyArray; - right: ReadonlyArray; -}`,signature:{properties:[{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - answers: ReadonlyArray>; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"signature",type:"object",raw:`{ - isTickCrtl?: boolean; - numLinePosition: number; - rel: Relationship | "eq"; - numDivisions: number; - divisionRange: ReadonlyArray; -}`,signature:{properties:[{key:"isTickCrtl",value:{name:"boolean",required:!1}},{key:"numLinePosition",value:{name:"number",required:!0}},{key:"rel",value:{name:"union",raw:'Relationship | "eq"',elements:[{name:"union",raw:'"lt" | "gt" | "le" | "ge"',elements:[{name:"literal",value:'"lt"'},{name:"literal",value:'"gt"'},{name:"literal",value:'"le"'},{name:"literal",value:'"ge"'}]},{name:"literal",value:'"eq"'}],required:!0}},{key:"numDivisions",value:{name:"number",required:!0}},{key:"divisionRange",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"signature",type:"object",raw:`{ - current: ReadonlyArray; -}`,signature:{properties:[{key:"current",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},{name:"signature",type:"object",raw:`{ - countChoices?: boolean; - choicesSelected: ReadonlyArray; - numCorrect?: number; - noneOfTheAboveIndex?: number | null | undefined; - noneOfTheAboveSelected?: boolean; -}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]}},{name:"signature",type:"object",raw:`{ - options: ReadonlyArray; - changed: boolean; -}`,signature:{properties:[{key:"options",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"changed",value:{name:"boolean",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"Empty"}]},{name:"null"},{name:"undefined"}]}},required:!1}},{key:"simpleValidate",value:{name:"signature",type:"function",raw:`( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, -) => PerseusScore`,signature:{arguments:[{type:{name:"any"},name:"options"},{type:{name:"signature",type:"function",raw:`( - widgetId: any, - value: string, - message?: string | null | undefined, -) => unknown | null | undefined`,signature:{arguments:[{type:{name:"any"},name:"widgetId"},{type:{name:"string"},name:"value"},{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},name:"message"}],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"onOutputError"}],return:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}},required:!1}},{key:"showRationalesForCurrentlySelectedChoices",value:{name:"signature",type:"function",raw:"(options?: any) => void",signature:{arguments:[{type:{name:"any"},name:"options"}],return:{name:"void"}},required:!1}},{key:"examples",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}},required:!1}}]}},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]},{name:"null"},{name:"undefined"}],required:!0}},{key:"renderError",value:{name:"union",raw:"Error | null | undefined",elements:[{name:"Error"},{name:"null"},{name:"undefined"}],required:!0}}]}}},description:"Attempt to build a State that includes a renderer tree corresponding to\nthe item provided in props. On error, return a state with `renderError`\nset instead."},{name:"_handleSerializedStateUpdated",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:null},{name:"newState",optional:!1,type:null}],returns:null},{name:"_getRendererProps",docblock:`Props that aren't directly used by the MultiRenderer are delegated to -the underlying Renderers.`,modifiers:[],params:[],returns:{type:{name:"PropsFor",elements:[{name:"Renderer"}],raw:"PropsFor"}},description:`Props that aren't directly used by the MultiRenderer are delegated to -the underlying Renderers.`},{name:"_makeContentRendererData",docblock:"Construct a Renderer and a ref placeholder for the given ContentNode.",modifiers:[],params:[{name:"content",optional:!1,type:{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]},alias:"ContentNode"}},{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"union",raw:"string | number",elements:[{name:"string"},{name:"number"}]}],raw:"ReadonlyArray",alias:"Path"}}],returns:{type:{name:"signature",type:"object",raw:`{ - makeRenderer: () => ContentRendererElement; - ref: Renderer | null | undefined; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}}},description:"Construct a Renderer and a ref placeholder for the given ContentNode."},{name:"_makeHintRendererData",docblock:`Construct a Renderer for the given HintNode, and keep track of the hint -itself for future use, too.`,modifiers:[],params:[{name:"hint",optional:!1,type:{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]},alias:"HintNode"}}],returns:{type:{name:"signature",type:"object",raw:`{ - makeRenderer: () => HintRendererElement; - findExternalWidgets: FindWidgetsFunc | null | undefined; - ref: null; - hint: Hint; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( - criterion: FilterCriterion, -) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - focus: () => - | { - id: string; - path: FocusPath; - } - | boolean; - getDOMNodeForPath: (path: FocusPath) => Element | Text | null; - deselectIncorrectSelectedChoices?: () => void; - restoreSerializedState: (props: any, callback: () => void) => any; - // TODO(jeremy): I think this return value is wrong. The widget - // getSerializedState should just return _its_ serialized state, not a - // key/value list of all widget states (i think!) - // Returns widget state that can be passed back to \`restoreSerializedState\` - // to put the widget back into exactly the same state. If the widget does - // not implement this function, the renderer simply returns all of the - // widget's props. - getSerializedState?: () => SerializedState; // SUSPECT, - getGrammarTypeForPath: (path: FocusPath) => string; - blurInputPath?: (path: FocusPath) => null; - focusInputPath?: (path: FocusPath) => null; - getInputPaths?: () => ReadonlyArray; - setInputValue?: ( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, - ) => void; - getUserInput?: () => UserInput | null | undefined; - simpleValidate?: ( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, - ) => PerseusScore; - showRationalesForCurrentlySelectedChoices?: (options?: any) => void; - examples?: () => ReadonlyArray; -}`,signature:{properties:[{key:"focus",value:{name:"signature",type:"function",raw:`() => -| { - id: string; - path: FocusPath; - } -| boolean`,signature:{arguments:[],return:{name:"union",raw:`| { - id: string; - path: FocusPath; - } -| boolean`,elements:[{name:"signature",type:"object",raw:`{ - id: string; - path: FocusPath; -}`,signature:{properties:[{key:"id",value:{name:"string",required:!0}},{key:"path",value:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"boolean"}]}},required:!0}},{key:"getDOMNodeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => Element | Text | null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"union",raw:"Element | Text | null",elements:[{name:"Element"},{name:"Text"},{name:"null"}]}},required:!0}},{key:"deselectIncorrectSelectedChoices",value:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}},required:!1}},{key:"restoreSerializedState",value:{name:"signature",type:"function",raw:"(props: any, callback: () => void) => any",signature:{arguments:[{type:{name:"any"},name:"props"},{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"callback"}],return:{name:"any"}},required:!0}},{key:"getSerializedState",value:{name:"signature",type:"function",raw:"() => SerializedState",signature:{arguments:[],return:{name:"signature",type:"object",raw:`{ - [id: string]: any; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}}},required:!1}},{key:"getGrammarTypeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => string",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"string"}},required:!0}},{key:"blurInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"focusInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"getInputPaths",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}],raw:"ReadonlyArray"}},required:!1}},{key:"setInputValue",value:{name:"signature",type:"function",raw:`( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, -) => void`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"},{type:{name:"string"},name:"newValue"},{type:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},name:"focus"}],return:{name:"void"}},required:!1}},{key:"getUserInput",value:{name:"signature",type:"function",raw:"() => UserInput | null | undefined",signature:{arguments:[],return:{name:"union",raw:"UserInput | null | undefined",elements:[{name:"union",raw:`| PerseusCategorizerUserInput -| PerseusCSProgramUserInput -| PerseusDropdownUserInput -| PerseusExpressionUserInput -| PerseusGrapherUserInput -| PerseusIFrameUserInput -| PerseusInputNumberUserInput -| PerseusInteractiveGraphUserInput -| PerseusLabelImageUserInput -| PerseusMatcherUserInput -| PerseusMatrixUserInput -| PerseusMoleculeUserInput -| PerseusNumberLineUserInput -| PerseusNumericInputUserInput -| PerseusOrdererUserInput -| PerseusPlotterUserInput -| PerseusRadioUserInput -| PerseusSorterUserInput -| PerseusTableUserInput -| EmptyUserInput`,elements:[{name:"signature",type:"object",raw:`{ - values: ReadonlyArray; -}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - value: number; -}`,signature:{properties:[{key:"value",value:{name:"number",required:!0}}]}},{name:"string"},{name:"signature",type:"object",raw:`{ - type: string; - asymptote: ReadonlyArray; - coords: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"asymptote",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}},{key:"coords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}]},{name:"signature",type:"object",raw:`{ - markers: ReadonlyArray; -}`,signature:{properties:[{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - left: ReadonlyArray; - right: ReadonlyArray; -}`,signature:{properties:[{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - answers: ReadonlyArray>; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"signature",type:"object",raw:`{ - isTickCrtl?: boolean; - numLinePosition: number; - rel: Relationship | "eq"; - numDivisions: number; - divisionRange: ReadonlyArray; -}`,signature:{properties:[{key:"isTickCrtl",value:{name:"boolean",required:!1}},{key:"numLinePosition",value:{name:"number",required:!0}},{key:"rel",value:{name:"union",raw:'Relationship | "eq"',elements:[{name:"union",raw:'"lt" | "gt" | "le" | "ge"',elements:[{name:"literal",value:'"lt"'},{name:"literal",value:'"gt"'},{name:"literal",value:'"le"'},{name:"literal",value:'"ge"'}]},{name:"literal",value:'"eq"'}],required:!0}},{key:"numDivisions",value:{name:"number",required:!0}},{key:"divisionRange",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"signature",type:"object",raw:`{ - current: ReadonlyArray; -}`,signature:{properties:[{key:"current",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},{name:"signature",type:"object",raw:`{ - countChoices?: boolean; - choicesSelected: ReadonlyArray; - numCorrect?: number; - noneOfTheAboveIndex?: number | null | undefined; - noneOfTheAboveSelected?: boolean; -}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]}},{name:"signature",type:"object",raw:`{ - options: ReadonlyArray; - changed: boolean; -}`,signature:{properties:[{key:"options",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"changed",value:{name:"boolean",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"Empty"}]},{name:"null"},{name:"undefined"}]}},required:!1}},{key:"simpleValidate",value:{name:"signature",type:"function",raw:`( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, -) => PerseusScore`,signature:{arguments:[{type:{name:"any"},name:"options"},{type:{name:"signature",type:"function",raw:`( - widgetId: any, - value: string, - message?: string | null | undefined, -) => unknown | null | undefined`,signature:{arguments:[{type:{name:"any"},name:"widgetId"},{type:{name:"string"},name:"value"},{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},name:"message"}],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"onOutputError"}],return:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}},required:!1}},{key:"showRationalesForCurrentlySelectedChoices",value:{name:"signature",type:"function",raw:"(options?: any) => void",signature:{arguments:[{type:{name:"any"},name:"options"}],return:{name:"void"}},required:!1}},{key:"examples",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}},required:!1}}]}},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}}},description:`Construct a Renderer for the given HintNode, and keep track of the hint -itself for future use, too.`},{name:"_makeRendererDataTree",docblock:"Construct a tree of interconnected RendererDatas, corresponding to the\ngiven item. Called in `_tryMakeRendererState`, in order to store this\ntree in the component state.",modifiers:[],params:[{name:"item",optional:!1,type:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},alias:"Item"}},{name:"shape",optional:!1,type:{name:"union",raw:`| ContentShape -| HintShape -| TagsShape -| ArrayShape -| ObjectShape`,elements:[{name:"signature",type:"object",raw:`{ - type: "content"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"content"',required:!0}}]}},{name:"signature",type:"object",raw:`{ - type: "hint"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"hint"',required:!0}}]}},{name:"signature",type:"object",raw:`{ - type: "tags"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"tags"',required:!0}}]}},{name:"signature",type:"object",raw:`{ - type: "array"; - /** - * Each element of an ArrayNode has the same shape, which is specified by - * the \`elementShape\` property. - */ - elementShape: Shape; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"array"',required:!0}},{key:"elementShape",value:{name:"Shape",required:!0},description:"Each element of an ArrayNode has the same shape, which is specified by\nthe `elementShape` property."}]}},{name:"signature",type:"object",raw:`{ - type: "object"; - /** - * Each property of an ObjectNode has its own shape, which is specified - * under the corresponding key in the \`shape\` property. - */ - shape: { - [k: string]: Shape; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"object"',required:!0}},{key:"shape",value:{name:"signature",type:"object",raw:`{ - [k: string]: Shape; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Shape",required:!0}}]},required:!0},description:"Each property of an ObjectNode has its own shape, which is specified\nunder the corresponding key in the `shape` property."}]}}],alias:"Shape"}}],returns:{type:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - makeRenderer: () => ContentRendererElement; - ref: Renderer | null | undefined; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - makeRenderer: () => HintRendererElement; - findExternalWidgets: FindWidgetsFunc | null | undefined; - ref: null; - hint: Hint; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( - criterion: FilterCriterion, -) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - focus: () => - | { - id: string; - path: FocusPath; - } - | boolean; - getDOMNodeForPath: (path: FocusPath) => Element | Text | null; - deselectIncorrectSelectedChoices?: () => void; - restoreSerializedState: (props: any, callback: () => void) => any; - // TODO(jeremy): I think this return value is wrong. The widget - // getSerializedState should just return _its_ serialized state, not a - // key/value list of all widget states (i think!) - // Returns widget state that can be passed back to \`restoreSerializedState\` - // to put the widget back into exactly the same state. If the widget does - // not implement this function, the renderer simply returns all of the - // widget's props. - getSerializedState?: () => SerializedState; // SUSPECT, - getGrammarTypeForPath: (path: FocusPath) => string; - blurInputPath?: (path: FocusPath) => null; - focusInputPath?: (path: FocusPath) => null; - getInputPaths?: () => ReadonlyArray; - setInputValue?: ( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, - ) => void; - getUserInput?: () => UserInput | null | undefined; - simpleValidate?: ( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, - ) => PerseusScore; - showRationalesForCurrentlySelectedChoices?: (options?: any) => void; - examples?: () => ReadonlyArray; -}`,signature:{properties:[{key:"focus",value:{name:"signature",type:"function",raw:`() => -| { - id: string; - path: FocusPath; - } -| boolean`,signature:{arguments:[],return:{name:"union",raw:`| { - id: string; - path: FocusPath; - } -| boolean`,elements:[{name:"signature",type:"object",raw:`{ - id: string; - path: FocusPath; -}`,signature:{properties:[{key:"id",value:{name:"string",required:!0}},{key:"path",value:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"boolean"}]}},required:!0}},{key:"getDOMNodeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => Element | Text | null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"union",raw:"Element | Text | null",elements:[{name:"Element"},{name:"Text"},{name:"null"}]}},required:!0}},{key:"deselectIncorrectSelectedChoices",value:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}},required:!1}},{key:"restoreSerializedState",value:{name:"signature",type:"function",raw:"(props: any, callback: () => void) => any",signature:{arguments:[{type:{name:"any"},name:"props"},{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"callback"}],return:{name:"any"}},required:!0}},{key:"getSerializedState",value:{name:"signature",type:"function",raw:"() => SerializedState",signature:{arguments:[],return:{name:"signature",type:"object",raw:`{ - [id: string]: any; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}}},required:!1}},{key:"getGrammarTypeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => string",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"string"}},required:!0}},{key:"blurInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"focusInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"getInputPaths",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}],raw:"ReadonlyArray"}},required:!1}},{key:"setInputValue",value:{name:"signature",type:"function",raw:`( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, -) => void`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"},{type:{name:"string"},name:"newValue"},{type:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},name:"focus"}],return:{name:"void"}},required:!1}},{key:"getUserInput",value:{name:"signature",type:"function",raw:"() => UserInput | null | undefined",signature:{arguments:[],return:{name:"union",raw:"UserInput | null | undefined",elements:[{name:"union",raw:`| PerseusCategorizerUserInput -| PerseusCSProgramUserInput -| PerseusDropdownUserInput -| PerseusExpressionUserInput -| PerseusGrapherUserInput -| PerseusIFrameUserInput -| PerseusInputNumberUserInput -| PerseusInteractiveGraphUserInput -| PerseusLabelImageUserInput -| PerseusMatcherUserInput -| PerseusMatrixUserInput -| PerseusMoleculeUserInput -| PerseusNumberLineUserInput -| PerseusNumericInputUserInput -| PerseusOrdererUserInput -| PerseusPlotterUserInput -| PerseusRadioUserInput -| PerseusSorterUserInput -| PerseusTableUserInput -| EmptyUserInput`,elements:[{name:"signature",type:"object",raw:`{ - values: ReadonlyArray; -}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - value: number; -}`,signature:{properties:[{key:"value",value:{name:"number",required:!0}}]}},{name:"string"},{name:"signature",type:"object",raw:`{ - type: string; - asymptote: ReadonlyArray; - coords: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"asymptote",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}},{key:"coords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}]},{name:"signature",type:"object",raw:`{ - markers: ReadonlyArray; -}`,signature:{properties:[{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - left: ReadonlyArray; - right: ReadonlyArray; -}`,signature:{properties:[{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - answers: ReadonlyArray>; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"signature",type:"object",raw:`{ - isTickCrtl?: boolean; - numLinePosition: number; - rel: Relationship | "eq"; - numDivisions: number; - divisionRange: ReadonlyArray; -}`,signature:{properties:[{key:"isTickCrtl",value:{name:"boolean",required:!1}},{key:"numLinePosition",value:{name:"number",required:!0}},{key:"rel",value:{name:"union",raw:'Relationship | "eq"',elements:[{name:"union",raw:'"lt" | "gt" | "le" | "ge"',elements:[{name:"literal",value:'"lt"'},{name:"literal",value:'"gt"'},{name:"literal",value:'"le"'},{name:"literal",value:'"ge"'}]},{name:"literal",value:'"eq"'}],required:!0}},{key:"numDivisions",value:{name:"number",required:!0}},{key:"divisionRange",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"signature",type:"object",raw:`{ - current: ReadonlyArray; -}`,signature:{properties:[{key:"current",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},{name:"signature",type:"object",raw:`{ - countChoices?: boolean; - choicesSelected: ReadonlyArray; - numCorrect?: number; - noneOfTheAboveIndex?: number | null | undefined; - noneOfTheAboveSelected?: boolean; -}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]}},{name:"signature",type:"object",raw:`{ - options: ReadonlyArray; - changed: boolean; -}`,signature:{properties:[{key:"options",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"changed",value:{name:"boolean",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"Empty"}]},{name:"null"},{name:"undefined"}]}},required:!1}},{key:"simpleValidate",value:{name:"signature",type:"function",raw:`( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, -) => PerseusScore`,signature:{arguments:[{type:{name:"any"},name:"options"},{type:{name:"signature",type:"function",raw:`( - widgetId: any, - value: string, - message?: string | null | undefined, -) => unknown | null | undefined`,signature:{arguments:[{type:{name:"any"},name:"widgetId"},{type:{name:"string"},name:"value"},{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},name:"message"}],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"onOutputError"}],return:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}},required:!1}},{key:"showRationalesForCurrentlySelectedChoices",value:{name:"signature",type:"function",raw:"(options?: any) => void",signature:{arguments:[{type:{name:"any"},name:"options"}],return:{name:"void"}},required:!1}},{key:"examples",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}},required:!1}}]}},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]}},description:"Construct a tree of interconnected RendererDatas, corresponding to the\ngiven item. Called in `_tryMakeRendererState`, in order to store this\ntree in the component state."},{name:"_findWidgets",docblock:`Return all widgets that meet the given criterion, from all Renderers -except the Renderer that triggered this call. - -This function is provided to each Renderer's \`findExternalWidgets\` prop, -which enables widgets in different Renderers to discover each other and -communicate.`,modifiers:[],params:[{name:"callingData",optional:!1,type:{name:"union",raw:"ContentRendererData | HintRendererData",elements:[{name:"signature",type:"object",raw:`{ - makeRenderer: () => ContentRendererElement; - ref: Renderer | null | undefined; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - makeRenderer: () => HintRendererElement; - findExternalWidgets: FindWidgetsFunc | null | undefined; - ref: null; - hint: Hint; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( - criterion: FilterCriterion, -) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - focus: () => - | { - id: string; - path: FocusPath; - } - | boolean; - getDOMNodeForPath: (path: FocusPath) => Element | Text | null; - deselectIncorrectSelectedChoices?: () => void; - restoreSerializedState: (props: any, callback: () => void) => any; - // TODO(jeremy): I think this return value is wrong. The widget - // getSerializedState should just return _its_ serialized state, not a - // key/value list of all widget states (i think!) - // Returns widget state that can be passed back to \`restoreSerializedState\` - // to put the widget back into exactly the same state. If the widget does - // not implement this function, the renderer simply returns all of the - // widget's props. - getSerializedState?: () => SerializedState; // SUSPECT, - getGrammarTypeForPath: (path: FocusPath) => string; - blurInputPath?: (path: FocusPath) => null; - focusInputPath?: (path: FocusPath) => null; - getInputPaths?: () => ReadonlyArray; - setInputValue?: ( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, - ) => void; - getUserInput?: () => UserInput | null | undefined; - simpleValidate?: ( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, - ) => PerseusScore; - showRationalesForCurrentlySelectedChoices?: (options?: any) => void; - examples?: () => ReadonlyArray; -}`,signature:{properties:[{key:"focus",value:{name:"signature",type:"function",raw:`() => -| { - id: string; - path: FocusPath; - } -| boolean`,signature:{arguments:[],return:{name:"union",raw:`| { - id: string; - path: FocusPath; - } -| boolean`,elements:[{name:"signature",type:"object",raw:`{ - id: string; - path: FocusPath; -}`,signature:{properties:[{key:"id",value:{name:"string",required:!0}},{key:"path",value:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"boolean"}]}},required:!0}},{key:"getDOMNodeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => Element | Text | null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"union",raw:"Element | Text | null",elements:[{name:"Element"},{name:"Text"},{name:"null"}]}},required:!0}},{key:"deselectIncorrectSelectedChoices",value:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}},required:!1}},{key:"restoreSerializedState",value:{name:"signature",type:"function",raw:"(props: any, callback: () => void) => any",signature:{arguments:[{type:{name:"any"},name:"props"},{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"callback"}],return:{name:"any"}},required:!0}},{key:"getSerializedState",value:{name:"signature",type:"function",raw:"() => SerializedState",signature:{arguments:[],return:{name:"signature",type:"object",raw:`{ - [id: string]: any; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}}},required:!1}},{key:"getGrammarTypeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => string",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"string"}},required:!0}},{key:"blurInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"focusInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"getInputPaths",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}],raw:"ReadonlyArray"}},required:!1}},{key:"setInputValue",value:{name:"signature",type:"function",raw:`( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, -) => void`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"},{type:{name:"string"},name:"newValue"},{type:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},name:"focus"}],return:{name:"void"}},required:!1}},{key:"getUserInput",value:{name:"signature",type:"function",raw:"() => UserInput | null | undefined",signature:{arguments:[],return:{name:"union",raw:"UserInput | null | undefined",elements:[{name:"union",raw:`| PerseusCategorizerUserInput -| PerseusCSProgramUserInput -| PerseusDropdownUserInput -| PerseusExpressionUserInput -| PerseusGrapherUserInput -| PerseusIFrameUserInput -| PerseusInputNumberUserInput -| PerseusInteractiveGraphUserInput -| PerseusLabelImageUserInput -| PerseusMatcherUserInput -| PerseusMatrixUserInput -| PerseusMoleculeUserInput -| PerseusNumberLineUserInput -| PerseusNumericInputUserInput -| PerseusOrdererUserInput -| PerseusPlotterUserInput -| PerseusRadioUserInput -| PerseusSorterUserInput -| PerseusTableUserInput -| EmptyUserInput`,elements:[{name:"signature",type:"object",raw:`{ - values: ReadonlyArray; -}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - value: number; -}`,signature:{properties:[{key:"value",value:{name:"number",required:!0}}]}},{name:"string"},{name:"signature",type:"object",raw:`{ - type: string; - asymptote: ReadonlyArray; - coords: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"asymptote",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}},{key:"coords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}]},{name:"signature",type:"object",raw:`{ - markers: ReadonlyArray; -}`,signature:{properties:[{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - left: ReadonlyArray; - right: ReadonlyArray; -}`,signature:{properties:[{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - answers: ReadonlyArray>; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"signature",type:"object",raw:`{ - isTickCrtl?: boolean; - numLinePosition: number; - rel: Relationship | "eq"; - numDivisions: number; - divisionRange: ReadonlyArray; -}`,signature:{properties:[{key:"isTickCrtl",value:{name:"boolean",required:!1}},{key:"numLinePosition",value:{name:"number",required:!0}},{key:"rel",value:{name:"union",raw:'Relationship | "eq"',elements:[{name:"union",raw:'"lt" | "gt" | "le" | "ge"',elements:[{name:"literal",value:'"lt"'},{name:"literal",value:'"gt"'},{name:"literal",value:'"le"'},{name:"literal",value:'"ge"'}]},{name:"literal",value:'"eq"'}],required:!0}},{key:"numDivisions",value:{name:"number",required:!0}},{key:"divisionRange",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"signature",type:"object",raw:`{ - current: ReadonlyArray; -}`,signature:{properties:[{key:"current",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},{name:"signature",type:"object",raw:`{ - countChoices?: boolean; - choicesSelected: ReadonlyArray; - numCorrect?: number; - noneOfTheAboveIndex?: number | null | undefined; - noneOfTheAboveSelected?: boolean; -}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]}},{name:"signature",type:"object",raw:`{ - options: ReadonlyArray; - changed: boolean; -}`,signature:{properties:[{key:"options",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"changed",value:{name:"boolean",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"Empty"}]},{name:"null"},{name:"undefined"}]}},required:!1}},{key:"simpleValidate",value:{name:"signature",type:"function",raw:`( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, -) => PerseusScore`,signature:{arguments:[{type:{name:"any"},name:"options"},{type:{name:"signature",type:"function",raw:`( - widgetId: any, - value: string, - message?: string | null | undefined, -) => unknown | null | undefined`,signature:{arguments:[{type:{name:"any"},name:"widgetId"},{type:{name:"string"},name:"value"},{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},name:"message"}],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"onOutputError"}],return:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}},required:!1}},{key:"showRationalesForCurrentlySelectedChoices",value:{name:"signature",type:"function",raw:"(options?: any) => void",signature:{arguments:[{type:{name:"any"},name:"options"}],return:{name:"void"}},required:!1}},{key:"examples",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}},required:!1}}]}},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}}],alias:"RendererData"}},{name:"filterCriterion",optional:!1,type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}],alias:"FilterCriterion"}}],returns:{type:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - focus: () => - | { - id: string; - path: FocusPath; - } - | boolean; - getDOMNodeForPath: (path: FocusPath) => Element | Text | null; - deselectIncorrectSelectedChoices?: () => void; - restoreSerializedState: (props: any, callback: () => void) => any; - // TODO(jeremy): I think this return value is wrong. The widget - // getSerializedState should just return _its_ serialized state, not a - // key/value list of all widget states (i think!) - // Returns widget state that can be passed back to \`restoreSerializedState\` - // to put the widget back into exactly the same state. If the widget does - // not implement this function, the renderer simply returns all of the - // widget's props. - getSerializedState?: () => SerializedState; // SUSPECT, - getGrammarTypeForPath: (path: FocusPath) => string; - blurInputPath?: (path: FocusPath) => null; - focusInputPath?: (path: FocusPath) => null; - getInputPaths?: () => ReadonlyArray; - setInputValue?: ( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, - ) => void; - getUserInput?: () => UserInput | null | undefined; - simpleValidate?: ( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, - ) => PerseusScore; - showRationalesForCurrentlySelectedChoices?: (options?: any) => void; - examples?: () => ReadonlyArray; -}`,signature:{properties:[{key:"focus",value:{name:"signature",type:"function",raw:`() => -| { - id: string; - path: FocusPath; - } -| boolean`,signature:{arguments:[],return:{name:"union",raw:`| { - id: string; - path: FocusPath; - } -| boolean`,elements:[{name:"signature",type:"object",raw:`{ - id: string; - path: FocusPath; -}`,signature:{properties:[{key:"id",value:{name:"string",required:!0}},{key:"path",value:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"boolean"}]}},required:!0}},{key:"getDOMNodeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => Element | Text | null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"union",raw:"Element | Text | null",elements:[{name:"Element"},{name:"Text"},{name:"null"}]}},required:!0}},{key:"deselectIncorrectSelectedChoices",value:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}},required:!1}},{key:"restoreSerializedState",value:{name:"signature",type:"function",raw:"(props: any, callback: () => void) => any",signature:{arguments:[{type:{name:"any"},name:"props"},{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"callback"}],return:{name:"any"}},required:!0}},{key:"getSerializedState",value:{name:"signature",type:"function",raw:"() => SerializedState",signature:{arguments:[],return:{name:"signature",type:"object",raw:`{ - [id: string]: any; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}}},required:!1}},{key:"getGrammarTypeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => string",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"string"}},required:!0}},{key:"blurInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"focusInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"getInputPaths",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}],raw:"ReadonlyArray"}},required:!1}},{key:"setInputValue",value:{name:"signature",type:"function",raw:`( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, -) => void`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"},{type:{name:"string"},name:"newValue"},{type:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},name:"focus"}],return:{name:"void"}},required:!1}},{key:"getUserInput",value:{name:"signature",type:"function",raw:"() => UserInput | null | undefined",signature:{arguments:[],return:{name:"union",raw:"UserInput | null | undefined",elements:[{name:"union",raw:`| PerseusCategorizerUserInput -| PerseusCSProgramUserInput -| PerseusDropdownUserInput -| PerseusExpressionUserInput -| PerseusGrapherUserInput -| PerseusIFrameUserInput -| PerseusInputNumberUserInput -| PerseusInteractiveGraphUserInput -| PerseusLabelImageUserInput -| PerseusMatcherUserInput -| PerseusMatrixUserInput -| PerseusMoleculeUserInput -| PerseusNumberLineUserInput -| PerseusNumericInputUserInput -| PerseusOrdererUserInput -| PerseusPlotterUserInput -| PerseusRadioUserInput -| PerseusSorterUserInput -| PerseusTableUserInput -| EmptyUserInput`,elements:[{name:"signature",type:"object",raw:`{ - values: ReadonlyArray; -}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - value: number; -}`,signature:{properties:[{key:"value",value:{name:"number",required:!0}}]}},{name:"string"},{name:"signature",type:"object",raw:`{ - type: string; - asymptote: ReadonlyArray; - coords: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"asymptote",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}},{key:"coords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}]},{name:"signature",type:"object",raw:`{ - markers: ReadonlyArray; -}`,signature:{properties:[{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - left: ReadonlyArray; - right: ReadonlyArray; -}`,signature:{properties:[{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - answers: ReadonlyArray>; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"signature",type:"object",raw:`{ - isTickCrtl?: boolean; - numLinePosition: number; - rel: Relationship | "eq"; - numDivisions: number; - divisionRange: ReadonlyArray; -}`,signature:{properties:[{key:"isTickCrtl",value:{name:"boolean",required:!1}},{key:"numLinePosition",value:{name:"number",required:!0}},{key:"rel",value:{name:"union",raw:'Relationship | "eq"',elements:[{name:"union",raw:'"lt" | "gt" | "le" | "ge"',elements:[{name:"literal",value:'"lt"'},{name:"literal",value:'"gt"'},{name:"literal",value:'"le"'},{name:"literal",value:'"ge"'}]},{name:"literal",value:'"eq"'}],required:!0}},{key:"numDivisions",value:{name:"number",required:!0}},{key:"divisionRange",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"signature",type:"object",raw:`{ - current: ReadonlyArray; -}`,signature:{properties:[{key:"current",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},{name:"signature",type:"object",raw:`{ - countChoices?: boolean; - choicesSelected: ReadonlyArray; - numCorrect?: number; - noneOfTheAboveIndex?: number | null | undefined; - noneOfTheAboveSelected?: boolean; -}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]}},{name:"signature",type:"object",raw:`{ - options: ReadonlyArray; - changed: boolean; -}`,signature:{properties:[{key:"options",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"changed",value:{name:"boolean",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"Empty"}]},{name:"null"},{name:"undefined"}]}},required:!1}},{key:"simpleValidate",value:{name:"signature",type:"function",raw:`( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, -) => PerseusScore`,signature:{arguments:[{type:{name:"any"},name:"options"},{type:{name:"signature",type:"function",raw:`( - widgetId: any, - value: string, - message?: string | null | undefined, -) => unknown | null | undefined`,signature:{arguments:[{type:{name:"any"},name:"widgetId"},{type:{name:"string"},name:"value"},{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},name:"message"}],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"onOutputError"}],return:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}},required:!1}},{key:"showRationalesForCurrentlySelectedChoices",value:{name:"signature",type:"function",raw:"(options?: any) => void",signature:{arguments:[{type:{name:"any"},name:"options"}],return:{name:"void"}},required:!1}},{key:"examples",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}},required:!1}}]}},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}},description:`Return all widgets that meet the given criterion, from all Renderers -except the Renderer that triggered this call. - -This function is provided to each Renderer's \`findExternalWidgets\` prop, -which enables widgets in different Renderers to discover each other and -communicate.`},{name:"_mapRenderers",docblock:`Copy the renderer tree, apply the given transformation to the leaf nodes -and the optional given transformation to the array nodes, and return the -result. - -Used to provide structured data to the call site (the Renderer tree on -\`render\`, the Score tree on \`getScores\`, etc.), and to traverse the -renderer tree even when we disregard the output (like in -\`_findWidgets\`).`,modifiers:[],params:[{name:"leafMapper",optional:!1,type:{name:"intersection",raw:`ContentMapper & -HintMapper`,elements:[{name:"signature",type:"function",raw:`( - content: CI, - shape: ContentShape, - path: Path, -) => CO`,signature:{arguments:[{type:{name:"union",raw:"ContentRendererData | HintRendererData",elements:[{name:"signature",type:"object",raw:`{ - makeRenderer: () => ContentRendererElement; - ref: Renderer | null | undefined; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - makeRenderer: () => HintRendererElement; - findExternalWidgets: FindWidgetsFunc | null | undefined; - ref: null; - hint: Hint; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( - criterion: FilterCriterion, -) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - focus: () => - | { - id: string; - path: FocusPath; - } - | boolean; - getDOMNodeForPath: (path: FocusPath) => Element | Text | null; - deselectIncorrectSelectedChoices?: () => void; - restoreSerializedState: (props: any, callback: () => void) => any; - // TODO(jeremy): I think this return value is wrong. The widget - // getSerializedState should just return _its_ serialized state, not a - // key/value list of all widget states (i think!) - // Returns widget state that can be passed back to \`restoreSerializedState\` - // to put the widget back into exactly the same state. If the widget does - // not implement this function, the renderer simply returns all of the - // widget's props. - getSerializedState?: () => SerializedState; // SUSPECT, - getGrammarTypeForPath: (path: FocusPath) => string; - blurInputPath?: (path: FocusPath) => null; - focusInputPath?: (path: FocusPath) => null; - getInputPaths?: () => ReadonlyArray; - setInputValue?: ( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, - ) => void; - getUserInput?: () => UserInput | null | undefined; - simpleValidate?: ( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, - ) => PerseusScore; - showRationalesForCurrentlySelectedChoices?: (options?: any) => void; - examples?: () => ReadonlyArray; -}`,signature:{properties:[{key:"focus",value:{name:"signature",type:"function",raw:`() => -| { - id: string; - path: FocusPath; - } -| boolean`,signature:{arguments:[],return:{name:"union",raw:`| { - id: string; - path: FocusPath; - } -| boolean`,elements:[{name:"signature",type:"object",raw:`{ - id: string; - path: FocusPath; -}`,signature:{properties:[{key:"id",value:{name:"string",required:!0}},{key:"path",value:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"boolean"}]}},required:!0}},{key:"getDOMNodeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => Element | Text | null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"union",raw:"Element | Text | null",elements:[{name:"Element"},{name:"Text"},{name:"null"}]}},required:!0}},{key:"deselectIncorrectSelectedChoices",value:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}},required:!1}},{key:"restoreSerializedState",value:{name:"signature",type:"function",raw:"(props: any, callback: () => void) => any",signature:{arguments:[{type:{name:"any"},name:"props"},{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"callback"}],return:{name:"any"}},required:!0}},{key:"getSerializedState",value:{name:"signature",type:"function",raw:"() => SerializedState",signature:{arguments:[],return:{name:"signature",type:"object",raw:`{ - [id: string]: any; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}}},required:!1}},{key:"getGrammarTypeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => string",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"string"}},required:!0}},{key:"blurInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"focusInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"getInputPaths",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}],raw:"ReadonlyArray"}},required:!1}},{key:"setInputValue",value:{name:"signature",type:"function",raw:`( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, -) => void`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"},{type:{name:"string"},name:"newValue"},{type:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},name:"focus"}],return:{name:"void"}},required:!1}},{key:"getUserInput",value:{name:"signature",type:"function",raw:"() => UserInput | null | undefined",signature:{arguments:[],return:{name:"union",raw:"UserInput | null | undefined",elements:[{name:"union",raw:`| PerseusCategorizerUserInput -| PerseusCSProgramUserInput -| PerseusDropdownUserInput -| PerseusExpressionUserInput -| PerseusGrapherUserInput -| PerseusIFrameUserInput -| PerseusInputNumberUserInput -| PerseusInteractiveGraphUserInput -| PerseusLabelImageUserInput -| PerseusMatcherUserInput -| PerseusMatrixUserInput -| PerseusMoleculeUserInput -| PerseusNumberLineUserInput -| PerseusNumericInputUserInput -| PerseusOrdererUserInput -| PerseusPlotterUserInput -| PerseusRadioUserInput -| PerseusSorterUserInput -| PerseusTableUserInput -| EmptyUserInput`,elements:[{name:"signature",type:"object",raw:`{ - values: ReadonlyArray; -}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - value: number; -}`,signature:{properties:[{key:"value",value:{name:"number",required:!0}}]}},{name:"string"},{name:"signature",type:"object",raw:`{ - type: string; - asymptote: ReadonlyArray; - coords: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"asymptote",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}},{key:"coords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}]},{name:"signature",type:"object",raw:`{ - markers: ReadonlyArray; -}`,signature:{properties:[{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - left: ReadonlyArray; - right: ReadonlyArray; -}`,signature:{properties:[{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - answers: ReadonlyArray>; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"signature",type:"object",raw:`{ - isTickCrtl?: boolean; - numLinePosition: number; - rel: Relationship | "eq"; - numDivisions: number; - divisionRange: ReadonlyArray; -}`,signature:{properties:[{key:"isTickCrtl",value:{name:"boolean",required:!1}},{key:"numLinePosition",value:{name:"number",required:!0}},{key:"rel",value:{name:"union",raw:'Relationship | "eq"',elements:[{name:"union",raw:'"lt" | "gt" | "le" | "ge"',elements:[{name:"literal",value:'"lt"'},{name:"literal",value:'"gt"'},{name:"literal",value:'"le"'},{name:"literal",value:'"ge"'}]},{name:"literal",value:'"eq"'}],required:!0}},{key:"numDivisions",value:{name:"number",required:!0}},{key:"divisionRange",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"signature",type:"object",raw:`{ - current: ReadonlyArray; -}`,signature:{properties:[{key:"current",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},{name:"signature",type:"object",raw:`{ - countChoices?: boolean; - choicesSelected: ReadonlyArray; - numCorrect?: number; - noneOfTheAboveIndex?: number | null | undefined; - noneOfTheAboveSelected?: boolean; -}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]}},{name:"signature",type:"object",raw:`{ - options: ReadonlyArray; - changed: boolean; -}`,signature:{properties:[{key:"options",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"changed",value:{name:"boolean",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"Empty"}]},{name:"null"},{name:"undefined"}]}},required:!1}},{key:"simpleValidate",value:{name:"signature",type:"function",raw:`( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, -) => PerseusScore`,signature:{arguments:[{type:{name:"any"},name:"options"},{type:{name:"signature",type:"function",raw:`( - widgetId: any, - value: string, - message?: string | null | undefined, -) => unknown | null | undefined`,signature:{arguments:[{type:{name:"any"},name:"widgetId"},{type:{name:"string"},name:"value"},{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},name:"message"}],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"onOutputError"}],return:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}},required:!1}},{key:"showRationalesForCurrentlySelectedChoices",value:{name:"signature",type:"function",raw:"(options?: any) => void",signature:{arguments:[{type:{name:"any"},name:"options"}],return:{name:"void"}},required:!1}},{key:"examples",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}},required:!1}}]}},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}}]},name:"content"},{type:{name:"signature",type:"object",raw:`{ - type: "content"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"content"',required:!0}}]}},name:"shape"},{type:{name:"ReadonlyArray",elements:[{name:"union",raw:"string | number",elements:[{name:"string"},{name:"number"}]}],raw:"ReadonlyArray"},name:"path"}],return:{name:"O"}}},{name:"signature",type:"function",raw:"(hint: HI, shape: HintShape, path: Path) => HO",signature:{arguments:[{type:{name:"union",raw:"ContentRendererData | HintRendererData",elements:[{name:"signature",type:"object",raw:`{ - makeRenderer: () => ContentRendererElement; - ref: Renderer | null | undefined; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - makeRenderer: () => HintRendererElement; - findExternalWidgets: FindWidgetsFunc | null | undefined; - ref: null; - hint: Hint; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( - criterion: FilterCriterion, -) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - focus: () => - | { - id: string; - path: FocusPath; - } - | boolean; - getDOMNodeForPath: (path: FocusPath) => Element | Text | null; - deselectIncorrectSelectedChoices?: () => void; - restoreSerializedState: (props: any, callback: () => void) => any; - // TODO(jeremy): I think this return value is wrong. The widget - // getSerializedState should just return _its_ serialized state, not a - // key/value list of all widget states (i think!) - // Returns widget state that can be passed back to \`restoreSerializedState\` - // to put the widget back into exactly the same state. If the widget does - // not implement this function, the renderer simply returns all of the - // widget's props. - getSerializedState?: () => SerializedState; // SUSPECT, - getGrammarTypeForPath: (path: FocusPath) => string; - blurInputPath?: (path: FocusPath) => null; - focusInputPath?: (path: FocusPath) => null; - getInputPaths?: () => ReadonlyArray; - setInputValue?: ( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, - ) => void; - getUserInput?: () => UserInput | null | undefined; - simpleValidate?: ( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, - ) => PerseusScore; - showRationalesForCurrentlySelectedChoices?: (options?: any) => void; - examples?: () => ReadonlyArray; -}`,signature:{properties:[{key:"focus",value:{name:"signature",type:"function",raw:`() => -| { - id: string; - path: FocusPath; - } -| boolean`,signature:{arguments:[],return:{name:"union",raw:`| { - id: string; - path: FocusPath; - } -| boolean`,elements:[{name:"signature",type:"object",raw:`{ - id: string; - path: FocusPath; -}`,signature:{properties:[{key:"id",value:{name:"string",required:!0}},{key:"path",value:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"boolean"}]}},required:!0}},{key:"getDOMNodeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => Element | Text | null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"union",raw:"Element | Text | null",elements:[{name:"Element"},{name:"Text"},{name:"null"}]}},required:!0}},{key:"deselectIncorrectSelectedChoices",value:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}},required:!1}},{key:"restoreSerializedState",value:{name:"signature",type:"function",raw:"(props: any, callback: () => void) => any",signature:{arguments:[{type:{name:"any"},name:"props"},{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"callback"}],return:{name:"any"}},required:!0}},{key:"getSerializedState",value:{name:"signature",type:"function",raw:"() => SerializedState",signature:{arguments:[],return:{name:"signature",type:"object",raw:`{ - [id: string]: any; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}}},required:!1}},{key:"getGrammarTypeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => string",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"string"}},required:!0}},{key:"blurInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"focusInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"getInputPaths",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}],raw:"ReadonlyArray"}},required:!1}},{key:"setInputValue",value:{name:"signature",type:"function",raw:`( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, -) => void`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"},{type:{name:"string"},name:"newValue"},{type:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},name:"focus"}],return:{name:"void"}},required:!1}},{key:"getUserInput",value:{name:"signature",type:"function",raw:"() => UserInput | null | undefined",signature:{arguments:[],return:{name:"union",raw:"UserInput | null | undefined",elements:[{name:"union",raw:`| PerseusCategorizerUserInput -| PerseusCSProgramUserInput -| PerseusDropdownUserInput -| PerseusExpressionUserInput -| PerseusGrapherUserInput -| PerseusIFrameUserInput -| PerseusInputNumberUserInput -| PerseusInteractiveGraphUserInput -| PerseusLabelImageUserInput -| PerseusMatcherUserInput -| PerseusMatrixUserInput -| PerseusMoleculeUserInput -| PerseusNumberLineUserInput -| PerseusNumericInputUserInput -| PerseusOrdererUserInput -| PerseusPlotterUserInput -| PerseusRadioUserInput -| PerseusSorterUserInput -| PerseusTableUserInput -| EmptyUserInput`,elements:[{name:"signature",type:"object",raw:`{ - values: ReadonlyArray; -}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - value: number; -}`,signature:{properties:[{key:"value",value:{name:"number",required:!0}}]}},{name:"string"},{name:"signature",type:"object",raw:`{ - type: string; - asymptote: ReadonlyArray; - coords: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"asymptote",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}},{key:"coords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}]},{name:"signature",type:"object",raw:`{ - markers: ReadonlyArray; -}`,signature:{properties:[{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - left: ReadonlyArray; - right: ReadonlyArray; -}`,signature:{properties:[{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - answers: ReadonlyArray>; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"signature",type:"object",raw:`{ - isTickCrtl?: boolean; - numLinePosition: number; - rel: Relationship | "eq"; - numDivisions: number; - divisionRange: ReadonlyArray; -}`,signature:{properties:[{key:"isTickCrtl",value:{name:"boolean",required:!1}},{key:"numLinePosition",value:{name:"number",required:!0}},{key:"rel",value:{name:"union",raw:'Relationship | "eq"',elements:[{name:"union",raw:'"lt" | "gt" | "le" | "ge"',elements:[{name:"literal",value:'"lt"'},{name:"literal",value:'"gt"'},{name:"literal",value:'"le"'},{name:"literal",value:'"ge"'}]},{name:"literal",value:'"eq"'}],required:!0}},{key:"numDivisions",value:{name:"number",required:!0}},{key:"divisionRange",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"signature",type:"object",raw:`{ - current: ReadonlyArray; -}`,signature:{properties:[{key:"current",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},{name:"signature",type:"object",raw:`{ - countChoices?: boolean; - choicesSelected: ReadonlyArray; - numCorrect?: number; - noneOfTheAboveIndex?: number | null | undefined; - noneOfTheAboveSelected?: boolean; -}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]}},{name:"signature",type:"object",raw:`{ - options: ReadonlyArray; - changed: boolean; -}`,signature:{properties:[{key:"options",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"changed",value:{name:"boolean",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"Empty"}]},{name:"null"},{name:"undefined"}]}},required:!1}},{key:"simpleValidate",value:{name:"signature",type:"function",raw:`( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, -) => PerseusScore`,signature:{arguments:[{type:{name:"any"},name:"options"},{type:{name:"signature",type:"function",raw:`( - widgetId: any, - value: string, - message?: string | null | undefined, -) => unknown | null | undefined`,signature:{arguments:[{type:{name:"any"},name:"widgetId"},{type:{name:"string"},name:"value"},{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},name:"message"}],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"onOutputError"}],return:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}},required:!1}},{key:"showRationalesForCurrentlySelectedChoices",value:{name:"signature",type:"function",raw:"(options?: any) => void",signature:{arguments:[{type:{name:"any"},name:"options"}],return:{name:"void"}},required:!1}},{key:"examples",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}},required:!1}}]}},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}}]},name:"hint"},{type:{name:"signature",type:"object",raw:`{ - type: "hint"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"hint"',required:!0}}]}},name:"shape"},{type:{name:"ReadonlyArray",elements:[{name:"union",raw:"string | number",elements:[{name:"string"},{name:"number"}]}],raw:"ReadonlyArray"},name:"path"}],return:{name:"O"}}}]}}],returns:{type:{name:"union",raw:"Tree | null | undefined",elements:[{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"O"},{name:"O"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]},{name:"null"},{name:"undefined"}]}},description:`Copy the renderer tree, apply the given transformation to the leaf nodes -and the optional given transformation to the array nodes, and return the -result. - -Used to provide structured data to the call site (the Renderer tree on -\`render\`, the Score tree on \`getScores\`, etc.), and to traverse the -renderer tree even when we disregard the output (like in -\`_findWidgets\`).`},{name:"_scoreFromRef",docblock:null,modifiers:[],params:[{name:"ref",optional:!0,type:{name:"union",raw:"Renderer | null",elements:[{name:"Renderer"},{name:"null"}]}}],returns:{type:{name:"any"}}},{name:"getScores",docblock:"Return a tree in the shape of the multi-item, with scores at each of\nthe content nodes and `null` at the other leaf nodes.",modifiers:[],params:[],returns:{type:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"any"},{name:"null"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]}},description:"Return a tree in the shape of the multi-item, with scores at each of\nthe content nodes and `null` at the other leaf nodes."},{name:"score",docblock:"Return a single composite score for all rendered content nodes.\nThe `guess` is a tree in the shape of the multi-item, with an individual\nguess at each content node and `null` at the other leaf nodes.",modifiers:[],params:[],returns:{type:{name:"any"}},description:"Return a single composite score for all rendered content nodes.\nThe `guess` is a tree in the shape of the multi-item, with an individual\nguess at each content node and `null` at the other leaf nodes."},{name:"_getSerializedState",docblock:`Return a tree in the shape of the multi-item, with serialized state at -each of the content nodes and \`null\` at the other leaf nodes. - -If the lastSerializedState argument is supplied, this function will fill -in the state of not-currently-rendered content and hint nodes with the -values from the previous serialized state. If no lastSerializedState is -supplied, \`null\` will be returned for not-currently-rendered content and -hint nodes.`,modifiers:[],params:[{name:"lastSerializedState",optional:!0,type:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"any"},{name:"null"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],alias:"SerializedStateTree"}}],returns:{type:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"any"},{name:"null"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]}},description:`Return a tree in the shape of the multi-item, with serialized state at -each of the content nodes and \`null\` at the other leaf nodes. - -If the lastSerializedState argument is supplied, this function will fill -in the state of not-currently-rendered content and hint nodes with the -values from the previous serialized state. If no lastSerializedState is -supplied, \`null\` will be returned for not-currently-rendered content and -hint nodes.`},{name:"restoreSerializedState",docblock:`Given a tree in the shape of the multi-item, with serialized state at -each of the content nodes, restore each state to the corresponding -renderer if currently mounted.`,modifiers:[],params:[{name:"serializedState",optional:!1,type:{name:"any",alias:"SerializedState"}},{name:"callback",optional:!0,type:{name:"signature",type:"function",raw:"() => any",signature:{arguments:[],return:{name:"any"}}}}],returns:null,description:`Given a tree in the shape of the multi-item, with serialized state at -each of the content nodes, restore each state to the corresponding -renderer if currently mounted.`},{name:"_annotateRendererArray",docblock:"Given an array of renderers, if it happens to be an array of *hint*\nrenderers, then attach a `firstN` method to the array, which allows the\nlayout to render the hints together in one HintsRenderer.",modifiers:[],params:[{name:"renderers",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"Renderer"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}},{name:"rendererDatas",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"union",raw:"ContentRendererData | HintRendererData",elements:[{name:"signature",type:"object",raw:`{ - makeRenderer: () => ContentRendererElement; - ref: Renderer | null | undefined; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - makeRenderer: () => HintRendererElement; - findExternalWidgets: FindWidgetsFunc | null | undefined; - ref: null; - hint: Hint; -}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( - criterion: FilterCriterion, -) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - focus: () => - | { - id: string; - path: FocusPath; - } - | boolean; - getDOMNodeForPath: (path: FocusPath) => Element | Text | null; - deselectIncorrectSelectedChoices?: () => void; - restoreSerializedState: (props: any, callback: () => void) => any; - // TODO(jeremy): I think this return value is wrong. The widget - // getSerializedState should just return _its_ serialized state, not a - // key/value list of all widget states (i think!) - // Returns widget state that can be passed back to \`restoreSerializedState\` - // to put the widget back into exactly the same state. If the widget does - // not implement this function, the renderer simply returns all of the - // widget's props. - getSerializedState?: () => SerializedState; // SUSPECT, - getGrammarTypeForPath: (path: FocusPath) => string; - blurInputPath?: (path: FocusPath) => null; - focusInputPath?: (path: FocusPath) => null; - getInputPaths?: () => ReadonlyArray; - setInputValue?: ( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, - ) => void; - getUserInput?: () => UserInput | null | undefined; - simpleValidate?: ( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, - ) => PerseusScore; - showRationalesForCurrentlySelectedChoices?: (options?: any) => void; - examples?: () => ReadonlyArray; -}`,signature:{properties:[{key:"focus",value:{name:"signature",type:"function",raw:`() => -| { - id: string; - path: FocusPath; - } -| boolean`,signature:{arguments:[],return:{name:"union",raw:`| { - id: string; - path: FocusPath; - } -| boolean`,elements:[{name:"signature",type:"object",raw:`{ - id: string; - path: FocusPath; -}`,signature:{properties:[{key:"id",value:{name:"string",required:!0}},{key:"path",value:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"boolean"}]}},required:!0}},{key:"getDOMNodeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => Element | Text | null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"union",raw:"Element | Text | null",elements:[{name:"Element"},{name:"Text"},{name:"null"}]}},required:!0}},{key:"deselectIncorrectSelectedChoices",value:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}},required:!1}},{key:"restoreSerializedState",value:{name:"signature",type:"function",raw:"(props: any, callback: () => void) => any",signature:{arguments:[{type:{name:"any"},name:"props"},{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"callback"}],return:{name:"any"}},required:!0}},{key:"getSerializedState",value:{name:"signature",type:"function",raw:"() => SerializedState",signature:{arguments:[],return:{name:"signature",type:"object",raw:`{ - [id: string]: any; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}}},required:!1}},{key:"getGrammarTypeForPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => string",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"string"}},required:!0}},{key:"blurInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"focusInputPath",value:{name:"signature",type:"function",raw:"(path: FocusPath) => null",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"}],return:{name:"null"}},required:!1}},{key:"getInputPaths",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0}],raw:"ReadonlyArray"}},required:!1}},{key:"setInputValue",value:{name:"signature",type:"function",raw:`( - path: FocusPath, - newValue: string, - // TODO(jeremy): I think this is actually a callback - focus?: () => unknown, -) => void`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],required:!0},name:"path"},{type:{name:"string"},name:"newValue"},{type:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},name:"focus"}],return:{name:"void"}},required:!1}},{key:"getUserInput",value:{name:"signature",type:"function",raw:"() => UserInput | null | undefined",signature:{arguments:[],return:{name:"union",raw:"UserInput | null | undefined",elements:[{name:"union",raw:`| PerseusCategorizerUserInput -| PerseusCSProgramUserInput -| PerseusDropdownUserInput -| PerseusExpressionUserInput -| PerseusGrapherUserInput -| PerseusIFrameUserInput -| PerseusInputNumberUserInput -| PerseusInteractiveGraphUserInput -| PerseusLabelImageUserInput -| PerseusMatcherUserInput -| PerseusMatrixUserInput -| PerseusMoleculeUserInput -| PerseusNumberLineUserInput -| PerseusNumericInputUserInput -| PerseusOrdererUserInput -| PerseusPlotterUserInput -| PerseusRadioUserInput -| PerseusSorterUserInput -| PerseusTableUserInput -| EmptyUserInput`,elements:[{name:"signature",type:"object",raw:`{ - values: ReadonlyArray; -}`,signature:{properties:[{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - value: number; -}`,signature:{properties:[{key:"value",value:{name:"number",required:!0}}]}},{name:"string"},{name:"signature",type:"object",raw:`{ - type: string; - asymptote: ReadonlyArray; - coords: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"asymptote",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}},{key:"coords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - status: UserInputStatus; - message: string | null; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "incomplete"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"incomplete"'}],required:!0}},{key:"message",value:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}]},{name:"signature",type:"object",raw:`{ - markers: ReadonlyArray; -}`,signature:{properties:[{key:"markers",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`MarkerType & { - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // The list of correct answers expected for the marker. - answers: ReadonlyArray; - // The marker title or description. - label: string; - // The marker coordinates on the question image as percent of image size. - x: number; - y: number; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"label",value:{name:"string",required:!0}},{key:"x",value:{name:"number",required:!0}},{key:"y",value:{name:"number",required:!0}}]}},{name:"signature",type:"object",raw:`{ - // The user selected list of answers, used to grade the question. - selected?: ReadonlyArray; - // Reveal the correctness state of the user selected answers for the marker. - showCorrectness?: "correct" | "incorrect"; - focused?: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"showCorrectness",value:{name:"union",raw:'"correct" | "incorrect"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'}],required:!1}},{key:"focused",value:{name:"boolean",required:!1}}]}}]}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - left: ReadonlyArray; - right: ReadonlyArray; -}`,signature:{properties:[{key:"left",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"right",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - answers: ReadonlyArray>; -}`,signature:{properties:[{key:"answers",value:{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"signature",type:"object",raw:`{ - isTickCrtl?: boolean; - numLinePosition: number; - rel: Relationship | "eq"; - numDivisions: number; - divisionRange: ReadonlyArray; -}`,signature:{properties:[{key:"isTickCrtl",value:{name:"boolean",required:!1}},{key:"numLinePosition",value:{name:"number",required:!0}},{key:"rel",value:{name:"union",raw:'Relationship | "eq"',elements:[{name:"union",raw:'"lt" | "gt" | "le" | "ge"',elements:[{name:"literal",value:'"lt"'},{name:"literal",value:'"gt"'},{name:"literal",value:'"le"'},{name:"literal",value:'"ge"'}]},{name:"literal",value:'"eq"'}],required:!0}},{key:"numDivisions",value:{name:"number",required:!0}},{key:"divisionRange",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}}]}},{name:"signature",type:"object",raw:`{ - currentValue: string; -}`,signature:{properties:[{key:"currentValue",value:{name:"string",required:!0}}]}},{name:"signature",type:"object",raw:`{ - current: ReadonlyArray; -}`,signature:{properties:[{key:"current",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},{name:"signature",type:"object",raw:`{ - countChoices?: boolean; - choicesSelected: ReadonlyArray; - numCorrect?: number; - noneOfTheAboveIndex?: number | null | undefined; - noneOfTheAboveSelected?: boolean; -}`,signature:{properties:[{key:"countChoices",value:{name:"boolean",required:!1}},{key:"choicesSelected",value:{name:"ReadonlyArray",elements:[{name:"boolean"}],raw:"ReadonlyArray",required:!0}},{key:"numCorrect",value:{name:"number",required:!1}},{key:"noneOfTheAboveIndex",value:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}],required:!1}},{key:"noneOfTheAboveSelected",value:{name:"boolean",required:!1}}]}},{name:"signature",type:"object",raw:`{ - options: ReadonlyArray; - changed: boolean; -}`,signature:{properties:[{key:"options",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"changed",value:{name:"boolean",required:!0}}]}},{name:"ReadonlyArray",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}],raw:"ReadonlyArray>"},{name:"Empty"}]},{name:"null"},{name:"undefined"}]}},required:!1}},{key:"simpleValidate",value:{name:"signature",type:"function",raw:`( - options?: any, - onOutputError?: ( - widgetId: any, - value: string, - message?: string | null | undefined, - ) => unknown | null | undefined, -) => PerseusScore`,signature:{arguments:[{type:{name:"any"},name:"options"},{type:{name:"signature",type:"function",raw:`( - widgetId: any, - value: string, - message?: string | null | undefined, -) => unknown | null | undefined`,signature:{arguments:[{type:{name:"any"},name:"widgetId"},{type:{name:"string"},name:"value"},{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},name:"message"}],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"onOutputError"}],return:{name:"union",raw:`| { - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; - } -| { - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; - }`,elements:[{name:"signature",type:"object",raw:`{ - type: "invalid"; - message?: string | null | undefined; - suppressAlmostThere?: boolean | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"invalid"',required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"suppressAlmostThere",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - type: "points"; - earned: number; - total: number; - message?: string | null | undefined; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"points"',required:!0}},{key:"earned",value:{name:"number",required:!0}},{key:"total",value:{name:"number",required:!0}},{key:"message",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}}]}}]}},required:!1}},{key:"showRationalesForCurrentlySelectedChoices",value:{name:"signature",type:"function",raw:"(options?: any) => void",signature:{arguments:[{type:{name:"any"},name:"options"}],return:{name:"void"}},required:!1}},{key:"examples",value:{name:"signature",type:"function",raw:"() => ReadonlyArray",signature:{arguments:[],return:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}},required:!1}}]}},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}}]}],raw:"ReadonlyArray",alias:"ReadonlyArray"}},{name:"shape",optional:!1,type:{name:"signature",type:"object",raw:`{ - type: "array"; - /** - * Each element of an ArrayNode has the same shape, which is specified by - * the \`elementShape\` property. - */ - elementShape: Shape; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"array"',required:!0}},{key:"elementShape",value:{name:"union",raw:`| ContentShape -| HintShape -| TagsShape -| ArrayShape -| ObjectShape`,elements:[{name:"signature",type:"object",raw:`{ - type: "content"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"content"',required:!0}}]}},{name:"signature",type:"object",raw:`{ - type: "hint"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"hint"',required:!0}}]}},{name:"signature",type:"object",raw:`{ - type: "tags"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"tags"',required:!0}}]}},{name:"ArrayShape"},{name:"signature",type:"object",raw:`{ - type: "object"; - /** - * Each property of an ObjectNode has its own shape, which is specified - * under the corresponding key in the \`shape\` property. - */ - shape: { - [k: string]: Shape; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"object"',required:!0}},{key:"shape",value:{name:"signature",type:"object",raw:`{ - [k: string]: Shape; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Shape",required:!0}}]},required:!0},description:"Each property of an ObjectNode has its own shape, which is specified\nunder the corresponding key in the `shape` property."}]}}],required:!0},description:"Each element of an ArrayNode has the same shape, which is specified by\nthe `elementShape` property."}]},alias:"ArrayShape"}}],returns:{type:{name:"ReadonlyArray",elements:[{name:"Renderer"}],raw:"ReadonlyArray"}},description:"Given an array of renderers, if it happens to be an array of *hint*\nrenderers, then attach a `firstN` method to the array, which allows the\nlayout to render the hints together in one HintsRenderer."},{name:"_getRenderers",docblock:`Return a tree in the shape of the multi-item, with a Renderer at each -content node and a HintRenderer at each hint node. - -This is generated by running each of the \`makeRenderer\` functions at the -leaf nodes.`,modifiers:[],params:[],returns:{type:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"unknown"},{name:"unknown"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]}},description:`Return a tree in the shape of the multi-item, with a Renderer at each -content node and a HintRenderer at each hint node. - -This is generated by running each of the \`makeRenderer\` functions at the -leaf nodes.`}],displayName:"MultiRenderer",props:{item:{required:!0,tsType:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]}},description:""},shape:{required:!0,tsType:{name:"union",raw:`| ContentShape -| HintShape -| TagsShape -| ArrayShape -| ObjectShape`,elements:[{name:"signature",type:"object",raw:`{ - type: "content"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"content"',required:!0}}]}},{name:"signature",type:"object",raw:`{ - type: "hint"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"hint"',required:!0}}]}},{name:"signature",type:"object",raw:`{ - type: "tags"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"tags"',required:!0}}]}},{name:"signature",type:"object",raw:`{ - type: "array"; - /** - * Each element of an ArrayNode has the same shape, which is specified by - * the \`elementShape\` property. - */ - elementShape: Shape; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"array"',required:!0}},{key:"elementShape",value:{name:"Shape",required:!0},description:"Each element of an ArrayNode has the same shape, which is specified by\nthe `elementShape` property."}]}},{name:"signature",type:"object",raw:`{ - type: "object"; - /** - * Each property of an ObjectNode has its own shape, which is specified - * under the corresponding key in the \`shape\` property. - */ - shape: { - [k: string]: Shape; - }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"object"',required:!0}},{key:"shape",value:{name:"signature",type:"object",raw:`{ - [k: string]: Shape; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Shape",required:!0}}]},required:!0},description:"Each property of an ObjectNode has its own shape, which is specified\nunder the corresponding key in the `shape` property."}]}}]},description:""},children:{required:!0,tsType:{name:"signature",type:"function",raw:"(tree: {renderers: RendererTree}) => React.ReactElement",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{renderers: RendererTree}",signature:{properties:[{key:"renderers",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"unknown"},{name:"unknown"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]}},name:"tree"}],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}}},description:""},serializedState:{required:!1,tsType:{name:"union",raw:"SerializedStateTree | null | undefined",elements:[{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"any"},{name:"null"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]},{name:"null"},{name:"undefined"}]},description:""},onSerializedStateUpdated:{required:!1,tsType:{name:"signature",type:"function",raw:"(state: SerializedStateTree) => void",signature:{arguments:[{type:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"any"},{name:"null"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]},name:"state"}],return:{name:"void"}}},description:""},onInteractWithWidget:{required:!1,tsType:{name:"signature",type:"function",raw:"(id: string) => void",signature:{arguments:[{type:{name:"string"},name:"id"}],return:{name:"void"}}},description:""},apiOptions:{required:!1,tsType:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},description:""},reviewMode:{required:!1,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},dependencies:{required:!0,tsType:{name:"signature",type:"object",raw:`{ - analytics: {onAnalyticsEvent: AnalyticsEventHandlerFn}; -}`,signature:{properties:[{key:"analytics",value:{name:"signature",type:"object",raw:"{onAnalyticsEvent: AnalyticsEventHandlerFn}",signature:{properties:[{key:"onAnalyticsEvent",value:{name:"AnalyticsEventHandlerFn",required:!0}}]},required:!0}}]}},description:""}}};export{W as M,k as S,We as a,Oe as b,Y as c,c as d,C as e,xe as f,F as g,Ie as i,u as l,ae as r,y as s}; diff --git a/assets/multi-renderer-vtdVtdWv.js b/assets/multi-renderer-vtdVtdWv.js new file mode 100644 index 0000000000..0d4655240d --- /dev/null +++ b/assets/multi-renderer-vtdVtdWv.js @@ -0,0 +1,30597 @@ +import{a as M}from"./version-akiLXZts.js";import{w as H}from"./article-renderer-TMdCDA85.js";import{r as V,k as $,l as G,R as N,p as E}from"./renderer-hPmI_Chp.js";import{j as u,a as K}from"./jsx-runtime-FVsy8kgq.js";import{l as R}from"./index-awljIyHI.js";import{r as A}from"./index-TT1qJ6UJ.js";import{_ as j}from"./jquery-yG1GhClm.js";import{c as B}from"./asset-context-I7yIqWki.js";import{P as _}from"./i18n-context-hxuRe8oU.js";import{D as L}from"./dependencies-8XILypbq.js";import{H as W}from"./hints-renderer-sA0Ao_qa.js";import{A as Q}from"./perseus-api-mOiZT07d.js";import{U as h,P as g,E as y}from"./util-YrNvlCNO.js";import{L as Z}from"./svg-image-RL9NlJEY.js";const J="@khanacademy/perseus",X="__lib_version__";M(J,X);const Y={major:0,minor:1};V(H);const ee=$();ee["::renderer::"]=Y;const re={onRendered:t=>{}},te=A.createContext(re),T=class T extends A.Component{constructor(e){super(e),this._handleFocusChange=(r,n)=>{r!=null?this._setCurrentFocus(r):this._onRendererBlur(n)},this.handleInteractWithWidget=r=>{var a,i;const n=j.difference(this.state.questionHighlightedWidgets,[r]);this.setState({questionCompleted:!1,questionHighlightedWidgets:n}),(i=(a=this.props.apiOptions)==null?void 0:a.interactionCallback)==null||i.call(a,this.questionRenderer.getUserInputForWidgets())},this.setAssetStatus=(r,n)=>{const a={...this.state.assetStatuses,[r]:n};this.setState({assetStatuses:a})},this.state={questionCompleted:!1,questionHighlightedWidgets:[],assetStatuses:{}},this._fullyRendered=!1}componentDidMount(){this._currentFocus=null,this._fullyRendered=!1}UNSAFE_componentWillReceiveProps(e){this.setState({questionHighlightedWidgets:[]})}componentDidUpdate(e,r){if(this.props.apiOptions.answerableCallback){const n=this.questionRenderer.emptyWidgets().length===0,{answerableCallback:a}=this.props.apiOptions;a&&a(n)}this._fullyRendered||Object.values(this.state.assetStatuses).every(Boolean)&&(this._fullyRendered=!0,this.props.onRendered(!0))}componentWillUnmount(){this.blurTimeoutID!=null&&(clearTimeout(this.blurTimeoutID),this.blurTimeoutID=null)}_setCurrentFocus(e){const{apiOptions:{isMobile:r,onFocusChange:n},keypadElement:a}=this.props,i=this._currentFocus;this._currentFocus=e;const s=this.getInputPaths(),o=this._currentFocus&&s.some(d=>h.inputPathsEqual(d,this._currentFocus));n!=null&&setTimeout(()=>{const d=a==null?void 0:a.getDOMNode(),w=d&&o?d.getBoundingClientRect().height:0;n(this._currentFocus,i,w,o&&this.questionRenderer.getDOMNodeForPath(e))},0),a&&r&&(o?a.activate():a.dismiss())}_onRendererBlur(e){const r=this._currentFocus;j.isEqual(e,r)&&(this.blurTimeoutID=setTimeout(()=>{j.isEqual(this._currentFocus,r)&&this._setCurrentFocus(null)},0))}_setWidgetProps(e,r,n){this.questionRenderer._setWidgetProps(e,r,n)}setInputValue(e,r,n){return this.questionRenderer.setInputValue(e,r,n)}focusPath(e){return this.questionRenderer.focusPath(e)}blurPath(e){return this.questionRenderer.blurPath(e)}getDOMNodeForPath(e){return this.questionRenderer.getDOMNodeForPath(e)}getGrammarTypeForPath(e){return this.questionRenderer.getGrammarTypeForPath(e)}getInputPaths(){return this.questionRenderer.getInputPaths()}focus(){return this.questionRenderer.focus()}blur(){this._currentFocus&&this.blurPath(this._currentFocus)}getNumHints(){return this.props.item.hints.length}scoreInput(){const e=this.questionRenderer.guessAndScore(),r=e[0],n=e[1],a=[r,[]],i=h.keScoreFromPerseusScore(n,a,this.questionRenderer.getSerializedState()),s=this.questionRenderer.emptyWidgets();return this.setState({questionCompleted:i.correct,questionHighlightedWidgets:s}),i}getWidgetIds(){return this.questionRenderer.getWidgetIds()}getSerializedState(){return{question:this.questionRenderer.getSerializedState(),hints:this.hintsRenderer.getSerializedState()}}restoreSerializedState(e,r){let n=2;const a=()=>{--n,r&&n===0&&r()};this.questionRenderer.restoreSerializedState(e.question,a),this.hintsRenderer.restoreSerializedState(e.hints,a)}showRationalesForCurrentlySelectedChoices(){this.questionRenderer.showRationalesForCurrentlySelectedChoices()}deselectIncorrectSelectedChoices(){this.questionRenderer.deselectIncorrectSelectedChoices()}render(){const e={...Q.defaults,...this.props.apiOptions,onFocusChange:this._handleFocusChange},r={assetStatuses:this.state.assetStatuses,setAssetStatus:this.setAssetStatus},n=u(B.Provider,{value:r,children:u(N,{keypadElement:this.props.keypadElement,problemNum:this.props.problemNum,onInteractWithWidget:this.handleInteractWithWidget,highlightedWidgets:this.state.questionHighlightedWidgets,apiOptions:e,questionCompleted:this.state.questionCompleted,reviewMode:this.props.reviewMode,showSolutions:this.props.showSolutions,ref:i=>{i!=null&&(this.questionRenderer=i)},content:this.props.item.question.content,widgets:this.props.item.question.widgets,images:this.props.item.question.images,linterContext:E(this.props.linterContext,"question"),strings:this.context.strings,...this.props.dependencies})}),a=u(W,{hints:this.props.item.hints,hintsVisible:this.props.hintsVisible,apiOptions:e,ref:i=>this.hintsRenderer=i,linterContext:E(this.props.linterContext,"hints"),strings:this.context.strings});return u(L.Provider,{value:this.props.dependencies,children:K("div",{children:[u("div",{children:n}),u("div",{className:e.isMobile?void 0:R.css(ne.hintsContainer),children:a})]})})}};T.contextType=_,T.defaultProps={apiOptions:{},linterContext:G,onRendered:e=>{}};let k=T;const ne=R.StyleSheet.create({hintsContainer:{marginLeft:50}}),ae=A.forwardRef((t,e)=>u(te.Consumer,{children:({onRendered:r})=>u(k,{...t,onRendered:r,ref:e})}));k.__docgenInfo={description:"",methods:[{name:"_handleFocusChange",docblock:null,modifiers:[],params:[{name:"newFocus",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}},{name:"oldFocus",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:null},{name:"_setCurrentFocus",docblock:null,modifiers:[],params:[{name:"newFocus",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:null},{name:"_onRendererBlur",docblock:null,modifiers:[],params:[{name:"blurPath",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:null},{name:"_setWidgetProps",docblock:`Accepts a question area widgetId, or an answer area widgetId of +the form "answer-input-number 1", or the string "answer-area" +for the whole answer area (if the answer area is a single widget).`,modifiers:[],params:[{name:"widgetId",optional:!1,type:{name:"string"}},{name:"newProps",optional:!1,type:{name:"intersection",raw:"SharedRendererProps & OwnProps & HOCProps",elements:[{name:"signature",type:"object",raw:`{ + apiOptions: APIOptions; + linterContext: LinterContextProps; +}`,signature:{properties:[{key:"apiOptions",value:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, +) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been +answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at +0 and is incremented for each group widget), and the ID of the +group widget, then returns a react component that will be added +immediately above the renderer in the group widget. If the +function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead +of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead +of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; +}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same +interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM +DOM elements. For example, when provided, will be used +in place of . This allows clients to provide pre-styled +components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component +to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +} & Partial & + Partial`,elements:[{name:"signature",type:"object",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + status: "correct" | "incorrect" | "invalid"; +}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + visible: number; +}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It +also includes any extra parameters that the originating widget provided. +This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is +being used. For mobile web this will be the ProvidedKeypad +component. In this situation we use the MathInput component +from the math-input repo instead of the existing perseus math +input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance +of \`math-input\`'s keypad to the body. This is used by the native +apps so they can have the keypad be defined on the native side. +It is called with an function that, when called, blurs the input, +and is expected to return an object of the shape +keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the +drawing area (scratchpad) should be allowed/disallowed. + +Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the +page. For example, if this is enabled, the most recently used +radio widget will attempt to keep the "selected" answer in view +after entering review mode. + +Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio +widgets. This allows users to note which answers they believe to +be incorrect, to find the answer by process of elimination. + +We plan to roll this out to all call sites eventually, but for +now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content +in a editor is delayed before propagated to a prop. For example, +when text is typed in the text area of an Editor component, +there will be a delay equal to the value of \`editorChangeDelay\` +before the change is propagated. This is added for better +responsiveness of the editor when used in certain contexts such +as StructuredItem exercises where constant re-rendering for each +keystroke caused text typed in the text area to appear in it +only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); +}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false +| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. + +Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}}],required:!0},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +after they have been transformed by the widget's transform function. +This is useful for when we need to know how a widget has shuffled its +the available choices.`}]}}],raw:`Readonly<{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}>`,required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}}]}},{name:"signature",type:"object",raw:`{ + hintsVisible?: number; + item: PerseusItem; + problemNum?: number; + reviewMode?: boolean; + keypadElement?: KeypadAPI | null | undefined; + dependencies: PerseusDependenciesV2; + showSolutions?: ShowSolutions; +}`,signature:{properties:[{key:"hintsVisible",value:{name:"number",required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ + // The details of the question being asked to the user. + question: PerseusRenderer; + // A collection of hints to be offered to the user that support answering the question. + hints: ReadonlyArray; + // Details about the tools the user might need to answer the question + answerArea: PerseusAnswerArea | null | undefined; + // The version of the item. Not used by Perseus + itemDataVersion: Version; + // Deprecated field + answer: any; +}`,signature:{properties:[{key:"question",value:{name:"signature",type:"object",raw:`{ + // Translatable Markdown content to be rendered. May include references to + // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). + // For each image found in this content, there can be an entry in the + // \`images\` dict (below) with the key being the image's url which defines + // additional attributes for the image. + content: string; + // A dictionary of {[widgetName]: Widget} to be referenced from the content field + widgets: PerseusWidgetsMap; + // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + metadata?: ReadonlyArray; + // A dictionary of {[imageUrl]: PerseusImageDetail}. + images: { + [key: string]: PerseusImageDetail; + }; +}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [key: string]: PerseusImageDetail; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // The width of the image + width: number; + // the height of the image + height: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]},required:!0}},{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { + /** + * When \`true\`, causes the previous hint to be replaced with this hint when + * displayed. When \`false\`, the previous hint remains visible when this one + * is displayed. This allows for hints that build upon each other. + */ + replace?: boolean; +}`,elements:[{name:"signature",type:"object",raw:`{ + // Translatable Markdown content to be rendered. May include references to + // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). + // For each image found in this content, there can be an entry in the + // \`images\` dict (below) with the key being the image's url which defines + // additional attributes for the image. + content: string; + // A dictionary of {[widgetName]: Widget} to be referenced from the content field + widgets: PerseusWidgetsMap; + // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + metadata?: ReadonlyArray; + // A dictionary of {[imageUrl]: PerseusImageDetail}. + images: { + [key: string]: PerseusImageDetail; + }; +}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}}]}}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [key: string]: PerseusImageDetail; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // The width of the image + width: number; + // the height of the image + height: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]},required:!0},{name:"signature",type:"object",raw:`{ + /** + * When \`true\`, causes the previous hint to be replaced with this hint when + * displayed. When \`false\`, the previous hint remains visible when this one + * is displayed. This allows for hints that build upon each other. + */ + replace?: boolean; +}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!0}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null | undefined",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"},{name:"undefined"}],required:!0}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!0}},{key:"answer",value:{name:"any",required:!0}}]},required:!0}},{key:"problemNum",value:{name:"number",required:!1}},{key:"reviewMode",value:{name:"boolean",required:!1}},{key:"keypadElement",value:{name:"union",raw:"KeypadAPI | null | undefined",elements:[{name:"KeypadAPI"},{name:"null"},{name:"undefined"}],required:!1}},{key:"dependencies",value:{name:"signature",type:"object",raw:`{ + analytics: {onAnalyticsEvent: AnalyticsEventHandlerFn}; +}`,signature:{properties:[{key:"analytics",value:{name:"signature",type:"object",raw:"{onAnalyticsEvent: AnalyticsEventHandlerFn}",signature:{properties:[{key:"onAnalyticsEvent",value:{name:"AnalyticsEventHandlerFn",required:!0}}]},required:!0}}]},required:!0}},{key:"showSolutions",value:{name:"union",raw:'"all" | "selected" | "none"',elements:[{name:"literal",value:'"all"'},{name:"literal",value:'"selected"'},{name:"literal",value:'"none"'}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + onRendered: (isRendered: boolean) => void; +}`,signature:{properties:[{key:"onRendered",value:{name:"signature",type:"function",raw:"(isRendered: boolean) => void",signature:{arguments:[{type:{name:"boolean"},name:"isRendered"}],return:{name:"void"}},required:!0}}]}}],alias:"Props"}},{name:"callback",optional:!1,type:{name:"any"}}],returns:null,description:`Accepts a question area widgetId, or an answer area widgetId of +the form "answer-input-number 1", or the string "answer-area" +for the whole answer area (if the answer area is a single widget).`},{name:"setInputValue",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}},{name:"newValue",optional:!1,type:{name:"any"}},{name:"focus",optional:!1,type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}}}],returns:{type:{name:"void"}}},{name:"focusPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:{type:{name:"void"}}},{name:"blurPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:{type:{name:"void"}}},{name:"getDOMNodeForPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:{type:{name:"union",raw:"Element | Text | null | undefined",elements:[{name:"Element"},{name:"Text"},{name:"null"},{name:"undefined"}]}}},{name:"getGrammarTypeForPath",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}],alias:"FocusPath"}}],returns:{type:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]}}},{name:"getInputPaths",docblock:null,modifiers:[],params:[],returns:{type:{name:"ReadonlyArray",elements:[{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"handleInteractWithWidget",docblock:null,modifiers:[],params:[{name:"widgetId",optional:!1,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:{type:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]}}},{name:"blur",docblock:null,modifiers:[],params:[],returns:{type:{name:"void"}}},{name:"getNumHints",docblock:null,modifiers:[],params:[],returns:{type:{name:"number"}}},{name:"scoreInput",docblock:"Grades the item.",modifiers:[],params:[],returns:{type:{name:"KEScore"}},description:"Grades the item."},{name:"getWidgetIds",docblock:`Returns an array of all widget IDs in the order they occur in +the question content.`,modifiers:[],params:[],returns:{type:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"}},description:`Returns an array of all widget IDs in the order they occur in +the question content.`},{name:"getSerializedState",docblock:"Get a representation of the current state of the item.",modifiers:[],params:[],returns:{type:{name:"signature",type:"object",raw:`{ + question: any; + hints: any; +}`,signature:{properties:[{key:"question",value:{name:"any",required:!0}},{key:"hints",value:{name:"any",required:!0}}]}}},description:"Get a representation of the current state of the item."},{name:"restoreSerializedState",docblock:null,modifiers:[],params:[{name:"state",optional:!1,type:{name:"signature",type:"object",raw:`{ + question: any; + hints: any; +}`,signature:{properties:[{key:"question",value:{name:"any",required:!0}},{key:"hints",value:{name:"any",required:!0}}]},alias:"SerializedState"}},{name:"callback",optional:!0,type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}}}],returns:null},{name:"showRationalesForCurrentlySelectedChoices",docblock:null,modifiers:[],params:[],returns:null},{name:"deselectIncorrectSelectedChoices",docblock:null,modifiers:[],params:[],returns:null},{name:"setAssetStatus",docblock:null,modifiers:[],params:[{name:"assetKey",optional:!1,type:null},{name:"status",optional:!1,type:null}],returns:null}],displayName:"ServerItemRenderer",props:{apiOptions:{defaultValue:{value:"{}",computed:!1},required:!1},linterContext:{defaultValue:{value:"PerseusLinter.linterContextDefault",computed:!0},required:!1},onRendered:{defaultValue:{value:"(isRendered: boolean) => {}",computed:!1},required:!1}}};ae.__docgenInfo={description:"",methods:[],displayName:"ref"};const ie={type:"content"},P={type:"hint"},se={type:"tags"},F=t=>({type:"array",elementShape:t}),oe=t=>({type:"object",shape:t}),le=F(P),m={content:ie,hint:P,hints:le,tags:se,arrayOf:F,shape:oe};class p{constructor(e,r,n){this.content=e,this.hint=r,this.tags=n,this.array=f}setContentMapper(e){return new p(e,this.hint,this.tags)}setHintMapper(e){return new p(this.content,e,this.tags)}setTagsMapper(e){return new p(this.content,this.hint,e)}setArrayMapper(e){return new I(this.content,this.hint,this.tags,e)}mapTree(e,r){return q(e,r,[],this)}}class I{constructor(e,r,n,a){this.content=e,this.hint=r,this.tags=n,this.array=a}setArrayMapper(e){return new I(this.content,this.hint,this.tags,e)}mapTree(e,r){return q(e,r,[],this)}}function f(t){return t}function c(){return new p(f,f,f)}function q(t,e,r,n){if(e.type==="content"){const a=t;return n.content(a,e,r)}if(e.type==="hint"){const a=t;return n.hint(a,e,r)}if(e.type==="tags"){const a=t;return n.tags(a,e,r)}if(e.type==="array"){const a=t;if(!Array.isArray(a))throw new g(`Invalid object of type "${typeof a}" found at path ${[""].concat(r).join(".")}. Expected array.`,y.Internal);const i=e.elementShape,s=a.map((o,d)=>q(o,i,r.concat(d),n));return n.array(s,a,e,r)}if(e.type==="object"){const a=t;if(a&&typeof a!="object")throw new g(`Invalid object of type "${typeof a}" found at path ${[""].concat(r).join(".")}. Expected "object" type.`,y.InvalidInput);const i=e.shape;if(!i)throw new g(`Unexpected shape ${JSON.stringify(e)} at path ${[""].concat(r).join(".")}.`,y.InvalidInput);const s={};return Object.keys(i).forEach(o=>{if(!(o in a))throw new g(`Key "${o}" is missing from shape at path ${[""].concat(r).join(".")}.`,y.InvalidInput);s[o]=q(a[o],i[o],r.concat(o),n)}),s}throw new g(`unexpected shape type ${e.type}`,y.InvalidInput)}function U(t){if(t.type==="content")return{__type:"content",content:"",images:{},widgets:{}};if(t.type==="hint")return{__type:"hint",replace:!1,content:"",images:{},widgets:{}};if(t.type==="tags")return[];if(t.type==="array")return[];if(t.type==="object"){const e=t.shape,r={};return Object.keys(e).forEach(n=>{r[n]=U(e[n])}),r}throw new g(`unexpected shape type ${t.type}`,y.InvalidInput)}function We(t){return ue(U(t))}function xe(t,e,r){const n=O(t);c().setContentMapper(r).mapTree(n,e)}function ze(t,e,r){const n=O(t);c().setHintMapper(r).mapTree(n,e)}function Ie(t){const e=O(t);return x(e)}function x(t){if(Array.isArray(t))return t.length?typeof t[0]=="string"?m.tags:m.arrayOf(x(t[0])):m.arrayOf(m.content);if(typeof t=="object"&&(t.__type==="content"||t.__type==="item"))return m.content;if(typeof t=="object"&&t.__type==="hint")return m.hint;if(typeof t=="object"){const e={};return Object.keys(t).forEach(r=>{e[r]=x(t[r])}),m.shape(e)}throw new g(`unexpected multi-item node ${JSON.stringify(t)}`,y.InvalidInput)}function O(t){return t._multi}function ue(t){return{_multi:t}}var S=function(t){return t===Object(t)},D=function(){for(var t={},e=0;e{const{onSerializedStateUpdated:a}=this.props;if(a){const i=this._getSerializedState(this.props.serializedState);a(l(i).set(r,n).freeze())}},this.rendererDataTreeMapper=c().setContentMapper((r,n,a)=>this._makeContentRendererData(r,a)).setHintMapper(r=>this._makeHintRendererData(r)).setTagsMapper(r=>null),this.getRenderersMapper=c().setContentMapper(r=>r.makeRenderer()).setHintMapper(r=>r.makeRenderer()).setArrayMapper((r,n,a)=>this._annotateRendererArray(r,n,a)),this.state=this._tryMakeRendererState(this.props)}UNSAFE_componentWillReceiveProps(e){e.item!==this.props.item&&this.setState(this._tryMakeRendererState(e))}_tryMakeRendererState(e){try{return{rendererDataTree:this._makeRendererDataTree(e.item,e.shape),renderError:null}}catch(r){return Z.error("Error building tree state",y.Internal,{cause:r}),{rendererDataTree:null,renderError:r}}}_getRendererProps(){const{item:e,children:r,shape:n,serializedState:a,onSerializedStateUpdated:i,...s}=this.props;return{...s,strings:this.context.strings}}_makeContentRendererData(e,r){const n={ref:null,makeRenderer:null},a=o=>n.ref=o,i=o=>this._findWidgets(n,o),s=o=>this._handleSerializedStateUpdated(r,o);return n.makeRenderer=()=>u(N,{...this._getRendererProps(),...e,ref:a,findExternalWidgets:i,serializedState:this.props.serializedState?l(this.props.serializedState).get(r):null,onSerializedStateUpdated:s}),n}_makeHintRendererData(e){const r=n=>this._findWidgets({},n);return{hint:e,findExternalWidgets:r,ref:null,makeRenderer:()=>u(W,{...this._getRendererProps(),findExternalWidgets:r,hints:[e]})}}_makeRendererDataTree(e,r){const n=O(e);return this.rendererDataTreeMapper.mapTree(n,r)}_findWidgets(e,r){const n=[];return this._mapRenderers(a=>{e!==a&&a.ref&&n.push(...a.ref.findInternalWidgets(r))}),n}_mapRenderers(e){const{rendererDataTree:r}=this.state;return r?c().setContentMapper(e).setHintMapper(e).mapTree(r,this.props.shape):null}_scoreFromRef(e){if(!e)return null;const[r,n]=e.guessAndScore();let a;return e.getSerializedState&&(a=e.getSerializedState()),h.keScoreFromPerseusScore(n,r,a)}getScores(){return this._mapRenderers(e=>this._scoreFromRef(e.ref))}score(){const e=[],r=[],n=this._mapRenderers(i=>{var s;return i.ref?(i.ref.getSerializedState&&r.push(i.ref.getSerializedState()),e.push(i.ref.score()),(s=i.ref)==null?void 0:s.getUserInput()):null}),a=e.reduce(h.combineScores);return h.keScoreFromPerseusScore(a,n,r)}_getSerializedState(e){return this._mapRenderers((r,n,a)=>r.ref?r.ref.getSerializedState():e?l(e).get(a):null)}restoreSerializedState(e,r){let n=0;const a=()=>{n--,r&&n===0&&r()};this._mapRenderers((i,s,o)=>{var w;if(!i.ref)return;const d=l(e).get(o);d&&(n++,(w=i.ref)==null||w.restoreSerializedState(d,a))})}_annotateRendererArray(e,r,n){if(n.elementShape.type==="hint"){const a=r;e=[...e],e.firstN=i=>u(W,{...this._getRendererProps(),findExternalWidgets:a[0]?a[0].findExternalWidgets:void 0,hints:a.map(s=>s.hint),hintsVisible:i})}return e}_getRenderers(){return this.getRenderersMapper.mapTree(this.state.rendererDataTree,this.props.shape)}render(){return this.state.renderError?u("div",{className:R.css(ge.error),children:this.context.strings.errorRendering({error:String(this.state.renderError)})}):u(L.Provider,{value:this.props.dependencies,children:this.props.children({renderers:this._getRenderers()})})}};C.contextType=_;let z=C;const ge=R.StyleSheet.create({error:{color:"red"}});z.__docgenInfo={description:"",methods:[{name:"_tryMakeRendererState",docblock:"Attempt to build a State that includes a renderer tree corresponding to\nthe item provided in props. On error, return a state with `renderError`\nset instead.",modifiers:[],params:[{name:"props",optional:!1,type:{name:"signature",type:"object",raw:`{ + item: Item; + shape: Shape; + children: (tree: {renderers: RendererTree}) => React.ReactElement; + serializedState?: SerializedStateTree | null | undefined; + onSerializedStateUpdated?: (state: SerializedStateTree) => void; + onInteractWithWidget?: (id: string) => void; + apiOptions?: APIOptions; + reviewMode?: boolean | null | undefined; + + dependencies: PerseusDependenciesV2; +}`,signature:{properties:[{key:"item",value:{name:"signature",type:"object",raw:`{ + _multi: ItemTree; +}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!0}},{key:"shape",value:{name:"union",raw:`| ContentShape +| HintShape +| TagsShape +| ArrayShape +| ObjectShape`,elements:[{name:"signature",type:"object",raw:`{ + type: "content"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"content"',required:!0}}]}},{name:"signature",type:"object",raw:`{ + type: "hint"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"hint"',required:!0}}]}},{name:"signature",type:"object",raw:`{ + type: "tags"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"tags"',required:!0}}]}},{name:"signature",type:"object",raw:`{ + type: "array"; + /** + * Each element of an ArrayNode has the same shape, which is specified by + * the \`elementShape\` property. + */ + elementShape: Shape; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"array"',required:!0}},{key:"elementShape",value:{name:"Shape",required:!0},description:"Each element of an ArrayNode has the same shape, which is specified by\nthe `elementShape` property."}]}},{name:"signature",type:"object",raw:`{ + type: "object"; + /** + * Each property of an ObjectNode has its own shape, which is specified + * under the corresponding key in the \`shape\` property. + */ + shape: { + [k: string]: Shape; + }; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"object"',required:!0}},{key:"shape",value:{name:"signature",type:"object",raw:`{ + [k: string]: Shape; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Shape",required:!0}}]},required:!0},description:"Each property of an ObjectNode has its own shape, which is specified\nunder the corresponding key in the `shape` property."}]}}],required:!0}},{key:"children",value:{name:"signature",type:"function",raw:"(tree: {renderers: RendererTree}) => React.ReactElement",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{renderers: RendererTree}",signature:{properties:[{key:"renderers",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]}},name:"tree"}],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"serializedState",value:{name:"union",raw:"SerializedStateTree | null | undefined",elements:[{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0},{name:"null"},{name:"undefined"}],required:!1}},{key:"onSerializedStateUpdated",value:{name:"signature",type:"function",raw:"(state: SerializedStateTree) => void",signature:{arguments:[{type:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0},name:"state"}],return:{name:"void"}},required:!1}},{key:"onInteractWithWidget",value:{name:"signature",type:"function",raw:"(id: string) => void",signature:{arguments:[{type:{name:"string"},name:"id"}],return:{name:"void"}},required:!1}},{key:"apiOptions",value:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, +) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been +answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at +0 and is incremented for each group widget), and the ID of the +group widget, then returns a react component that will be added +immediately above the renderer in the group widget. If the +function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead +of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead +of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; +}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same +interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM +DOM elements. For example, when provided, will be used +in place of . This allows clients to provide pre-styled +components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component +to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +} & Partial & + Partial`,elements:[{name:"signature",type:"object",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + status: "correct" | "incorrect" | "invalid"; +}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + visible: number; +}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It +also includes any extra parameters that the originating widget provided. +This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is +being used. For mobile web this will be the ProvidedKeypad +component. In this situation we use the MathInput component +from the math-input repo instead of the existing perseus math +input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance +of \`math-input\`'s keypad to the body. This is used by the native +apps so they can have the keypad be defined on the native side. +It is called with an function that, when called, blurs the input, +and is expected to return an object of the shape +keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the +drawing area (scratchpad) should be allowed/disallowed. + +Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the +page. For example, if this is enabled, the most recently used +radio widget will attempt to keep the "selected" answer in view +after entering review mode. + +Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio +widgets. This allows users to note which answers they believe to +be incorrect, to find the answer by process of elimination. + +We plan to roll this out to all call sites eventually, but for +now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content +in a editor is delayed before propagated to a prop. For example, +when text is typed in the text area of an Editor component, +there will be a delay equal to the value of \`editorChangeDelay\` +before the change is propagated. This is added for better +responsiveness of the editor when used in certain contexts such +as StructuredItem exercises where constant re-rendering for each +keystroke caused text typed in the text area to appear in it +only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); +}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false +| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. + +Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +after they have been transformed by the widget's transform function. +This is useful for when we need to know how a widget has shuffled its +the available choices.`}]}}],raw:`Readonly<{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}>`,required:!1}},{key:"reviewMode",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}},{key:"dependencies",value:{name:"signature",type:"object",raw:`{ + analytics: {onAnalyticsEvent: AnalyticsEventHandlerFn}; +}`,signature:{properties:[{key:"analytics",value:{name:"signature",type:"object",raw:"{onAnalyticsEvent: AnalyticsEventHandlerFn}",signature:{properties:[{key:"onAnalyticsEvent",value:{name:"AnalyticsEventHandlerFn",required:!0}}]},required:!0}}]},required:!0}}]},alias:"Props"}}],returns:{type:{name:"signature",type:"object",raw:`{ + // We cache functions to generate renderers and refs in \`rendererDataTree\`, + // and change them every time content changes. This isn't just a performance + // optimization; see \`_makeContentRendererData\` for more discussion. + rendererDataTree: RendererDataTree | null | undefined; + // But, if traversing the tree fails, we store the Error in \`renderError\`. + renderError: Error | null | undefined; +}`,signature:{properties:[{key:"rendererDataTree",value:{name:"union",raw:"RendererDataTree | null | undefined",elements:[{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + makeRenderer: () => ContentRendererElement; + ref: Renderer | null | undefined; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ + makeRenderer: () => HintRendererElement; + findExternalWidgets: FindWidgetsFunc | null | undefined; + ref: null; + hint: Hint; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( + criterion: FilterCriterion, +) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"Widget"},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]},{name:"null"},{name:"undefined"}],required:!0}},{key:"renderError",value:{name:"union",raw:"Error | null | undefined",elements:[{name:"Error"},{name:"null"},{name:"undefined"}],required:!0}}]}}},description:"Attempt to build a State that includes a renderer tree corresponding to\nthe item provided in props. On error, return a state with `renderError`\nset instead."},{name:"_handleSerializedStateUpdated",docblock:null,modifiers:[],params:[{name:"path",optional:!1,type:null},{name:"newState",optional:!1,type:null}],returns:null},{name:"_getRendererProps",docblock:`Props that aren't directly used by the MultiRenderer are delegated to +the underlying Renderers.`,modifiers:[],params:[],returns:{type:{name:"PropsFor",elements:[{name:"Renderer"}],raw:"PropsFor"}},description:`Props that aren't directly used by the MultiRenderer are delegated to +the underlying Renderers.`},{name:"_makeContentRendererData",docblock:"Construct a Renderer and a ref placeholder for the given ContentNode.",modifiers:[],params:[{name:"content",optional:!1,type:{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]},alias:"ContentNode"}},{name:"path",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"union",raw:"string | number",elements:[{name:"string"},{name:"number"}]}],raw:"ReadonlyArray",alias:"Path"}}],returns:{type:{name:"signature",type:"object",raw:`{ + makeRenderer: () => ContentRendererElement; + ref: Renderer | null | undefined; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}}},description:"Construct a Renderer and a ref placeholder for the given ContentNode."},{name:"_makeHintRendererData",docblock:`Construct a Renderer for the given HintNode, and keep track of the hint +itself for future use, too.`,modifiers:[],params:[{name:"hint",optional:!1,type:{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]},alias:"HintNode"}}],returns:{type:{name:"signature",type:"object",raw:`{ + makeRenderer: () => HintRendererElement; + findExternalWidgets: FindWidgetsFunc | null | undefined; + ref: null; + hint: Hint; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( + criterion: FilterCriterion, +) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"Widget"},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}}},description:`Construct a Renderer for the given HintNode, and keep track of the hint +itself for future use, too.`},{name:"_makeRendererDataTree",docblock:"Construct a tree of interconnected RendererDatas, corresponding to the\ngiven item. Called in `_tryMakeRendererState`, in order to store this\ntree in the component state.",modifiers:[],params:[{name:"item",optional:!1,type:{name:"signature",type:"object",raw:`{ + _multi: ItemTree; +}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},alias:"Item"}},{name:"shape",optional:!1,type:{name:"union",raw:`| ContentShape +| HintShape +| TagsShape +| ArrayShape +| ObjectShape`,elements:[{name:"signature",type:"object",raw:`{ + type: "content"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"content"',required:!0}}]}},{name:"signature",type:"object",raw:`{ + type: "hint"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"hint"',required:!0}}]}},{name:"signature",type:"object",raw:`{ + type: "tags"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"tags"',required:!0}}]}},{name:"signature",type:"object",raw:`{ + type: "array"; + /** + * Each element of an ArrayNode has the same shape, which is specified by + * the \`elementShape\` property. + */ + elementShape: Shape; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"array"',required:!0}},{key:"elementShape",value:{name:"Shape",required:!0},description:"Each element of an ArrayNode has the same shape, which is specified by\nthe `elementShape` property."}]}},{name:"signature",type:"object",raw:`{ + type: "object"; + /** + * Each property of an ObjectNode has its own shape, which is specified + * under the corresponding key in the \`shape\` property. + */ + shape: { + [k: string]: Shape; + }; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"object"',required:!0}},{key:"shape",value:{name:"signature",type:"object",raw:`{ + [k: string]: Shape; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Shape",required:!0}}]},required:!0},description:"Each property of an ObjectNode has its own shape, which is specified\nunder the corresponding key in the `shape` property."}]}}],alias:"Shape"}}],returns:{type:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + makeRenderer: () => ContentRendererElement; + ref: Renderer | null | undefined; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ + makeRenderer: () => HintRendererElement; + findExternalWidgets: FindWidgetsFunc | null | undefined; + ref: null; + hint: Hint; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( + criterion: FilterCriterion, +) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"Widget"},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]}},description:"Construct a tree of interconnected RendererDatas, corresponding to the\ngiven item. Called in `_tryMakeRendererState`, in order to store this\ntree in the component state."},{name:"_findWidgets",docblock:`Return all widgets that meet the given criterion, from all Renderers +except the Renderer that triggered this call. + +This function is provided to each Renderer's \`findExternalWidgets\` prop, +which enables widgets in different Renderers to discover each other and +communicate.`,modifiers:[],params:[{name:"callingData",optional:!1,type:{name:"union",raw:"ContentRendererData | HintRendererData",elements:[{name:"signature",type:"object",raw:`{ + makeRenderer: () => ContentRendererElement; + ref: Renderer | null | undefined; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ + makeRenderer: () => HintRendererElement; + findExternalWidgets: FindWidgetsFunc | null | undefined; + ref: null; + hint: Hint; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( + criterion: FilterCriterion, +) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"Widget"},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}}],alias:"RendererData"}},{name:"filterCriterion",optional:!1,type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}],alias:"FilterCriterion"}}],returns:{type:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"Widget"},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}},description:`Return all widgets that meet the given criterion, from all Renderers +except the Renderer that triggered this call. + +This function is provided to each Renderer's \`findExternalWidgets\` prop, +which enables widgets in different Renderers to discover each other and +communicate.`},{name:"_mapRenderers",docblock:`Copy the renderer tree, apply the given transformation to the leaf nodes +and the optional given transformation to the array nodes, and return the +result. + +Used to provide structured data to the call site (the Renderer tree on +\`render\`, the Score tree on \`getScores\`, etc.), and to traverse the +renderer tree even when we disregard the output (like in +\`_findWidgets\`).`,modifiers:[],params:[{name:"leafMapper",optional:!1,type:{name:"intersection",raw:`ContentMapper & +HintMapper`,elements:[{name:"signature",type:"function",raw:`( + content: CI, + shape: ContentShape, + path: Path, +) => CO`,signature:{arguments:[{type:{name:"union",raw:"ContentRendererData | HintRendererData",elements:[{name:"signature",type:"object",raw:`{ + makeRenderer: () => ContentRendererElement; + ref: Renderer | null | undefined; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ + makeRenderer: () => HintRendererElement; + findExternalWidgets: FindWidgetsFunc | null | undefined; + ref: null; + hint: Hint; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( + criterion: FilterCriterion, +) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"Widget"},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}}]},name:"content"},{type:{name:"signature",type:"object",raw:`{ + type: "content"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"content"',required:!0}}]}},name:"shape"},{type:{name:"ReadonlyArray",elements:[{name:"union",raw:"string | number",elements:[{name:"string"},{name:"number"}]}],raw:"ReadonlyArray"},name:"path"}],return:{name:"O"}}},{name:"signature",type:"function",raw:"(hint: HI, shape: HintShape, path: Path) => HO",signature:{arguments:[{type:{name:"union",raw:"ContentRendererData | HintRendererData",elements:[{name:"signature",type:"object",raw:`{ + makeRenderer: () => ContentRendererElement; + ref: Renderer | null | undefined; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ + makeRenderer: () => HintRendererElement; + findExternalWidgets: FindWidgetsFunc | null | undefined; + ref: null; + hint: Hint; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( + criterion: FilterCriterion, +) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"Widget"},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}}]},name:"hint"},{type:{name:"signature",type:"object",raw:`{ + type: "hint"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"hint"',required:!0}}]}},name:"shape"},{type:{name:"ReadonlyArray",elements:[{name:"union",raw:"string | number",elements:[{name:"string"},{name:"number"}]}],raw:"ReadonlyArray"},name:"path"}],return:{name:"O"}}}]}}],returns:{type:{name:"union",raw:"Tree | null | undefined",elements:[{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"O"},{name:"O"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]},{name:"null"},{name:"undefined"}]}},description:`Copy the renderer tree, apply the given transformation to the leaf nodes +and the optional given transformation to the array nodes, and return the +result. + +Used to provide structured data to the call site (the Renderer tree on +\`render\`, the Score tree on \`getScores\`, etc.), and to traverse the +renderer tree even when we disregard the output (like in +\`_findWidgets\`).`},{name:"_scoreFromRef",docblock:null,modifiers:[],params:[{name:"ref",optional:!0,type:{name:"union",raw:"Renderer | null",elements:[{name:"Renderer"},{name:"null"}]}}],returns:{type:{name:"any"}}},{name:"getScores",docblock:"Return a tree in the shape of the multi-item, with scores at each of\nthe content nodes and `null` at the other leaf nodes.",modifiers:[],params:[],returns:{type:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"any"},{name:"null"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]}},description:"Return a tree in the shape of the multi-item, with scores at each of\nthe content nodes and `null` at the other leaf nodes."},{name:"score",docblock:"Return a single composite score for all rendered content nodes.\nThe `guess` is a tree in the shape of the multi-item, with an individual\nguess at each content node and `null` at the other leaf nodes.",modifiers:[],params:[],returns:{type:{name:"any"}},description:"Return a single composite score for all rendered content nodes.\nThe `guess` is a tree in the shape of the multi-item, with an individual\nguess at each content node and `null` at the other leaf nodes."},{name:"_getSerializedState",docblock:`Return a tree in the shape of the multi-item, with serialized state at +each of the content nodes and \`null\` at the other leaf nodes. + +If the lastSerializedState argument is supplied, this function will fill +in the state of not-currently-rendered content and hint nodes with the +values from the previous serialized state. If no lastSerializedState is +supplied, \`null\` will be returned for not-currently-rendered content and +hint nodes.`,modifiers:[],params:[{name:"lastSerializedState",optional:!0,type:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"any"},{name:"null"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],alias:"SerializedStateTree"}}],returns:{type:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"any"},{name:"null"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]}},description:`Return a tree in the shape of the multi-item, with serialized state at +each of the content nodes and \`null\` at the other leaf nodes. + +If the lastSerializedState argument is supplied, this function will fill +in the state of not-currently-rendered content and hint nodes with the +values from the previous serialized state. If no lastSerializedState is +supplied, \`null\` will be returned for not-currently-rendered content and +hint nodes.`},{name:"restoreSerializedState",docblock:`Given a tree in the shape of the multi-item, with serialized state at +each of the content nodes, restore each state to the corresponding +renderer if currently mounted.`,modifiers:[],params:[{name:"serializedState",optional:!1,type:{name:"any",alias:"SerializedState"}},{name:"callback",optional:!0,type:{name:"signature",type:"function",raw:"() => any",signature:{arguments:[],return:{name:"any"}}}}],returns:null,description:`Given a tree in the shape of the multi-item, with serialized state at +each of the content nodes, restore each state to the corresponding +renderer if currently mounted.`},{name:"_annotateRendererArray",docblock:"Given an array of renderers, if it happens to be an array of *hint*\nrenderers, then attach a `firstN` method to the array, which allows the\nlayout to render the hints together in one HintsRenderer.",modifiers:[],params:[{name:"renderers",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"Renderer"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}},{name:"rendererDatas",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"union",raw:"ContentRendererData | HintRendererData",elements:[{name:"signature",type:"object",raw:`{ + makeRenderer: () => ContentRendererElement; + ref: Renderer | null | undefined; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => ContentRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"ref",value:{name:"union",raw:"Renderer | null | undefined",elements:[{name:"Renderer"},{name:"null"},{name:"undefined"}],required:!0}}]}},{name:"signature",type:"object",raw:`{ + makeRenderer: () => HintRendererElement; + findExternalWidgets: FindWidgetsFunc | null | undefined; + ref: null; + hint: Hint; +}`,signature:{properties:[{key:"makeRenderer",value:{name:"signature",type:"function",raw:"() => HintRendererElement",signature:{arguments:[],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}},required:!0}},{key:"findExternalWidgets",value:{name:"union",raw:"FindWidgetsFunc | null | undefined",elements:[{name:"signature",type:"function",raw:`( + criterion: FilterCriterion, +) => ReadonlyArray`,signature:{arguments:[{type:{name:"union",raw:`| string +| (( + id: string, + widgetInfo: PerseusWidget, + widget?: Widget | null | undefined, + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"union",raw:"Widget | null | undefined",elements:[{name:"Widget"},{name:"null"},{name:"undefined"}]}],raw:"ReadonlyArray"}}},{name:"null"},{name:"undefined"}],required:!0}},{key:"ref",value:{name:"null",required:!0}},{key:"hint",value:{name:"any",required:!0}}]}}]}],raw:"ReadonlyArray",alias:"ReadonlyArray"}},{name:"shape",optional:!1,type:{name:"signature",type:"object",raw:`{ + type: "array"; + /** + * Each element of an ArrayNode has the same shape, which is specified by + * the \`elementShape\` property. + */ + elementShape: Shape; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"array"',required:!0}},{key:"elementShape",value:{name:"union",raw:`| ContentShape +| HintShape +| TagsShape +| ArrayShape +| ObjectShape`,elements:[{name:"signature",type:"object",raw:`{ + type: "content"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"content"',required:!0}}]}},{name:"signature",type:"object",raw:`{ + type: "hint"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"hint"',required:!0}}]}},{name:"signature",type:"object",raw:`{ + type: "tags"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"tags"',required:!0}}]}},{name:"ArrayShape"},{name:"signature",type:"object",raw:`{ + type: "object"; + /** + * Each property of an ObjectNode has its own shape, which is specified + * under the corresponding key in the \`shape\` property. + */ + shape: { + [k: string]: Shape; + }; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"object"',required:!0}},{key:"shape",value:{name:"signature",type:"object",raw:`{ + [k: string]: Shape; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Shape",required:!0}}]},required:!0},description:"Each property of an ObjectNode has its own shape, which is specified\nunder the corresponding key in the `shape` property."}]}}],required:!0},description:"Each element of an ArrayNode has the same shape, which is specified by\nthe `elementShape` property."}]},alias:"ArrayShape"}}],returns:{type:{name:"ReadonlyArray",elements:[{name:"Renderer"}],raw:"ReadonlyArray"}},description:"Given an array of renderers, if it happens to be an array of *hint*\nrenderers, then attach a `firstN` method to the array, which allows the\nlayout to render the hints together in one HintsRenderer."},{name:"_getRenderers",docblock:`Return a tree in the shape of the multi-item, with a Renderer at each +content node and a HintRenderer at each hint node. + +This is generated by running each of the \`makeRenderer\` functions at the +leaf nodes.`,modifiers:[],params:[],returns:{type:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"unknown"},{name:"unknown"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]}},description:`Return a tree in the shape of the multi-item, with a Renderer at each +content node and a HintRenderer at each hint node. + +This is generated by running each of the \`makeRenderer\` functions at the +leaf nodes.`}],displayName:"MultiRenderer",props:{item:{required:!0,tsType:{name:"signature",type:"object",raw:`{ + _multi: ItemTree; +}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]}},description:""},shape:{required:!0,tsType:{name:"union",raw:`| ContentShape +| HintShape +| TagsShape +| ArrayShape +| ObjectShape`,elements:[{name:"signature",type:"object",raw:`{ + type: "content"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"content"',required:!0}}]}},{name:"signature",type:"object",raw:`{ + type: "hint"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"hint"',required:!0}}]}},{name:"signature",type:"object",raw:`{ + type: "tags"; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"tags"',required:!0}}]}},{name:"signature",type:"object",raw:`{ + type: "array"; + /** + * Each element of an ArrayNode has the same shape, which is specified by + * the \`elementShape\` property. + */ + elementShape: Shape; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"array"',required:!0}},{key:"elementShape",value:{name:"Shape",required:!0},description:"Each element of an ArrayNode has the same shape, which is specified by\nthe `elementShape` property."}]}},{name:"signature",type:"object",raw:`{ + type: "object"; + /** + * Each property of an ObjectNode has its own shape, which is specified + * under the corresponding key in the \`shape\` property. + */ + shape: { + [k: string]: Shape; + }; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"object"',required:!0}},{key:"shape",value:{name:"signature",type:"object",raw:`{ + [k: string]: Shape; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Shape",required:!0}}]},required:!0},description:"Each property of an ObjectNode has its own shape, which is specified\nunder the corresponding key in the `shape` property."}]}}]},description:""},children:{required:!0,tsType:{name:"signature",type:"function",raw:"(tree: {renderers: RendererTree}) => React.ReactElement",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{renderers: RendererTree}",signature:{properties:[{key:"renderers",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"unknown"},{name:"unknown"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]}},name:"tree"}],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}}},description:""},serializedState:{required:!1,tsType:{name:"union",raw:"SerializedStateTree | null | undefined",elements:[{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"any"},{name:"null"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]},{name:"null"},{name:"undefined"}]},description:""},onSerializedStateUpdated:{required:!1,tsType:{name:"signature",type:"function",raw:"(state: SerializedStateTree) => void",signature:{arguments:[{type:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"any"},{name:"null"},{name:"null"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}]},name:"state"}],return:{name:"void"}}},description:""},onInteractWithWidget:{required:!1,tsType:{name:"signature",type:"function",raw:"(id: string) => void",signature:{arguments:[{type:{name:"string"},name:"id"}],return:{name:"void"}}},description:""},apiOptions:{required:!1,tsType:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, +) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been +answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at +0 and is incremented for each group widget), and the ID of the +group widget, then returns a react component that will be added +immediately above the renderer in the group widget. If the +function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead +of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead +of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; +}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same +interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM +DOM elements. For example, when provided, will be used +in place of . This allows clients to provide pre-styled +components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component +to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +} & Partial & + Partial`,elements:[{name:"signature",type:"object",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + status: "correct" | "incorrect" | "invalid"; +}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + visible: number; +}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It +also includes any extra parameters that the originating widget provided. +This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is +being used. For mobile web this will be the ProvidedKeypad +component. In this situation we use the MathInput component +from the math-input repo instead of the existing perseus math +input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance +of \`math-input\`'s keypad to the body. This is used by the native +apps so they can have the keypad be defined on the native side. +It is called with an function that, when called, blurs the input, +and is expected to return an object of the shape +keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the +drawing area (scratchpad) should be allowed/disallowed. + +Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the +page. For example, if this is enabled, the most recently used +radio widget will attempt to keep the "selected" answer in view +after entering review mode. + +Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio +widgets. This allows users to note which answers they believe to +be incorrect, to find the answer by process of elimination. + +We plan to roll this out to all call sites eventually, but for +now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content +in a editor is delayed before propagated to a prop. For example, +when text is typed in the text area of an Editor component, +there will be a delay equal to the value of \`editorChangeDelay\` +before the change is propagated. This is added for better +responsiveness of the editor when used in certain contexts such +as StructuredItem exercises where constant re-rendering for each +keystroke caused text typed in the text area to appear in it +only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); +}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false +| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. + +Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +after they have been transformed by the widget's transform function. +This is useful for when we need to know how a widget has shuffled its +the available choices.`}]}}],raw:`Readonly<{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; + }; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); + }; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}>`},description:""},reviewMode:{required:!1,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},dependencies:{required:!0,tsType:{name:"signature",type:"object",raw:`{ + analytics: {onAnalyticsEvent: AnalyticsEventHandlerFn}; +}`,signature:{properties:[{key:"analytics",value:{name:"signature",type:"object",raw:"{onAnalyticsEvent: AnalyticsEventHandlerFn}",signature:{properties:[{key:"onAnalyticsEvent",value:{name:"AnalyticsEventHandlerFn",required:!0}}]},required:!0}}]}},description:""}}};export{z as M,k as S,ze as a,We as b,Y as c,c as d,O as e,xe as f,U as g,Ie as i,l,ae as r,m as s}; diff --git a/assets/phet-simulation-fZpYIOCA.js b/assets/multi-renderer.stories-5PAMrohg.js similarity index 68% rename from assets/phet-simulation-fZpYIOCA.js rename to assets/multi-renderer.stories-5PAMrohg.js index 56ac34cd92..5ebca49cd9 100644 --- a/assets/phet-simulation-fZpYIOCA.js +++ b/assets/multi-renderer.stories-5PAMrohg.js @@ -1,257 +1,1663 @@ -import{a as wr,j as Q}from"./jsx-runtime-FVsy8kgq.js";import{r as i}from"./index-TT1qJ6UJ.js";import{l as w}from"./index-awljIyHI.js";import{m as Je,c as Ye,u as Ze,a as kr,T as Qe,I as qr,x as Tr}from"./index-rfN0X25E.js";import{a as f,_ as l,V as L,b as Ie}from"./index-6h5t6F0w.js";import{c as Z,L as he,w as Rr}from"./react-router-dom-W_e8xVUu.js";import{i as er,g as rr}from"./index-o3wWn3Y5.js";import{C as Ar}from"./index-ngddCaVG.js";import{c as d,b as C,s as R,a as Te,m as ve,f as Le}from"./index-deFLJwr4.js";import{P as Re}from"./index-xuPsLuPk.js";import{e as xr,_ as _e}from"./arrow-square-out-bold-090vdhrx.js";import{b as Or}from"./index-h_CiYGGb.js";import{P as Cr}from"./i18n-context-hxuRe8oU.js";import{g as Wr}from"./dependencies-8XILypbq.js";import{s as jr}from"./constants-I_nlPaPx.js";function tr(a){const e=[];if(a)if(Array.isArray(a))for(const r of a)e.push(...tr(r));else e.push(a);else return e;return e}function nr(a){const e=[],r=[];if(!a)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;tr(a).forEach(s=>{const o=s._definition;if(o!=null)if(n){const u={};for(const[m,y]of Object.entries(o))u[m.replace(/-[a-z]/g,g=>g[1].toUpperCase())]=y;r.push(u)}else e.push(s);else r.push(s)});const t=Object.assign({},...r);if(r.length>0&&!n){const s=w.StyleSheet.create({inlineStyles:t});e.push(s.inlineStyles)}return{style:n?t:{},className:w.css(...e)}}const Ir=["children","style","tag","testId"],Nr=/^h[1-6]$/,$e=w.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}}),I=i.forwardRef(function(e,r){let{children:n,style:t,tag:s="span",testId:o}=e,u=f(e,Ir);const m=Nr.test(s),y=nr([$e.text,m&&$e.header,t]),g=u.className?[u.className,y.className].join(" "):y.className;return i.createElement(s,l({},u,{style:y.style,className:g,"data-testid":o,ref:r}),n)}),Er=["className","style"];function M(a,e){return i.forwardRef((r,n)=>{const{className:t,style:s}=r,o=f(r,Er),u=typeof a=="string"?Sr[a]:null,{className:m,style:y}=nr([u,e,s]);return i.createElement(a,l({},o,{ref:n,className:[m,t].filter(Boolean).join(" "),style:y}))})}const Sr=w.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),Pr=["testId","tag"],ne=w.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}}),zr=M("div",ne.default),Lr=M("article",ne.default),_r=M("aside",ne.default),$r=M("nav",ne.default),Fr=M("section",ne.default),Fe=i.forwardRef(function(e,r){const{testId:n,tag:t="div"}=e,s=f(e,Pr),o=l({},s,{"data-testid":n});switch(t){case"article":return i.createElement(Lr,l({},o,{ref:r}));case"aside":return i.createElement(_r,l({},o,{ref:r}));case"nav":return i.createElement($r,l({},o,{ref:r}));case"section":return i.createElement(Fr,l({},o,{ref:r}));case"div":return i.createElement(zr,l({},o,{ref:r}));default:throw Error(`${t} is not an allowed value for the 'tag' prop`)}});let G=function(a){return a.Root="root",a.Initial="initial",a.Standard="standard",a}({});const ue=i.createContext(G.Root);ue.displayName="RenderStateContext";let Dr=class extends i.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:r,fallback:n}=this.props;return this._isTheRootComponent=!0,e?i.createElement(ue.Provider,{value:G.Standard},r()):n?i.createElement(ue.Provider,{value:G.Initial},n()):null}_maybeRender(e){const{children:r,fallback:n}=this.props;switch(e){case G.Root:return this._renderAsRootComponent();case G.Initial:return n?n():null;case G.Standard:return r()}{var t;return console.log(`We got a render state we don't understand: "${(t=JSON.stringify(e))!=null?t:""}"`),this._maybeRender(G.Root)}}render(){return i.createElement(ue.Consumer,null,e=>this._maybeRender(e))}},ar=class ir{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const t=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${t}`},e=typeof e=="string"?e:"";const r=e.toLowerCase();if(!this._hasValidIdChars(r))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${r}-${ir._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}};ar._factoryUniquenessCounter=0;let Ae=class{get(e){return e}};Ae.Default=new Ae;var Ur=Ae.Default;let Mr=class extends i.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:r,mockOnFirstRender:n,scope:t}=this.props;return e?n?r(Ur):null:(this._idFactory||(this._idFactory=new ar(t)),r(this._idFactory))}render(){return i.createElement(Dr,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}},Hr=class sr extends i.Component{renderChildren(e){const{id:r,children:n}=this.props,t=e?e.get(sr.defaultId):r;if(!t)throw new Error("Did not get an identifier factory nor a id prop");return n(t)}render(){const{id:e,scope:r}=this.props;return e?this.renderChildren():i.createElement(Mr,{scope:r,mockOnFirstRender:!0},n=>this.renderChildren(n))}};Hr.defaultId="wb-id";const D=400,ee=700,Vr=900,we="@media (max-width: 1023px)",ke="@media (min-width: 1024px)",j={display:"block"},z='Lato, "Noto Sans", sans-serif',De='"Noto Serif", serif',Br="Inconsolata, monospace",N=w.StyleSheet.create({Title:l({},j,{fontFamily:z,fontWeight:Vr,[ke]:{fontSize:36,lineHeight:"40px"},[we]:{fontSize:28,lineHeight:"32px"}}),Tagline:l({},j,{fontFamily:z,fontWeight:D,fontSize:20,lineHeight:"24px"}),HeadingLarge:l({},j,{fontFamily:z,fontWeight:ee,[ke]:{fontSize:28,lineHeight:"32px"},[we]:{fontSize:24,lineHeight:"28px"}}),HeadingMedium:l({},j,{fontFamily:z,fontWeight:ee,[ke]:{fontSize:24,lineHeight:"28px"},[we]:{fontSize:22,lineHeight:"26px"}}),HeadingSmall:l({},j,{fontFamily:z,fontWeight:ee,fontSize:20,lineHeight:"24px"}),HeadingXSmall:l({},j,{fontFamily:z,fontWeight:ee,fontSize:12,lineHeight:"16px",letterSpacing:.6,textTransform:"uppercase"}),BodySerifBlock:l({},j,{fontFamily:De,fontWeight:D,fontSize:22,lineHeight:"28px"}),BodySerif:l({},j,{fontFamily:De,fontWeight:D,fontSize:18,lineHeight:"22px"}),BodyMonospace:l({},j,{fontFamily:Br,fontWeight:D,fontSize:17,lineHeight:"22px"}),Body:l({},j,{fontFamily:z,fontWeight:D,fontSize:16,lineHeight:"22px"}),LabelLarge:l({},j,{fontFamily:z,fontWeight:ee,fontSize:16,lineHeight:"20px"}),LabelMedium:l({},j,{fontFamily:z,fontWeight:D,fontSize:16,lineHeight:"20px"}),LabelSmall:l({},j,{fontFamily:z,fontWeight:D,fontSize:14,lineHeight:"18px"}),LabelXSmall:l({},j,{fontFamily:z,fontWeight:D,fontSize:12,lineHeight:"16px"}),Caption:l({},j,{fontFamily:z,fontWeight:D,fontSize:14,lineHeight:"20px"}),Footnote:l({},j,{fontFamily:z,fontWeight:D,fontSize:12,lineHeight:"18px"})}),Gr=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="h1"}=e,o=f(e,Gr);return i.createElement(I,l({},o,{tag:s,style:[N.Title,n],ref:r}),t)});const Kr=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="h2"}=e,o=f(e,Kr);return i.createElement(I,l({},o,{tag:s,style:[N.HeadingLarge,n],ref:r}),t)});const Xr=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="h3"}=e,o=f(e,Xr);return i.createElement(I,l({},o,{tag:s,style:[N.HeadingMedium,n],ref:r}),t)});const Jr=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="h4"}=e,o=f(e,Jr);return i.createElement(I,l({},o,{tag:s,style:[N.HeadingSmall,n],ref:r}),t)});const Yr=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="h4"}=e,o=f(e,Yr);return i.createElement(I,l({},o,{tag:s,style:[N.HeadingXSmall,n],ref:r}),t)});const Zr=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="span"}=e,o=f(e,Zr);return i.createElement(I,l({},o,{tag:s,style:[N.BodySerifBlock,n],ref:r}),t)});const Qr=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="span"}=e,o=f(e,Qr);return i.createElement(I,l({},o,{tag:s,style:[N.BodySerif,n],ref:r}),t)});const et=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="span"}=e,o=f(e,et);return i.createElement(I,l({},o,{tag:s,style:[N.BodyMonospace,n],ref:r}),t)});const rt=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="span"}=e,o=f(e,rt);return i.createElement(I,l({},o,{tag:s,style:[N.Body,n],ref:r}),t)});const tt=["style","children","tag"],nt=i.forwardRef(function(e,r){let{style:n,children:t,tag:s="span"}=e,o=f(e,tt);return i.createElement(I,l({},o,{tag:s,style:[N.LabelLarge,n],ref:r}),t)}),at=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="span"}=e,o=f(e,at);return i.createElement(I,l({},o,{tag:s,style:[N.LabelMedium,n],ref:r}),t)});const it=["style","children","tag"],st=i.forwardRef(function(e,r){let{style:n,children:t,tag:s="span"}=e,o=f(e,it);return i.createElement(I,l({},o,{tag:s,style:[N.LabelSmall,n],ref:r}),t)}),ot=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="span"}=e,o=f(e,ot);return i.createElement(I,l({},o,{tag:s,style:[N.LabelXSmall,n],ref:r}),t)});const lt=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="span"}=e,o=f(e,lt);return i.createElement(I,l({},o,{tag:s,style:[N.Tagline,n],ref:r}),t)});const ut=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="span"}=e,o=f(e,ut);return i.createElement(I,l({},o,{tag:s,style:[N.Caption,n],ref:r}),t)});const dt=["style","children","tag"];i.forwardRef(function(e,r){let{style:n,children:t,tag:s="span"}=e,o=f(e,dt);return i.createElement(I,l({},o,{tag:s,style:[N.Footnote,n],ref:r}),t)});const yt=a=>({small:16,medium:24,large:48,xlarge:96})[a],mt=["color","icon","size","style","testId","className"],ht=M("span"),xe=i.forwardRef(function(e,r){const{color:n="currentColor",icon:t,size:s="small",style:o,testId:u,className:m}=e,y=f(e,mt),g=yt(s),p=`${m??""}`,h=gt(n,g);return i.createElement(ht,l({},y,{className:p,style:[Oe.svg,h.icon,{maskImage:`url(${t})`},o],"data-testid":u,ref:r}))}),Ue={},gt=(a,e)=>{const r=`${a}-${e}`;if(Oe[r])return Oe[r];const n={icon:{backgroundColor:a,width:e,height:e}};return Ue[r]=w.StyleSheet.create(n),Ue[r]},Oe=w.StyleSheet.create({svg:{display:"inline-block",verticalAlign:"text-bottom",flexShrink:0,flexGrow:0,maskSize:"100%",maskRepeat:"no-repeat",maskPosition:"center"}});xe.displayName="PhosphorIcon";const ge={color:{bg:{action:{default:d.blue,active:d.activeBlue,inverse:d.fadedBlue},critical:{default:d.red,active:d.activeRed,inverse:d.fadedRed},primary:{default:d.white,disabled:d.offBlack32,inverse:d.darkBlue},secondary:{default:"none",inverse:"none",focus:d.white,active:{action:d.fadedBlue,critical:d.fadedRed}},tertiary:{hover:d.white},icon:{secondaryHover:"transparent"}},text:{disabled:d.offBlack32,inverse:d.white,primary:{disabled:d.white64},secondary:{inverse:d.white50},icon:{secondaryHover:"inherit"}},border:{disabled:d.offBlack32,primary:{inverse:d.white},secondary:{action:d.offBlack50,critical:d.offBlack50,inverse:d.white50},tertiary:{inverse:d.white}}},border:{width:{secondary:C.width.hairline,focused:C.width.thin,disabled:C.width.thin},radius:{default:C.radius.medium_4,tertiary:C.radius.xSmall_2,small:C.radius.medium_4,large:C.radius.large_6,icon:C.radius.full}},size:{height:{tertiaryHover:R.xxxxSmall_2,small:R.xLarge_32,medium:40,large:56}},margin:{icon:{offset:-R.xxxxSmall_2}},padding:{xsmall:R.xxxxSmall_2,small:R.xxSmall_6,medium:R.small_12,large:R.medium_16,xLarge:R.xLarge_32},font:{size:{large:18},lineHeight:{large:Te.lineHeight.medium},weight:{default:Te.weight.bold}}},ct=Je(ge,{color:{bg:{secondary:{default:d.offWhite,active:{action:d.fadedBlue8,critical:d.fadedRed8},focus:d.offWhite},icon:{secondaryHover:d.fadedBlue16}},border:{secondary:{action:d.fadedBlue,critical:d.fadedRed}},text:{icon:{secondaryHover:d.blue}}},border:{radius:{default:C.radius.xLarge_12,small:C.radius.large_6,large:C.radius.xLarge_12},width:{focused:C.width.hairline}},margin:{icon:{offset:-R.xSmall_8}},font:{weight:{default:Te.weight.regular}}}),pt={default:ge,khanmigo:ct},or=Ye(ge);function bt(a){const e=i.useContext(Qe),r=pt[e]||ge;return i.createElement(or.Provider,{value:r},a.children)}function Me({icon:a,size:e,style:r,testId:n}){const t={"aria-hidden":!0,color:"currentColor",style:r,testId:n};switch(e){case"small":return i.createElement(xe,l({},t,{size:"small",icon:a}));case"medium":default:return i.createElement(xe,l({},t,{size:"medium",icon:a}))}}const ft=["children","skipClientNav","color","disabled","focused","hovered","href","kind","labelStyle","light","pressed","size","style","testId","type","spinner","startIcon","endIcon","id","waiting"],vt=M("a"),wt=M("button"),kt=M(he),qt=i.forwardRef(function(e,r){const{theme:n,themeName:t}=Ze(or),s=kr(Tt,n),o=u=>{const{children:m,skipClientNav:y,color:g,disabled:p,focused:h,hovered:k,href:v=void 0,kind:c="primary",labelStyle:q,light:O=!1,pressed:T,size:A="medium",style:E,testId:b,type:x=void 0,spinner:W,startIcon:S,endIcon:U,id:$}=e,B=f(e,ft),_=Rt(g,c,O,A,n,t),F=W||p,se=[s.shared,F&&s.disabled,S&&s.withStartIcon,U&&s.withEndIcon,_.default,F&&_.disabled,c!=="tertiary"&&!F&&(T?_.active:(k||h)&&_.focus),c==="tertiary"&&!T&&h&&[_.focus,F&&_.disabledFocus],A==="small"&&s.small,A==="large"&&s.large],be=l({"data-testid":b,id:$,role:"button",style:[se,E]},B),br=A==="small"?st:nt,fr=i.createElement(br,{style:[s.text,A==="large"&&s.largeText,q,W&&s.hiddenText,c==="tertiary"&&s.textWithFocus,c==="tertiary"&&!F&&(T?[_.hover,_.active]:k&&_.hover)],testId:b?`${b}-inner-label`:void 0},m),vr={medium:"small",small:"xsmall",large:"medium"},ze=A==="small"?"small":"medium",fe=i.createElement(i.Fragment,null,S&&i.createElement(Fe,{style:s.iconWrapper},i.createElement(Me,{size:ze,icon:S,style:[s.startIcon,c==="tertiary"&&s.tertiaryStartIcon],testId:b?`${b}-start-icon`:void 0})),fr,W&&i.createElement(Ar,{style:s.spinner,size:vr[A],light:c==="primary",testId:`${b||"button"}-spinner`}),U&&i.createElement(Fe,{testId:b?`${b}-end-icon-wrapper`:void 0,style:[te.endIcon,s.iconWrapper,s.endIconWrapper,c==="tertiary"&&s.endIconWrapperTertiary,(h||k)&&c!=="primary"&&s.iconWrapperSecondaryHovered]},i.createElement(Me,{size:ze,icon:U,testId:b?`${b}-end-icon`:void 0})));return v&&!F?u&&!y&&er(v)?i.createElement(kt,l({},be,{to:v,ref:r}),fe):i.createElement(vt,l({},be,{href:v,ref:r}),fe):i.createElement(wt,l({type:x||"button"},be,{"aria-disabled":F,ref:r}),fe)};return i.createElement(Z.Consumer,null,u=>o(u))}),Tt=a=>({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",height:a.size.height.medium,paddingTop:0,paddingBottom:0,paddingLeft:a.padding.large,paddingRight:a.padding.large,border:"none",borderRadius:a.border.radius.default,cursor:"pointer",outline:"none",textDecoration:"none",boxSizing:"border-box",touchAction:"manipulation",userSelect:"none",":focus":{WebkitTapHighlightColor:"rgba(0,0,0,0)"}},disabled:{cursor:"auto"},small:{borderRadius:a.border.radius.small,height:a.size.height.small},large:{borderRadius:a.border.radius.large,height:a.size.height.large},text:{alignItems:"center",fontWeight:a.font.weight.default,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",display:"inline-block",pointerEvents:"none"},largeText:{fontSize:a.font.size.large,lineHeight:`${a.font.lineHeight.large}px`},textWithFocus:{position:"relative"},hiddenText:{visibility:"hidden"},spinner:{position:"absolute"},startIcon:{marginRight:a.padding.small,marginLeft:a.margin.icon.offset},tertiaryStartIcon:{marginLeft:0},endIcon:{marginLeft:a.padding.small},iconWrapper:{borderRadius:a.border.radius.icon,padding:a.padding.xsmall,minWidth:"auto"},iconWrapperSecondaryHovered:{backgroundColor:a.color.bg.icon.secondaryHover,color:a.color.text.icon.secondaryHover},endIconWrapper:{marginLeft:a.padding.small,marginRight:a.margin.icon.offset},endIconWrapperTertiary:{marginRight:0}}),te={},Rt=(a="default",e,r,n,t,s)=>{const o=a==="destructive"?t.color.bg.critical.default:t.color.bg.action.default,u=`${o}-${e}-${r}-${n}-${s}`;if(te[u])return te[u];const m=a==="destructive"?t.color.bg.critical.inverse:t.color.bg.action.inverse,y=a==="destructive"?t.color.bg.critical.active:t.color.bg.action.active,g=n==="large"?t.padding.xLarge:t.padding.large;let p={};if(e==="primary"){const h=r?t.color.bg.primary.inverse:t.color.bg.primary.default;p={default:{background:r?t.color.bg.primary.default:o,color:r?o:t.color.text.inverse,paddingLeft:g,paddingRight:g},focus:{boxShadow:`0 0 0 1px ${h}, 0 0 0 3px ${r?t.color.bg.primary.default:o}`},active:{boxShadow:`0 0 0 1px ${h}, 0 0 0 3px ${r?m:y}`,background:r?m:y,color:r?y:m},disabled:{background:r?m:t.color.bg.primary.disabled,color:r?o:t.color.text.primary.disabled,cursor:"default",":focus":{boxShadow:`0 0 0 1px ${r?t.color.bg.primary.disabled:t.color.bg.primary.default}, 0 0 0 3px ${r?m:t.color.bg.primary.disabled}`}}}}else if(e==="secondary"){const h=a==="destructive"?t.color.border.secondary.critical:t.color.border.secondary.action,k=a==="destructive"?t.color.bg.secondary.active.critical:t.color.bg.secondary.active.action;p={default:{background:r?t.color.bg.secondary.inverse:t.color.bg.secondary.default,color:r?t.color.text.inverse:o,borderColor:r?t.color.border.secondary.inverse:h,borderStyle:"solid",borderWidth:t.border.width.secondary,paddingLeft:g,paddingRight:g},focus:{background:r?t.color.bg.secondary.inverse:t.color.bg.secondary.focus,borderColor:"transparent",outlineColor:r?t.color.border.primary.inverse:o,outlineStyle:"solid",outlineWidth:t.border.width.focused},active:{background:r?y:k,color:r?m:y,borderColor:"transparent",outlineColor:r?m:y,outlineStyle:"solid",outlineWidth:t.border.width.focused},disabled:{color:r?t.color.text.secondary.inverse:t.color.text.disabled,outlineColor:r?m:t.color.border.disabled,cursor:"default",":focus":{outlineColor:r?t.color.border.secondary.inverse:t.color.border.disabled,outlineStyle:"solid",outlineWidth:t.border.width.disabled}}}}else if(e==="tertiary")p={default:{background:"none",color:r?t.color.text.inverse:o,paddingLeft:0,paddingRight:0},hover:{":after":{content:"''",position:"absolute",height:t.size.height.tertiaryHover,width:"100%",right:0,bottom:0,background:r?t.color.bg.tertiary.hover:o,borderRadius:t.border.radius.tertiary}},focus:{outlineStyle:"solid",outlineColor:r?t.color.border.tertiary.inverse:o,outlineWidth:t.border.width.focused,borderRadius:t.border.radius.default},active:{color:r?m:y,":after":{height:t.size.height.tertiaryHover,background:r?m:y}},disabled:{color:r?m:t.color.text.disabled,cursor:"default"},disabledFocus:{outlineColor:r?t.color.border.tertiary.inverse:t.color.border.disabled}};else throw new Error("Button kind not recognized");return te[u]=w.StyleSheet.create(p),te[u]},At=["href","type","children","skipClientNav","onClick","beforeNav","safeWithNav","tabIndex","target","rel","color","kind","light","size","disabled","spinner"],xt=i.forwardRef(function(e,r){const{href:n=void 0,type:t=void 0,children:s,skipClientNav:o,onClick:u,beforeNav:m=void 0,safeWithNav:y=void 0,tabIndex:g,target:p,rel:h,color:k="default",kind:v="primary",light:c=!1,size:q="medium",disabled:O=!1,spinner:T=!1}=e,A=f(e,At),E=b=>{const x=rr(n,o,b),W=(S,U)=>i.createElement(qt,l({},A,S,U,{disabled:O,spinner:T||S.waiting,color:k,kind:v,light:c,size:q,skipClientNav:o,href:n,target:p,type:t,tabIndex:g,ref:r}),s);return m?i.createElement(x,{disabled:T||O,href:n,role:"button",type:t,onClick:u,beforeNav:m,safeWithNav:y,rel:h},W):i.createElement(x,{disabled:T||O,href:n,role:"button",type:t,onClick:u,safeWithNav:y,target:p,rel:h},W)};return i.createElement(bt,null,i.createElement(Z.Consumer,null,b=>E(b)))});function lr(a){const e=[];if(a)if(Array.isArray(a))for(const r of a)e.push(...lr(r));else e.push(a);else return e;return e}function ur(a){const e=[],r=[];if(!a)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;lr(a).forEach(s=>{const o=s._definition;if(o!=null)if(n){const u={};for(const[m,y]of Object.entries(o))u[m.replace(/-[a-z]/g,g=>g[1].toUpperCase())]=y;r.push(u)}else e.push(s);else r.push(s)});const t=Object.assign({},...r);if(r.length>0&&!n){const s=w.StyleSheet.create({inlineStyles:t});e.push(s.inlineStyles)}return{style:n?t:{},className:w.css(...e)}}const Ot=["children","style","tag","testId"],Ct=/^h[1-6]$/,He=w.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}});i.forwardRef(function(e,r){let{children:n,style:t,tag:s="span",testId:o}=e,u=f(e,Ot);const m=Ct.test(s),y=ur([He.text,m&&He.header,t]),g=u.className?[u.className,y.className].join(" "):y.className;return i.createElement(s,l({},u,{style:y.style,className:g,"data-testid":o,ref:r}),n)});const Wt=["className","style"];function H(a,e){return i.forwardRef((r,n)=>{const{className:t,style:s}=r,o=f(r,Wt),u=typeof a=="string"?jt[a]:null,{className:m,style:y}=ur([u,e,s]);return i.createElement(a,l({},o,{ref:n,className:[m,t].filter(Boolean).join(" "),style:y}))})}const jt=w.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),It=["testId","tag"],ae=w.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}}),Nt=H("div",ae.default),Et=H("article",ae.default),St=H("aside",ae.default),Pt=H("nav",ae.default),zt=H("section",ae.default);i.forwardRef(function(e,r){const{testId:n,tag:t="div"}=e,s=f(e,It),o=l({},s,{"data-testid":n});switch(t){case"article":return i.createElement(Et,l({},o,{ref:r}));case"aside":return i.createElement(St,l({},o,{ref:r}));case"nav":return i.createElement(Pt,l({},o,{ref:r}));case"section":return i.createElement(zt,l({},o,{ref:r}));case"div":return i.createElement(Nt,l({},o,{ref:r}));default:throw Error(`${t} is not an allowed value for the 'tag' prop`)}});let K=function(a){return a.Root="root",a.Initial="initial",a.Standard="standard",a}({});const de=i.createContext(K.Root);de.displayName="RenderStateContext";let Lt=class extends i.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:r,fallback:n}=this.props;return this._isTheRootComponent=!0,e?i.createElement(de.Provider,{value:K.Standard},r()):n?i.createElement(de.Provider,{value:K.Initial},n()):null}_maybeRender(e){const{children:r,fallback:n}=this.props;switch(e){case K.Root:return this._renderAsRootComponent();case K.Initial:return n?n():null;case K.Standard:return r()}{var t;return console.log(`We got a render state we don't understand: "${(t=JSON.stringify(e))!=null?t:""}"`),this._maybeRender(K.Root)}}render(){return i.createElement(de.Consumer,null,e=>this._maybeRender(e))}},dr=class yr{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const t=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${t}`},e=typeof e=="string"?e:"";const r=e.toLowerCase();if(!this._hasValidIdChars(r))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${r}-${yr._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}};dr._factoryUniquenessCounter=0;let Ce=class{get(e){return e}};Ce.Default=new Ce;var _t=Ce.Default;let $t=class extends i.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:r,mockOnFirstRender:n,scope:t}=this.props;return e?n?r(_t):null:(this._idFactory||(this._idFactory=new dr(t)),r(this._idFactory))}render(){return i.createElement(Lt,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}},Ft=class mr extends i.Component{renderChildren(e){const{id:r,children:n}=this.props,t=e?e.get(mr.defaultId):r;if(!t)throw new Error("Did not get an identifier factory nor a id prop");return n(t)}render(){const{id:e,scope:r}=this.props;return e?this.renderChildren():i.createElement($t,{scope:r,mockOnFirstRender:!0},n=>this.renderChildren(n))}};Ft.defaultId="wb-id";const Dt=a=>({small:16,medium:24,large:48,xlarge:96})[a],Ut=["color","icon","size","style","testId","className"],Mt=H("span"),hr=i.forwardRef(function(e,r){const{color:n="currentColor",icon:t,size:s="small",style:o,testId:u,className:m}=e,y=f(e,Ut),g=Dt(s),p=`${m??""}`,h=Ht(n,g);return i.createElement(Mt,l({},y,{className:p,style:[We.svg,h.icon,{maskImage:`url(${t})`},o],"data-testid":u,ref:r}))}),Ve={},Ht=(a,e)=>{const r=`${a}-${e}`;if(We[r])return We[r];const n={icon:{backgroundColor:a,width:e,height:e}};return Ve[r]=w.StyleSheet.create(n),Ve[r]},We=w.StyleSheet.create({svg:{display:"inline-block",verticalAlign:"text-bottom",flexShrink:0,flexGrow:0,maskSize:"100%",maskRepeat:"no-repeat",maskPosition:"center"}});hr.displayName="PhosphorIcon";const Vt=["children","skipClientNav","focused","hovered","href","inline","kind","light","visitable","pressed","style","testId","waiting","target","startIcon","endIcon"],Bt=H("a"),Gt=H(he),Be=i.forwardRef(function(e,r){const n=t=>{const{children:s,skipClientNav:o,focused:u,hovered:m,href:y,inline:g=!1,kind:p="primary",light:h=!1,visitable:k=!1,pressed:v,style:c,testId:q,target:O,startIcon:T,endIcon:A}=e,E=f(e,Vt),b=Xt(g,p,h,k),x=g?b.restingInline:b.resting,W=[Kt.shared,x,v&&b.active,!v&&m&&b.hover,!v&&u&&b.focus],S=l({"data-testid":q,style:[W,c],target:O},E),$=new URL(y,window.location.origin).origin!==window.location.origin,B=i.createElement(hr,{icon:xr,size:"small",style:[J.endIcon,J.centered],testId:"external-icon"});let _,F;T&&(_=i.cloneElement(T,l({style:[J.startIcon,J.centered],testId:"start-icon","aria-hidden":"true"},T.props))),A&&(F=i.cloneElement(A,l({style:[J.endIcon,J.centered],testId:"end-icon","aria-hidden":"true"},A.props)));const se=i.createElement(i.Fragment,null,T&&_,s,A?F:$&&O==="_blank"&&B);return t&&!o&&er(y)?i.createElement(Gt,l({},S,{to:y,ref:r}),se):i.createElement(Bt,l({},S,{href:y,ref:r}),se)};return i.createElement(Z.Consumer,null,t=>n(t))}),oe={},J=w.StyleSheet.create({startIcon:{marginInlineEnd:R.xxxSmall_4},endIcon:{marginInlineStart:R.xxxSmall_4},centered:{verticalAlign:"-10%"}}),Kt=w.StyleSheet.create({shared:{cursor:"pointer",textDecoration:"none",outline:"none",alignItems:"center"}}),Xt=(a,e,r,n)=>{const t=`${e}-${a.toString()}-${r.toString()}-${n.toString()}`;if(oe[t])return oe[t];if(e==="secondary"&&r)throw new Error("Secondary Light links are not supported");if(n&&e!=="primary")throw new Error("Only primary link is visitable");const{blue:s,purple:o,white:u,offBlack:m,offBlack32:y,offBlack64:g}=d,p="#fa50ae",h=ve(Le(m,.08),o),k=d.fadedBlue,v=ve(Le(u,.32),p),c=d.activeBlue,T=e==="primary"?r?u:s:a?m:g,b=e==="primary"?r?k:c:a?c:m,x=n?{":visited":{color:r?p:h}}:Object.freeze({}),W=n?{":visited":{color:r?v:ve(y,h)}}:Object.freeze({}),S={resting:l({color:T},x),restingInline:l({color:T,textDecoration:"underline currentcolor solid",textUnderlineOffset:2},x),hover:l({textDecoration:"underline currentcolor solid",color:T},x),focus:{":focus-visible":l({color:T,outline:`1px solid ${r?u:s}`,borderRadius:3},x)},active:l({color:b,textDecoration:"underline currentcolor solid"},W)};return oe[t]=w.StyleSheet.create(S),oe[t]},Jt=["onClick","beforeNav","safeWithNav","href","skipClientNav","children","tabIndex","onKeyDown","onKeyUp","target","inline","kind","light","visitable"],Yt=i.forwardRef(function(e,r){const{onClick:n,beforeNav:t=void 0,safeWithNav:s,href:o,skipClientNav:u,children:m,tabIndex:y,onKeyDown:g,onKeyUp:p,target:h=void 0,inline:k=!1,kind:v="primary",light:c=!1,visitable:q=!1}=e,O=f(e,Jt),T=A=>{const E=rr(o,u,A);return t?i.createElement(E,{disabled:!1,href:o,role:"link",onClick:n,beforeNav:t,safeWithNav:s,onKeyDown:g,onKeyUp:p},(b,x)=>{let W=l({},(_e(x),x));return i.createElement(Be,l({},O,b,W,{skipClientNav:u,href:o,target:h,tabIndex:y,inline:k,kind:v,light:c,visitable:q,ref:r}),m)}):i.createElement(E,{disabled:!1,href:o,role:"link",onClick:n,safeWithNav:s,target:h,onKeyDown:g,onKeyUp:p},(b,x)=>{let W=l({},(_e(x),x));return i.createElement(Be,l({},O,b,W,{skipClientNav:u,href:o,target:h,tabIndex:y,inline:k,kind:v,light:c,visitable:q,ref:r}),m)})};return i.createElement(Z.Consumer,null,A=>T(A))}),Zt=""+new URL("info-vUJD1n-8.svg",import.meta.url).href,Qt=""+new URL("smiley-xdY6f5H9.svg",import.meta.url).href,en=""+new URL("warning-ctw6EWuu.svg",import.meta.url).href,rn=""+new URL("warning-circle-OrBK1ju8.svg",import.meta.url).href,tn=a=>{switch(a){case"success":return{color:d.green,icon:Qt,role:"status"};case"warning":return{color:d.gold,icon:en,role:"alert",ariaLive:"polite"};case"critical":return{color:d.red,icon:rn,role:"alert"};default:return{color:d.blue,icon:Zt,role:"status"}}},nn=a=>{const{actions:e,"aria-label":r,dismissAriaLabel:n="Dismiss banner.",onDismiss:t,kind:s="info",layout:o,text:u,testId:m,icon:y}=a,g=()=>e==null?void 0:e.filter(Boolean).map((h,k)=>{if(h.type==="custom")return i.createElement(L,{style:P.action,key:`custom-action-${k}`},h.node);const v=h.onClick;if(h.type==="link"){var c;return i.createElement(L,{style:P.action,key:h.title},i.createElement(Yt,{kind:"primary",href:h.href,onClick:v,"aria-label":(c=h.ariaLabel)!=null?c:h.title,style:P.link},h.title))}else{var q;return i.createElement(L,{style:P.action,key:h.title},i.createElement(xt,{kind:"tertiary",size:"small","aria-label":(q=h.ariaLabel)!=null?q:h.title,onClick:v},h.title))}}),p=tn(s);return i.createElement(L,{style:[P.containerOuter,o==="floating"&&P.floatingBorder,{borderInlineStartColor:p.color}],role:p.role,"aria-label":r,"aria-live":p.ariaLive,testId:m},i.createElement(L,{style:[P.backgroundColor,{backgroundColor:p.color}]}),i.createElement(L,{style:P.containerInner},i.createElement(Re,{icon:y||p.icon,size:"medium",style:P.icon,"aria-label":s,testId:"banner-kind-icon",role:"img"}),i.createElement(L,{style:P.labelAndButtonsContainer},i.createElement(L,{style:P.labelContainer},i.createElement(Or,null,u)),e&&i.createElement(L,{style:P.actionsContainer},g())),t?i.createElement(L,{style:P.dismissContainer},i.createElement(qr,{icon:Tr,kind:"tertiary",onClick:t,style:P.dismiss,"aria-label":n})):null))},P=w.StyleSheet.create({backgroundColor:{position:"absolute",top:0,bottom:0,left:0,right:0,opacity:.08},containerOuter:{borderInlineStartWidth:R.xxSmall_6,width:"100%",backgroundColor:d.white},containerInner:{flexDirection:"row",padding:R.xSmall_8},icon:{marginTop:R.xSmall_8,marginBottom:R.xSmall_8,marginInlineStart:R.xxxxSmall_2,marginInlineEnd:R.xSmall_8,alignSelf:"flex-start",color:d.offBlack64},labelAndButtonsContainer:{flex:1,flexDirection:"row",alignItems:"center",alignContent:"center",flexWrap:"wrap",justifyContent:"space-between"},labelContainer:{flexShrink:1,margin:R.xSmall_8,textAlign:"start",overflowWrap:"break-word"},actionsContainer:{flexDirection:"row",justifyContent:"flex-start",marginTop:R.xSmall_8,marginBottom:R.xSmall_8,height:18,alignItems:"center"},action:{marginLeft:R.xSmall_8,marginRight:R.xSmall_8,justifyContent:"center"},link:{fontSize:14},dismiss:{flexShrink:1},dismissContainer:{height:40,width:40,justifyContent:"center",alignItems:"center",marginLeft:R.xSmall_8,marginRight:R.xSmall_8},floatingBorder:{borderRadius:4,overflow:"hidden"}}),an="6px",ha=1e3,ga="#71B307",ca="#BED47A",pa="#314453",ba="#4D6779",fa="#C42420",va="#4898FC",wa="#46A8BF",ka="#00294A",sn="#CCCCCC";function gr(a){const e=[];if(a)if(Array.isArray(a))for(const r of a)e.push(...gr(r));else e.push(a);else return e;return e}function cr(a){const e=[],r=[];if(!a)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;gr(a).forEach(s=>{const o=s._definition;if(o!=null)if(n){const u={};for(const[m,y]of Object.entries(o))u[m.replace(/-[a-z]/g,g=>g[1].toUpperCase())]=y;r.push(u)}else e.push(s);else r.push(s)});const t=Object.assign({},...r);if(r.length>0&&!n){const s=w.StyleSheet.create({inlineStyles:t});e.push(s.inlineStyles)}return{style:n?t:{},className:w.css(...e)}}const on=["children","style","tag","testId"],ln=/^h[1-6]$/,Ge=w.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}});i.forwardRef(function(e,r){let{children:n,style:t,tag:s="span",testId:o}=e,u=f(e,on);const m=ln.test(s),y=cr([Ge.text,m&&Ge.header,t]),g=u.className?[u.className,y.className].join(" "):y.className;return i.createElement(s,l({},u,{style:y.style,className:g,"data-testid":o,ref:r}),n)});const un=["className","style"];function V(a,e){return i.forwardRef((r,n)=>{const{className:t,style:s}=r,o=f(r,un),u=typeof a=="string"?dn[a]:null,{className:m,style:y}=cr([u,e,s]);return i.createElement(a,l({},o,{ref:n,className:[m,t].filter(Boolean).join(" "),style:y}))})}const dn=w.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),yn=["testId","tag"],ie=w.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}}),mn=V("div",ie.default),hn=V("article",ie.default),gn=V("aside",ie.default),cn=V("nav",ie.default),pn=V("section",ie.default);i.forwardRef(function(e,r){const{testId:n,tag:t="div"}=e,s=f(e,yn),o=l({},s,{"data-testid":n});switch(t){case"article":return i.createElement(hn,l({},o,{ref:r}));case"aside":return i.createElement(gn,l({},o,{ref:r}));case"nav":return i.createElement(cn,l({},o,{ref:r}));case"section":return i.createElement(pn,l({},o,{ref:r}));case"div":return i.createElement(mn,l({},o,{ref:r}));default:throw Error(`${t} is not an allowed value for the 'tag' prop`)}});let X=function(a){return a.Root="root",a.Initial="initial",a.Standard="standard",a}({});const ye=i.createContext(X.Root);ye.displayName="RenderStateContext";class bn extends i.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:r,fallback:n}=this.props;return this._isTheRootComponent=!0,e?i.createElement(ye.Provider,{value:X.Standard},r()):n?i.createElement(ye.Provider,{value:X.Initial},n()):null}_maybeRender(e){const{children:r,fallback:n}=this.props;switch(e){case X.Root:return this._renderAsRootComponent();case X.Initial:return n?n():null;case X.Standard:return r()}{var t;return console.log(`We got a render state we don't understand: "${(t=JSON.stringify(e))!=null?t:""}"`),this._maybeRender(X.Root)}}render(){return i.createElement(ye.Consumer,null,e=>this._maybeRender(e))}}class ce{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const t=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${t}`},e=typeof e=="string"?e:"";const r=e.toLowerCase();if(!this._hasValidIdChars(r))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${r}-${ce._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}}ce._factoryUniquenessCounter=0;class je{get(e){return e}}je.Default=new je;var fn=je.Default;class vn extends i.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:r,mockOnFirstRender:n,scope:t}=this.props;return e?n?r(fn):null:(this._idFactory||(this._idFactory=new ce(t)),r(this._idFactory))}render(){return i.createElement(bn,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}}class Ne extends i.Component{renderChildren(e){const{id:r,children:n}=this.props,t=e?e.get(Ne.defaultId):r;if(!t)throw new Error("Did not get an identifier factory nor a id prop");return n(t)}render(){const{id:e,scope:r}=this.props;return e?this.renderChildren():i.createElement(vn,{scope:r,mockOnFirstRender:!0},n=>this.renderChildren(n))}}Ne.defaultId="wb-id";const Ke=a=>{switch(a){case"link":return{triggerOnEnter:!0,triggerOnSpace:!1};case"checkbox":case"radio":case"listbox":return{triggerOnEnter:!1,triggerOnSpace:!0};case"button":case"menuitem":case"menu":case"option":default:return{triggerOnEnter:!0,triggerOnSpace:!0}}},wn={onClick:()=>{},onMouseEnter:()=>{},onMouseLeave:()=>{},onMouseDown:()=>{},onMouseUp:()=>{},onTouchStart:()=>{},onTouchEnd:()=>{},onTouchCancel:()=>{},onKeyDown:()=>{},onKeyUp:()=>{}},Y={enter:13,space:32},Xe={hovered:!1,focused:!1,pressed:!1,waiting:!1};class Ee extends i.Component{static getDerivedStateFromProps(e,r){return e.disabled?l({},Xe,{focused:r.focused}):null}constructor(e){super(e),this.waitingForClick=void 0,this.enterClick=void 0,this.handleClick=r=>{const{onClick:n=void 0,beforeNav:t=void 0,safeWithNav:s=void 0}=this.props;this.enterClick||((n||t||s)&&(this.waitingForClick=!1),this.runCallbackAndMaybeNavigate(r))},this.handleMouseEnter=r=>{this.waitingForClick||this.setState({hovered:!0})},this.handleMouseLeave=()=>{this.waitingForClick||this.setState({hovered:!1,pressed:!1,focused:!1})},this.handleMouseDown=r=>{this.props.onMouseDown&&this.props.onMouseDown(r),this.setState({pressed:!0})},this.handleMouseUp=r=>{this.props.onMouseUp&&this.props.onMouseUp(r),this.setState({pressed:!1,focused:!1})},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=r=>{const{onKeyDown:n,role:t}=this.props;n&&n(r);const s=r.which||r.keyCode,{triggerOnEnter:o,triggerOnSpace:u}=Ke(t);o&&s===Y.enter||u&&s===Y.space?(r.preventDefault(),this.setState({pressed:!0})):!o&&s===Y.enter&&(this.enterClick=!0)},this.handleKeyUp=r=>{const{onKeyUp:n,role:t}=this.props;n&&n(r);const s=r.which||r.keyCode,{triggerOnEnter:o,triggerOnSpace:u}=Ke(t);o&&s===Y.enter||u&&s===Y.space?(this.setState({pressed:!1,focused:!0}),this.runCallbackAndMaybeNavigate(r)):!o&&s===Y.enter&&(this.enterClick=!1)},this.handleFocus=r=>{const{onFocus:n}=this.props;this.setState({focused:!0},()=>{n&&n(r)})},this.handleBlur=r=>{this.setState({focused:!1,pressed:!1})},this.state=Xe,this.waitingForClick=!1,this.enterClick=!1}navigateOrReset(e){if(e){const{history:r,href:n,skipClientNav:t,target:s=void 0}=this.props;n&&(s==="_blank"?(window.open(n,"_blank"),this.setState({waiting:!1})):r&&!t?(r.push(n),this.setState({waiting:!1})):window.location.assign(n))}else this.setState({waiting:!1})}handleSafeWithNav(e,r){const{skipClientNav:n,history:t}=this.props;return t&&!n||this.props.target==="_blank"?(e(),this.navigateOrReset(r),Promise.resolve()):(this.state.waiting||this.setState({waiting:!0}),e().then(()=>{this.state.waiting||this.setState({waiting:!0})}).catch(s=>{}).finally(()=>{this.navigateOrReset(r)}))}runCallbackAndMaybeNavigate(e){const{onClick:r=void 0,beforeNav:n=void 0,safeWithNav:t=void 0,href:s,type:o}=this.props;let u=!0,m=!0;if(r&&r(e),e.defaultPrevented&&(u=!1,m=!1),e.preventDefault(),!s&&o==="submit"&&m){let y=e.currentTarget;for(;y;){if(y instanceof window.HTMLFormElement){const g=new window.Event("submit",{bubbles:!0,cancelable:!0});y.dispatchEvent(g);break}y=y.parentElement}}if(n)this.setState({waiting:!0}),n().then(()=>t?this.handleSafeWithNav(t,u):this.navigateOrReset(u)).catch(()=>{});else{if(t)return this.handleSafeWithNav(t,u);this.navigateOrReset(u)}}render(){const e=this.props.rel||(this.props.target==="_blank"?"noopener noreferrer":void 0),r=this.props.disabled?l({},wn,{onFocus:this.handleFocus,onBlur:this.handleBlur,tabIndex:this.props.tabIndex,rel:e}):{onClick:this.handleClick,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,onMouseDown:this.handleMouseDown,onMouseUp:this.handleMouseUp,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onTouchCancel:this.handleTouchCancel,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onFocus:this.handleFocus,onBlur:this.handleBlur,tabIndex:this.props.tabIndex,rel:e},{children:n}=this.props;return n&&n(this.state,r)}}Ee.defaultProps={disabled:!1};const Se=a=>typeof a!="string"?!1:!/^(https?:)?\/\//i.test(a)&&!/^([^#]*#[\w-]*|[\w\-.]+:)/.test(a),kn=Rr(Ee);function qn(a,e,r){return r&&e!==!0&&a&&Se(a)?kn:Ee}const Tn=["href","onClick","skipClientNav","beforeNav","safeWithNav","style","target","testId","onFocus","onKeyDown","onKeyUp","onMouseDown","onMouseUp","hideDefaultFocusRing","light","disabled","tabIndex"],Rn=V("a"),An=V("button"),xn=V(he),On=i.forwardRef(function(e,r){const n=(s,o,u)=>{const m=e.href&&!e.disabled,y=o&&!e.skipClientNav&&Se(e.href||"");return m&&y&&e.href?i.createElement(xn,l({},u,{to:e.href,role:e.role,target:e.target||void 0,"aria-disabled":e.disabled?"true":"false",ref:r}),e.children(s)):m&&!y?i.createElement(Rn,l({},u,{href:e.href,role:e.role,target:e.target||void 0,"aria-disabled":e.disabled?"true":"false",ref:r}),e.children(s)):i.createElement(An,l({},u,{type:"button","aria-disabled":e.disabled,ref:r}),e.children(s))},t=s=>{const{href:o,onClick:u,skipClientNav:m,beforeNav:y=void 0,safeWithNav:g=void 0,style:p,target:h=void 0,testId:k,onFocus:v,onKeyDown:c,onKeyUp:q,onMouseDown:O,onMouseUp:T,hideDefaultFocusRing:A,light:E,disabled:b,tabIndex:x}=e,W=f(e,Tn),S=qn(o,m,s),U=$=>[re.reset,re.link,!A&&$.focused&&(E?re.focusedLight:re.focused),b&&re.disabled,p];return y?i.createElement(S,{href:o,onClick:u,beforeNav:y,safeWithNav:g,onFocus:v,onKeyDown:c,onKeyUp:q,onMouseDown:O,onMouseUp:T,disabled:b,tabIndex:x},($,B)=>n($,s,l({},W,{"data-testid":k,style:U($)},B))):i.createElement(S,{href:o,onClick:u,safeWithNav:g,onFocus:v,onKeyDown:c,onKeyUp:q,onMouseDown:O,onMouseUp:T,target:h,disabled:b,tabIndex:x},($,B)=>n($,s,l({},W,{"data-testid":k,style:U($)},B)))};return i.createElement(Z.Consumer,null,s=>t(s))});On.defaultProps={light:!1,disabled:!1};const re=w.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:{":focus":{outline:`solid 2px ${d.blue}`}},focusedLight:{outline:`solid 2px ${d.white}`},disabled:{color:d.offBlack32,cursor:"not-allowed",":focus":{outline:"none"},":focus-visible":{outline:`solid 2px ${d.blue}`}}}),Cn=a=>{switch(a){case"xsmall":return"small";case"small":return"medium";case"medium":return"medium";case"large":return"medium"}},Wn=a=>({xsmall:24,small:32,medium:40,large:48})[a],pe={color:{bg:{hovered:"transparent",active:"transparent",disabled:"transparent",filled:{action:{hovered:"transparent",active:"transparent"},critical:{hovered:"transparent",active:"transparent"}}},stroke:{disabled:{default:d.offBlack32,inverse:d.white50},inverse:d.white,action:{default:d.blue,active:d.activeBlue,inverse:d.fadedBlue},critical:{default:d.red,active:d.activeRed,inverse:d.fadedRed},primary:{action:{hovered:d.blue,active:d.activeBlue},critical:{hovered:d.red,active:d.activeRed},inverse:{default:d.white,hovered:d.white}},secondary:{default:d.offBlack},tertiary:{default:d.offBlack64},filled:{action:{hovered:d.blue,active:d.activeBlue},critical:{hovered:d.red,active:d.activeRed}}}},border:{width:{default:C.width.thin,active:C.width.none,hovered:C.width.thin,hoveredInverse:C.width.thin},radius:{default:C.radius.medium_4}}},jn=Je(pe,{color:{bg:{hovered:d.white,active:d.white64,filled:{action:{hovered:d.blue,active:d.activeBlue},critical:{hovered:d.red,active:d.activeRed}}},stroke:{action:{inverse:d.eggplant},critical:{inverse:d.eggplant},primary:{action:{hovered:d.eggplant,active:d.eggplant},critical:{hovered:d.eggplant,active:d.eggplant},inverse:{hovered:d.eggplant}},filled:{action:{hovered:d.white,active:d.white},critical:{hovered:d.white,active:d.white}}}},border:{width:{hovered:C.width.none,hoveredInverse:C.width.none}}}),In={default:pe,khanmigo:jn},pr=Ye(pe);function Nn(a){var e;const r=i.useContext(Qe),n=(e=In[r])!=null?e:pe;return i.createElement(pr.Provider,{value:n},a.children)}const En=["color","disabled","href","icon","kind","light","size","skipClientNav","style","testId"];function Sn({icon:a,size:e}){switch(Cn(e)){case"small":return i.createElement(Re,{size:"small",color:"currentColor",icon:a});case"medium":default:return i.createElement(Re,{size:"medium",color:"currentColor",icon:a})}}const Pn=Ie("a"),zn=Ie("button"),Ln=Ie(he),_n=i.forwardRef(function(e,r){const{color:n,disabled:t,href:s,icon:o,kind:u="primary",light:m=!1,size:y="medium",skipClientNav:g,style:p,testId:h}=e,k=f(e,En),{theme:v,themeName:c}=Ze(pr),q=O=>{const T=Dn(n,u,m,y,v,c),A=[$n.shared,T.default,t&&T.disabled],E=i.createElement(Sn,{size:y,icon:o}),b=l({"data-testid":h,style:[A,p]},k);return s&&!t?O&&!g&&Se(s)?i.createElement(Ln,l({},b,{to:s,ref:r}),E):i.createElement(Pn,l({},b,{href:s,ref:r}),E):i.createElement(zn,l({type:"button"},b,{onClick:t?void 0:k.onClick,"aria-disabled":t,ref:r}),E)};return i.createElement(Z.Consumer,null,O=>q(O))}),$n=w.StyleSheet.create({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",padding:0,cursor:"pointer",border:"none",outline:"none",textDecoration:"none",background:"none",margin:-8,touchAction:"manipulation"}}),le={};function Fn(a,e,r,n,t){switch(a){case"primary":const s=t==="destructive"?e.color.stroke.primary.critical.hovered:e.color.stroke.primary.action.hovered;return{":hover":{backgroundColor:e.color.bg.hovered,color:n?e.color.stroke.primary.inverse.hovered:s,outlineColor:n?e.color.stroke.inverse:r,outlineOffset:1,outlineStyle:"solid",outlineWidth:n?e.border.width.hoveredInverse:e.border.width.hovered},":active":{backgroundColor:e.color.bg.active}};case"secondary":case"tertiary":return{":hover":{backgroundColor:t==="destructive"?e.color.bg.filled.critical.hovered:e.color.bg.filled.action.hovered,color:t==="destructive"?e.color.stroke.filled.critical.hovered:e.color.stroke.filled.action.hovered,outlineWidth:e.border.width.active},":active":{backgroundColor:t==="destructive"?e.color.bg.filled.critical.active:e.color.bg.filled.action.active,color:t==="destructive"?e.color.stroke.filled.critical.active:e.color.stroke.filled.action.active,outlineWidth:e.border.width.active}};default:return{":focus-visible":{},":hover":{},":active":{}}}}const Dn=(a="default",e,r,n,t,s)=>{const o=a==="destructive"?t.color.stroke.critical.default:t.color.stroke.action.default,u=`${o}-${e}-${r}-${n}-${s}`;if(le[u])return le[u];if(r&&e!=="primary")throw new Error("Light is only supported for primary IconButtons");const m=(()=>{switch(e){case"primary":return r?t.color.stroke.primary.inverse.default:o;case"secondary":return t.color.stroke.secondary.default;case"tertiary":return t.color.stroke.tertiary.default;default:throw new Error("IconButton kind not recognized")}})(),y=Wn(n),g=Fn(e,t,o,r,a),p=a==="destructive"?t.color.stroke.critical.inverse:t.color.stroke.action.inverse,h=a==="destructive"?t.color.stroke.critical.active:t.color.stroke.action.active,k=r?t.color.stroke.inverse:o,v=r?t.color.stroke.disabled.inverse:t.color.stroke.disabled.default,c={backgroundColor:t.color.bg.disabled,color:v,outlineColor:v},q={default:{height:y,width:y,color:m,borderRadius:t.border.radius.default,":hover":l({boxShadow:"none",color:k,borderRadius:t.border.radius.default,outlineWidth:t.border.width.default},g[":hover"]),"@media not (hover: hover)":{":hover":{boxShadow:"none",color:m,borderRadius:t.border.radius.default,outline:"none",backgroundColor:"transparent"}},":focus":{boxShadow:`0 0 0 ${t.border.width.default}px ${k}`,borderRadius:t.border.radius.default},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":l({boxShadow:"none",outlineWidth:t.border.width.default,outlineColor:k,outlineOffset:1,outlineStyle:"solid",borderRadius:t.border.radius.default},g[":focus-visible"]),":active":l({color:r?p:h,outlineWidth:t.border.width.default,outlineColor:r?p:h,outlineOffset:1,outlineStyle:"solid",borderRadius:t.border.radius.default},g[":active"])},disabled:{color:v,cursor:"not-allowed",":hover":l({},c,{outline:"none"}),":active":l({},c,{outline:"none"}),":focus":{boxShadow:`0 0 0 ${t.border.width.default}px ${v}`,borderRadius:t.border.radius.default},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":c}};return le[u]=w.StyleSheet.create(q),le[u]},Un=["color","disabled","href","kind","light","size","skipClientNav","tabIndex","target"],Mn=i.forwardRef(function(e,r){const{color:n="default",disabled:t=!1,href:s,kind:o="primary",light:u=!1,size:m="medium",skipClientNav:y,tabIndex:g,target:p}=e,h=f(e,Un);function k(c){const q=c.key;!s&&(q==="Enter"||q==="Space")&&c.preventDefault()}function v(c){const q=c.key;!s&&(q==="Enter"||q==="Space")&&h.onClick&&h.onClick(c)}return i.createElement(Nn,null,i.createElement(_n,l({},h,{color:n,disabled:t,href:s,kind:o,light:u,ref:r,skipClientNav:y,size:m,target:p,tabIndex:g,onKeyDown:k,onKeyUp:v})))}),Hn=""+new URL("corners-out-ZcPb1LY6.svg",import.meta.url).href,Pe=class Pe extends i.Component{constructor(e){super(e),this.iframeRef=i.createRef(),this.state={url:null,banner:null},this.getPhetCompatibleLocale=r=>{switch(r){case"pt-pt":return"pt";case"zh-hans":return"zh_CN";case"zh-hant":return"zh_TW";case"fa-af":return"fa_DA";default:return r}},this.displayLoadFailure=()=>{this.setState({url:null,banner:{message:this.context.strings.simulationLoadFail,kind:"critical"}})},this.locale=this.getPhetCompatibleLocale(Wr().kaLocale)}async componentDidMount(){await this.updateSimState(this.props.url)}async componentDidUpdate(e){e.url!==this.props.url&&await this.updateSimState(this.props.url)}getUserInput(){return null}async updateSimState(e){const r=Vn(e,this.locale);if(r===null){this.displayLoadFailure();return}if(!(await fetch(r)).ok){this.displayLoadFailure();return}const t=await this.showLocaleWarning(r);this.setState({url:r,banner:t?{message:this.context.strings.simulationLocaleWarning,kind:"warning"}:null})}async showLocaleWarning(e){if(!e)return!1;const n=/https:\/\/phet\.colorado\.edu\/sims\/html\/([a-zA-Z0-9-]+)\/.*/g.exec(e.toString());if(n===null)return!1;const t=n[1],s=await fetch(`https://phet.colorado.edu/sims/html/${t}/latest/string-map.json`);if(!s.ok)return!1;let o;try{o=await s.json()}catch{return!1}const u=Object.keys(o),m=this.locale.split("_")[0];for(const y of u)if(m===y.split("_")[0])return!1;return!0}render(){var r;return wr(L,{style:qe.widgetContainer,children:[this.state.banner!==null&&Q(L,{style:{marginBottom:jr},children:Q(nn,{layout:"floating",kind:this.state.banner.kind,text:this.state.banner.message})}),Q(L,{style:qe.iframeContainer,children:Q("iframe",{ref:this.iframeRef,title:this.props.description,sandbox:"allow-same-origin allow-scripts",className:w.css(qe.iframeResponsive),src:(r=this.state.url)==null?void 0:r.toString(),allow:"fullscreen"})}),this.state.url!==null&&Q(Mn,{icon:Hn,onClick:()=>{var n;(n=this.iframeRef.current)==null||n.requestFullscreen()},kind:"secondary","aria-label":"Fullscreen",style:{marginTop:5,marginBottom:5,alignSelf:"flex-end"}})]})}};Pe.contextType=Cr;let me=Pe;const Vn=(a,e)=>{if(!URL.canParse(a))return null;const r=new URL(a);return r.origin!=="https://phet.colorado.edu"?null:(r.searchParams.set("locale",e),r)},qe=w.StyleSheet.create({widgetContainer:{borderRadius:an,borderWidth:1,borderColor:sn,padding:R.medium_16,paddingBottom:0},iframeContainer:{position:"relative",overflow:"hidden",width:"100%",paddingTop:"56.25%"},iframeResponsive:{borderWidth:0,position:"absolute",top:0,left:0,bottom:0,right:0,width:"100%",height:"100%"}}),qa={name:"phet-simulation",displayName:"PhET Simulation",widget:me,isLintable:!0};me.__docgenInfo={description:"",methods:[{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"null"}}},{name:"getPhetCompatibleLocale",docblock:null,modifiers:[],params:[{name:"kaLocale",optional:!1,type:null}],returns:null},{name:"displayLoadFailure",docblock:null,modifiers:[],params:[],returns:null},{name:"updateSimState",docblock:null,modifiers:["async"],params:[{name:"urlString",optional:!1,type:{name:"string"}}],returns:null},{name:"showLocaleWarning",docblock:null,modifiers:["async"],params:[{name:"url",optional:!1,type:{name:"URL",alias:"URL"}}],returns:{type:{name:"Promise",elements:[{name:"boolean"}],raw:"Promise"}}}],displayName:"PhetSimulation",props:{widgetId:{required:!0,tsType:{name:"string"},description:""},alignment:{required:!0,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},static:{required:!0,tsType:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}]},description:""},problemNum:{required:!0,tsType:{name:"union",raw:"number | null | undefined",elements:[{name:"number"},{name:"null"},{name:"undefined"}]},description:""},apiOptions:{required:!0,tsType:{name:"Readonly",elements:[{name:"intersection",raw:`APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,elements:[{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; +import{j as e,a as i,F as f}from"./jsx-runtime-FVsy8kgq.js";import{V as t}from"./index-6h5t6F0w.js";import{H as d}from"./index-h_CiYGGb.js";import{l as k}from"./index-awljIyHI.js";import{B as q}from"./choice-E4eyMygy.js";import{r as g}from"./index-TT1qJ6UJ.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import{s as l}from"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{M as T}from"./multi-items-zAjfw5su.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{K as R}from"./ke-score-ui-xy7p6xf5.js";import{S as A}from"./side-by-side-kpK-8vW0.js";import{s as O}from"./test-dependencies-OZugV_HD.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-0C4KXdeC.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./shared-3pf9YZIg.js";import"./answer-choices-xSqM961S.js";import"./minus-bold-ONmDo3Ve.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-HXEAXx7K.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./strings-OAjNfY6D.js";import"./bundle.esm-7jAAHVxW.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const x=l.shape({blurb:l.content,question:l.content,hints:l.hints}),h={_multi:{blurb:{__type:"content",content:"",images:{},widgets:{}},hints:[{__type:"hint",content:"If two triangles are congruent, then they have the same side lengths and angle measures.",images:{},replace:!1,widgets:{}},{__type:"hint",content:"A triangle congruent to triangle $ABC$ must also have side lengths of $12$, $14$ and $20$.",images:{},replace:!1,widgets:{}},{__type:"hint",content:`The following triangle is congruent to triangle $ABC$: - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. +* A triangle with side lengths of $12$, $14$, and $20$`,images:{},replace:!1,widgets:{}}],question:{__type:"content",content:`Triangle $ABC$ has side lengths of $12$, $14$, and $20$. Which of the following triangles is congruent to triangle $ABC$ ? -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. +[[☃ radio 1]] -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. +Enter the number 3 into this field: [[☃ input-number 1]]`,widgets:{"radio 1":{alignment:"default",graded:!0,options:{choices:[{clue:"Congruent triangles have the same side lengths.",content:"A triangle with side lengths of $3$, $4$, and $5$",correct:!1},{clue:`Congruent triangles have the same side lengths. -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. +This choice is similar to triangle $ABC$.`,content:"A triangle with side lengths of $6$, $7$, and $10$",correct:!1},{clue:"Congruent triangles have the same side lengths.",content:"A triangle with side lengths of $10$, $12$, and $18$",correct:!1,isNoneOfTheAbove:!1},{clue:"Congruent triangles have the same side lengths.",content:"A triangle with side lengths of $12$, $14$, and $20$",correct:!0,isNoneOfTheAbove:!1},{clue:`Congruent triangles have the same side lengths. -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +This choice is similar to triangle $ABC$.`,content:"A triangle with side lengths of $24$, $28$, and $40$",correct:!1,isNoneOfTheAbove:!1}],countChoices:!1,deselectEnabled:!1,displayCount:null,hasNoneOfTheAbove:!1,multipleSelect:!1,randomize:!1},static:!1,type:"radio",version:{major:1,minor:0}},"input-number 1":{type:"input-number",graded:!0,options:{answerType:"number",value:"-42",simplify:"required",size:"normal",inexact:!1,maxError:.1}}}}}},v=({children:y,simpleItem:o,apiOptions:m})=>{const n=g.useRef(null),[u,a]=g.useState(null);return e(A,{leftTitle:"Multi Renderer",left:i(f,{children:[e(T.MultiRenderer,{item:o,shape:x,ref:n,dependencies:O,children:w=>y(w)}),e("div",{id:"workarea"}),e("div",{id:"hintsarea"}),e(t,{style:{flexDirection:"row",alignItems:"center"},children:e(q,{onClick:()=>{n.current&&a(n.current.score())},children:"Check"})}),e(R,{score:u})]}),jsonObject:o})};v.__docgenInfo={description:"",methods:[],displayName:"MultiItemRendererWithDebugUI",props:{simpleItem:{required:!0,tsType:{name:"signature",type:"object",raw:`{ + _multi: ItemTree; +}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -295,7 +1701,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -339,7 +1745,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -383,7 +1789,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -427,7 +1833,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -471,7 +1877,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -515,7 +1921,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -559,7 +1965,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -603,7 +2009,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -647,7 +2053,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -691,7 +2097,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -735,7 +2141,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -779,7 +2185,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -823,7 +2229,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -867,7 +2273,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -911,7 +2317,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -955,7 +2361,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -999,7 +2405,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1043,7 +2449,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1087,7 +2493,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1131,7 +2537,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1175,7 +2581,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1219,7 +2625,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1263,7 +2669,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1307,7 +2713,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1351,7 +2757,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1395,7 +2801,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1439,7 +2845,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1483,7 +2889,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1527,7 +2933,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1571,7 +2977,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1615,7 +3021,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1659,7 +3065,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1703,10 +3109,18 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ + // @ts-expect-error - TS2315 - Type 'Tree' is not generic. + [k: string]: Tree; +}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]}},description:""},children:{required:!0,tsType:{name:"signature",type:"function",raw:`(tree: { + renderers: SimpleItemRenderTree; +}) => React.ReactElement`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + renderers: SimpleItemRenderTree; +}`,signature:{properties:[{key:"renderers",value:{name:"signature",type:"object",raw:`{ + blurb: React.ReactNode; + question: React.ReactNode; + hints: ReadonlyArray; +}`,signature:{properties:[{key:"blurb",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!0}},{key:"question",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!0}},{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"ReactReactNode",raw:"React.ReactNode"}],raw:"ReadonlyArray",required:!0}}]},required:!0}}]}},name:"tree"}],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}}},description:""},apiOptions:{required:!1,tsType:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ isArticle?: boolean; onFocusChange?: ( newFocusPath: FocusPath, @@ -1843,257 +3257,108 @@ the available choices.`}]}}],raw:`Readonly<{ * the available choices. */ onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},{name:"signature",type:"object",raw:`{ - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; -}`,signature:{properties:[{key:"GroupMetadataEditor",value:{name:"NonNullable",elements:[{name:'Readonly["GroupMetadataEditor"]',raw:'APIOptions["GroupMetadataEditor"]'}],raw:'NonNullable',required:!0}},{key:"baseElements",value:{name:"NonNullable",elements:[{name:'Readonly["baseElements"]',raw:'APIOptions["baseElements"]'}],raw:'NonNullable',required:!0}},{key:"canScrollPage",value:{name:"NonNullable",elements:[{name:'Readonly["canScrollPage"]',raw:'APIOptions["canScrollPage"]'}],raw:'NonNullable',required:!0}},{key:"crossOutEnabled",value:{name:"NonNullable",elements:[{name:'Readonly["crossOutEnabled"]',raw:'APIOptions["crossOutEnabled"]'}],raw:'NonNullable',required:!0}},{key:"editorChangeDelay",value:{name:"NonNullable",elements:[{name:'Readonly["editorChangeDelay"]',raw:'APIOptions["editorChangeDelay"]'}],raw:'NonNullable',required:!0}},{key:"groupAnnotator",value:{name:"NonNullable",elements:[{name:'Readonly["groupAnnotator"]',raw:'APIOptions["groupAnnotator"]'}],raw:'NonNullable',required:!0}},{key:"isArticle",value:{name:"NonNullable",elements:[{name:'Readonly["isArticle"]',raw:'APIOptions["isArticle"]'}],raw:'NonNullable',required:!0}},{key:"isMobile",value:{name:"NonNullable",elements:[{name:'Readonly["isMobile"]',raw:'APIOptions["isMobile"]'}],raw:'NonNullable',required:!0}},{key:"onFocusChange",value:{name:"NonNullable",elements:[{name:'Readonly["onFocusChange"]',raw:'APIOptions["onFocusChange"]'}],raw:'NonNullable',required:!0}},{key:"readOnly",value:{name:"NonNullable",elements:[{name:'Readonly["readOnly"]',raw:'APIOptions["readOnly"]'}],raw:'NonNullable',required:!0}},{key:"setDrawingAreaAvailable",value:{name:"NonNullable",elements:[{name:'Readonly["setDrawingAreaAvailable"]',raw:'APIOptions["setDrawingAreaAvailable"]'}],raw:`NonNullable< - APIOptions["setDrawingAreaAvailable"] ->`,required:!0}},{key:"showAlignmentOptions",value:{name:"NonNullable",elements:[{name:'Readonly["showAlignmentOptions"]',raw:'APIOptions["showAlignmentOptions"]'}],raw:'NonNullable',required:!0}}]}}]}],raw:`Readonly< - APIOptions & { - GroupMetadataEditor: NonNullable; - baseElements: NonNullable; - canScrollPage: NonNullable; - crossOutEnabled: NonNullable; - editorChangeDelay: NonNullable; - groupAnnotator: NonNullable; - isArticle: NonNullable; - isMobile: NonNullable; - onFocusChange: NonNullable; - readOnly: NonNullable; - setDrawingAreaAvailable: NonNullable< - APIOptions["setDrawingAreaAvailable"] - >; - showAlignmentOptions: NonNullable; - } ->`},description:""},keypadElement:{required:!1,tsType:{name:"any"},description:""},questionCompleted:{required:!1,tsType:{name:"boolean"},description:""},onFocus:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},onBlur:{required:!0,tsType:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}}},description:""},findWidgets:{required:!0,tsType:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string -| (( - id: string, - widgetInfo: PerseusWidget, - widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"any"}],raw:"ReadonlyArray"}}},description:""},reviewModeRubric:{required:!0,tsType:{name:"Rubric"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`( - arg1: { - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; - }, - callback?: () => unknown | null | undefined, - silent?: boolean, -) => unknown`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - hints?: ReadonlyArray; - replace?: boolean; - content?: string; - widgets?: WidgetDict; - images?: ImageDict; - // used only in EditorPage - question?: any; - answerArea?: PerseusAnswerArea | null; - itemDataVersion?: Version; - // used in MutirenderEditor - item?: Item; - editorMode?: EditorMode; - jsonMode?: boolean; - // perseus-all-package/widgets/unit.jsx - value?: any; - // widgets/radio/widget.jsx - choiceStates?: ReadonlyArray; - // widgets/numeric-input.jsx - currentValue?: string; - // perseus-all-package/widgets/dropdown.jsx - selected?: number; - // perseus-all-package/widgets/grapher.jsx - plot?: any; - // Interactive Graph callback (see legacy: interactive-graph.tsx) - graph?: PerseusGraphType; -}`,signature:{properties:[{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"intersection",raw:`PerseusRenderer & { +}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, +) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been +answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at +0 and is incremented for each group widget), and the ID of the +group widget, then returns a react component that will be added +immediately above the renderer in the group widget. If the +function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead +of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead +of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. + * The component provided here must adhere to the same + * interface as React's base component. */ - replace?: boolean; -}`,elements:[{name:"signature",type:"object",raw:`{ - // Translatable Markdown content to be rendered. May include references to - // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). - // For each image found in this content, there can be an entry in the - // \`images\` dict (below) with the key being the image's url which defines - // additional attributes for the image. - content: string; - // A dictionary of {[widgetName]: Widget} to be referenced from the content field - widgets: PerseusWidgetsMap; - // Used in the PerseusGradedGroup widget. A list of "tags" that are keys that represent other content in the system. Not rendered to the user. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - metadata?: ReadonlyArray; - // A dictionary of {[imageUrl]: PerseusImageDetail}. - images: { - [key: string]: PerseusImageDetail; - }; -}`,signature:{properties:[{key:"content",value:{name:"string",required:!0}},{key:"widgets",value:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + Link: React.ComponentType; +}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same +interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM +DOM elements. For example, when provided, will be used +in place of . This allows clients to provide pre-styled +components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component +to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +} & Partial & + Partial`,elements:[{name:"signature",type:"object",raw:`{ + // The widget type that this interaction originates from + type: string; + // The widget id that this interaction originates from + id: string; + + correct?: boolean; + + // Tracking args are all optional here because we don't know which + // widgets originated the call, and thus can't know what extra + // arguments will be included! +}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + status: "correct" | "incorrect" | "invalid"; +}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ + visible: number; +}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It +also includes any extra parameters that the originating widget provided. +This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is +being used. For mobile web this will be the ProvidedKeypad +component. In this situation we use the MathInput component +from the math-input repo instead of the existing perseus math +input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance +of \`math-input\`'s keypad to the body. This is used by the native +apps so they can have the keypad be defined on the native side. +It is called with an function that, when called, blurs the input, +and is expected to return an object of the shape +keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the +drawing area (scratchpad) should be allowed/disallowed. + +Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the +page. For example, if this is enabled, the most recently used +radio widget will attempt to keep the "selected" answer in view +after entering review mode. + +Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio +widgets. This allows users to note which answers they believe to +be incorrect, to find the answer by process of elimination. + +We plan to roll this out to all call sites eventually, but for +now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content +in a editor is delayed before propagated to a prop. For example, +when text is typed in the text area of an Editor component, +there will be a delay equal to the value of \`editorChangeDelay\` +before the change is propagated. This is added for better +responsiveness of the editor when used in certain contexts such +as StructuredItem exercises where constant re-rendering for each +keystroke caused text typed in the text area to appear in it +only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); +}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false +| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. + +Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2137,7 +3402,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2181,7 +3446,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2225,7 +3490,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2269,7 +3534,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2313,7 +3578,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2357,7 +3622,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2401,7 +3666,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2445,7 +3710,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2489,7 +3754,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2533,7 +3798,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2577,7 +3842,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2621,7 +3886,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2665,7 +3930,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2709,7 +3974,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2753,7 +4018,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2797,7 +4062,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2841,7 +4106,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2885,7 +4150,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2929,7 +4194,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2973,7 +4238,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3017,7 +4282,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3061,7 +4326,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3105,7 +4370,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3149,7 +4414,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3193,7 +4458,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3237,7 +4502,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3281,7 +4546,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3325,7 +4590,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3369,7 +4634,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3413,23 +4678,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!0}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3473,46 +4722,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3556,21 +4766,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3614,220 +4810,189 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - selected: boolean; - crossedOut: boolean; - highlighted: boolean; - rationaleShown: boolean; - correctnessShown: boolean; - previouslyAnswered: boolean; - readOnly: boolean; -}`,signature:{properties:[{key:"selected",value:{name:"boolean",required:!0}},{key:"crossedOut",value:{name:"boolean",required:!0}},{key:"highlighted",value:{name:"boolean",required:!0}},{key:"rationaleShown",value:{name:"boolean",required:!0}},{key:"correctnessShown",value:{name:"boolean",required:!0}},{key:"previouslyAnswered",value:{name:"boolean",required:!0}},{key:"readOnly",value:{name:"boolean",required:!0}}]}}],raw:"ReadonlyArray",required:!1}},{key:"currentValue",value:{name:"string",required:!1}},{key:"selected",value:{name:"number",required:!1}},{key:"plot",value:{name:"any",required:!1}},{key:"graph",value:{name:"union",raw:`| PerseusGraphTypeAngle -| PerseusGraphTypeCircle -| PerseusGraphTypeLinear -| PerseusGraphTypeLinearSystem -| PerseusGraphTypeNone -| PerseusGraphTypePoint -| PerseusGraphTypePolygon -| PerseusGraphTypeQuadratic -| PerseusGraphTypeRay -| PerseusGraphTypeSegment -| PerseusGraphTypeSinusoid`,elements:[{name:"signature",type:"object",raw:`{ - type: "angle"; - // Whether to show the angle measurements. default: false - showAngles?: boolean; - // Allow Reflex Angles if an "angle" type. default: true - allowReflexAngles?: boolean; - // The angle offset in degrees if an "angle" type. default: 0 - angleOffsetDeg?: number; - // Snap to degree increments if an "angle" type. default: 1 - snapDegrees?: number; - // How to match the answer. If missing, defaults to exact matching. - match?: "congruent"; - // must have 3 coords - ie [Coord, Coord, Coord] - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"angle"',required:!0}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"allowReflexAngles",value:{name:"boolean",required:!1}},{key:"angleOffsetDeg",value:{name:"number",required:!1}},{key:"snapDegrees",value:{name:"number",required:!1}},{key:"match",value:{name:"literal",value:'"congruent"',required:!1}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"intersection",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +after they have been transformed by the widget's transform function. +This is useful for when we need to know how a widget has shuffled its +the available choices.`}]}}],raw:`Readonly<{ + isArticle?: boolean; + onFocusChange?: ( + newFocusPath: FocusPath, + oldFocusPath: FocusPath, + keypadHeight?: number, + focusedElement?: HTMLElement, + ) => unknown; + GroupMetadataEditor?: React.ComponentType; + showAlignmentOptions?: boolean; + /** + * A boolean that indicates whether the associated problem has been + * answered correctly and should no longer be interactive. + */ + readOnly?: boolean; + answerableCallback?: (arg1: boolean) => unknown; + getAnotherHint?: () => unknown; + interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; + /** + * A function that takes in the relative problem number (starts at + * 0 and is incremented for each group widget), and the ID of the + * group widget, then returns a react component that will be added + * immediately above the renderer in the group widget. If the + * function returns null, no annotation will be added. + */ + groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; + /** + * If imagePlaceholder is set, Perseus will render the placeholder instead + * of the image node. + */ + imagePlaceholder?: React.ReactNode; + /** + * If widgetPlaceholder is set, Perseus will render the placeholder instead + * of the widget node. + */ + widgetPlaceholder?: React.ReactNode; + /** + * Base React elements that can be used in place of the standard DOM + * DOM elements. For example, when provided, will be used + * in place of . This allows clients to provide pre-styled + * components or components with custom behavior. + */ + baseElements?: { + /** + * The component provided here must adhere to the same + * interface as React's base component. + */ + Link: React.ComponentType; }; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "circle"; - center?: Coord; - radius?: number; - // The initial coordinates the graph renders with. - startCoords?: { - center: Coord; - radius: number; + /** + * Function that takes dimensions and returns a React component + * to display while an image is loading. + */ + imagePreloader?: (dimensions: Dimensions) => React.ReactNode; + /** + * A function that is called when the user has interacted with a widget. It + * also includes any extra parameters that the originating widget provided. + * This is used for keeping track of widget interactions. + */ + trackInteraction?: (args: TrackInteractionArgs) => void; + /** + * A boolean that indicates whether or not a custom keypad is + * being used. For mobile web this will be the ProvidedKeypad + * component. In this situation we use the MathInput component + * from the math-input repo instead of the existing perseus math + * input components. + */ + customKeypad?: boolean; + /** + * If this is provided, it is called instead of appending an instance + * of \`math-input\`'s keypad to the body. This is used by the native + * apps so they can have the keypad be defined on the native side. + * It is called with an function that, when called, blurs the input, + * and is expected to return an object of the shape + * keypadElementPropType from math-input/src/prop-types.js. + */ + nativeKeypadProxy?: (blur: () => void) => KeypadAPI; + /** Indicates whether or not to use mobile styling. */ + isMobile?: boolean; + /** A function, called with a bool indicating whether use of the + * drawing area (scratchpad) should be allowed/disallowed. + * + * Previously handled by \`Khan.scratchpad.enable/disable\` + */ + setDrawingAreaAvailable?: (arg1: boolean) => unknown; + /** The color used for the hint progress indicator (eg. 1 / 3) */ + hintProgressColor?: string; + /** + * Whether this Renderer is allowed to auto-scroll the rest of the + * page. For example, if this is enabled, the most recently used + * radio widget will attempt to keep the "selected" answer in view + * after entering review mode. + * + * Defaults to \`false\`. + */ + canScrollPage?: boolean; + /** + * Whether to enable the cross-out feature on multiple-choice radio + * widgets. This allows users to note which answers they believe to + * be incorrect, to find the answer by process of elimination. + * + * We plan to roll this out to all call sites eventually, but for + * now we have this flag, to add it to Generalized Test Prep first. + */ + crossOutEnabled?: boolean; + /** + * The value in milliseconds by which the local state of content + * in a editor is delayed before propagated to a prop. For example, + * when text is typed in the text area of an Editor component, + * there will be a delay equal to the value of \`editorChangeDelay\` + * before the change is propagated. This is added for better + * responsiveness of the editor when used in certain contexts such + * as StructuredItem exercises where constant re-rendering for each + * keystroke caused text typed in the text area to appear in it + * only after a good few seconds. + */ + editorChangeDelay?: number; + /** Feature flags that can be passed from consuming application. */ + flags?: { + /** + * Flags related to the interactive-graph Mafs migration. + * + * Add values to the relevant array to create new flags. + */ + mafs?: + | false + | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { + [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; + }); }; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"circle"',required:!0}},{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!1}},{key:"startCoords",value:{name:"signature",type:"object",raw:`{ - center: Coord; - radius: number; -}`,signature:{properties:[{key:"center",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}},{key:"radius",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear"; - // expects 2 coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "linear-system"; - // expects 2 sets of 2 coords - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"linear-system"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"signature",type:"object",raw:`{ - type: "none"; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"none"',required:!0}}]}},{name:"intersection",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "point"; - // The number of points if a "point" type. default: 1. "unlimited" if no limit - numPoints?: number | "unlimited"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"point"',required:!0}},{key:"numPoints",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "polygon"; - // The number of sides. default: 3. "unlimited" if no limit - numSides?: number | "unlimited"; - // Whether to the angle measurements. default: false - showAngles?: boolean; - // Whether to show side measurements. default: false - showSides?: boolean; - // How to snap points. e.g. "grid", "angles", or "sides". default: grid - snapTo?: "grid" | "angles" | "sides"; - // How to match the answer. If missing, defaults to exact matching. - match?: "similar" | "congruent" | "approx"; - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"polygon"',required:!0}},{key:"numSides",value:{name:"union",raw:'number | "unlimited"',elements:[{name:"number"},{name:"literal",value:'"unlimited"'}],required:!1}},{key:"showAngles",value:{name:"boolean",required:!1}},{key:"showSides",value:{name:"boolean",required:!1}},{key:"snapTo",value:{name:"union",raw:'"grid" | "angles" | "sides"',elements:[{name:"literal",value:'"grid"'},{name:"literal",value:'"angles"'},{name:"literal",value:'"sides"'}],required:!1}},{key:"match",value:{name:"union",raw:'"similar" | "congruent" | "approx"',elements:[{name:"literal",value:'"similar"'},{name:"literal",value:'"congruent"'},{name:"literal",value:'"approx"'}],required:!1}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "quadratic"; - // expects a list of 3 coords - coords?: [Coord, Coord, Coord] | null; - // The initial coordinates the graph renders with. - startCoords?: [Coord, Coord, Coord]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"quadratic"',required:!0}},{key:"coords",value:{name:"union",raw:"[Coord, Coord, Coord] | null",elements:[{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}]},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[Coord, Coord, Coord]",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1},{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "ray"; - // Expects a list of 2 Coords - coords?: CollinearTuple | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"ray"',required:!0}},{key:"coords",value:{name:"union",raw:"CollinearTuple | null",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "segment"; - // The number of segments if a "segment" type. default: 1. Max: 6 - numSegments?: number; - // Expects a list of Coord tuples. Length should match the \`numSegments\` value. - coords?: CollinearTuple[] | null; - // The initial coordinates the graph renders with. - startCoords?: CollinearTuple[]; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"segment"',required:!0}},{key:"numSegments",value:{name:"number",required:!1}},{key:"coords",value:{name:"union",raw:"CollinearTuple[] | null",elements:[{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"Array",elements:[{name:"tuple",raw:"[vec.Vector2, vec.Vector2]",elements:[{name:"vec.Vector2"},{name:"vec.Vector2"}],required:!1}],raw:"CollinearTuple[]",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]},{name:"intersection",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -} & PerseusGraphTypeCommon`,elements:[{name:"signature",type:"object",raw:`{ - type: "sinusoid"; - // Expects a list of 2 Coords - coords?: ReadonlyArray | null; - // The initial coordinates the graph renders with. - startCoords?: ReadonlyArray; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:'"sinusoid"',required:!0}},{key:"coords",value:{name:"union",raw:"ReadonlyArray | null",elements:[{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray"},{name:"null"}],required:!1}},{key:"startCoords",value:{name:"ReadonlyArray",elements:[{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}],raw:"ReadonlyArray",required:!1}}]}},{name:"signature",type:"object",raw:`{ - // NOTE(jeremy): This is referenced in the component. Verify if there's any - // production data that still has this. - coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!1}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}}},description:""},trackInteraction:{required:!0,tsType:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"TrackingExtraArgs"},name:"extraData"}],return:{name:"void"}}},description:""},isLastUsedWidget:{required:!0,tsType:{name:"boolean"},description:""},linterContext:{required:!0,tsType:{name:"LinterContextProps"},description:""},containerSizeClass:{required:!0,tsType:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]"},description:""}}};export{nn as B,me as P,fa as a,ba as b,ga as c,ca as d,ka as e,qa as f,wa as h,pa as k,va as l,Vn as m,ha as z}; + /** + * This is a callback function that returns all of the Widget props + * after they have been transformed by the widget's transform function. + * This is useful for when we need to know how a widget has shuffled its + * the available choices. + */ + onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; +}>`},description:""}}};const s=y=>{const o={_multi:{...h._multi,blurb:{...h._multi.blurb,content:"This is a short snippet to help you understand the context of the question. We call it the 'blurb'."}}};return e(v,{simpleItem:o,children:({renderers:m})=>{const{blurb:n,question:u,hints:a}=m;return i(t,{children:[i(t,{style:r.section,children:[e(d,{style:r.heading,children:"Blurb"}),n]}),i(t,{style:r.section,children:[e(d,{style:r.heading,children:"Question"}),u]}),i(t,{style:r.section,children:[e(d,{style:r.heading,children:"Hints"}),e(t,{style:r.hints,children:a==null?void 0:a.firstN(2)})]})]})}})},r=k.StyleSheet.create({section:{backgroundColor:"#F5F5F5",padding:"5px",borderWidth:"1px",marginTop:"5px",marginBottom:"5px"},heading:{backgroundColor:"#A9A9A9",margin:"-5px",padding:"5px"},hints:{marginLeft:"50px"}}),wr={title:"Perseus/Renderers/Multi Renderer"};s.__docgenInfo={description:"",methods:[],displayName:"SingleItem"};var p,c,b;s.parameters={...s.parameters,docs:{...(p=s.parameters)==null?void 0:p.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { + const item = ({ + _multi: { + ...question1._multi, + blurb: { + ...question1._multi.blurb, + content: "This is a short snippet to help you understand the context of the question. We call it the 'blurb'." + } + } + } as const); + return + {({ + renderers + }) => { + const { + blurb, + question, + hints + } = renderers; + return + + + Blurb + + {blurb} + + + + Question + + {question} + + + + Hints + + + { + // @ts-expect-error [FEI-5003] - TS2339 - Property 'firstN' does not exist on type 'readonly ReactNode[]'. + hints?.firstN(2)} + + + ; + }} + ; +}`,...(b=(c=s.parameters)==null?void 0:c.docs)==null?void 0:b.source}}};const fr=["SingleItem"];export{s as SingleItem,fr as __namedExportsOrder,wr as default}; diff --git a/assets/multi-renderer.stories-mfyjGc4B.js b/assets/multi-renderer.stories-mfyjGc4B.js deleted file mode 100644 index f15eaf24b6..0000000000 --- a/assets/multi-renderer.stories-mfyjGc4B.js +++ /dev/null @@ -1,1940 +0,0 @@ -import{j as e,a as i,F as f}from"./jsx-runtime-FVsy8kgq.js";import{V as r}from"./index-6h5t6F0w.js";import{H as d}from"./index-h_CiYGGb.js";import{l as k}from"./index-awljIyHI.js";import{B as q}from"./choice-E4eyMygy.js";import{r as g}from"./index-TT1qJ6UJ.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import{s as l}from"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{M as T}from"./multi-items-SYXQQaEF.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{K as R}from"./ke-score-ui-xy7p6xf5.js";import{S as A}from"./side-by-side-kpK-8vW0.js";import{s as O}from"./test-dependencies-UUeUFXqw.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-k-0mNqHS.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./shared-3pf9YZIg.js";import"./answer-choices-uB4giKvU.js";import"./minus-bold-ONmDo3Ve.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-tmJoP6pY.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./strings-OAjNfY6D.js";import"./bundle.esm-7jAAHVxW.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const x=l.shape({blurb:l.content,question:l.content,hints:l.hints}),h={_multi:{blurb:{__type:"content",content:"",images:{},widgets:{}},hints:[{__type:"hint",content:"If two triangles are congruent, then they have the same side lengths and angle measures.",images:{},replace:!1,widgets:{}},{__type:"hint",content:"A triangle congruent to triangle $ABC$ must also have side lengths of $12$, $14$ and $20$.",images:{},replace:!1,widgets:{}},{__type:"hint",content:`The following triangle is congruent to triangle $ABC$: - -* A triangle with side lengths of $12$, $14$, and $20$`,images:{},replace:!1,widgets:{}}],question:{__type:"content",content:`Triangle $ABC$ has side lengths of $12$, $14$, and $20$. Which of the following triangles is congruent to triangle $ABC$ ? - -[[☃ radio 1]] - -Enter the number 3 into this field: [[☃ input-number 1]]`,widgets:{"radio 1":{alignment:"default",graded:!0,options:{choices:[{clue:"Congruent triangles have the same side lengths.",content:"A triangle with side lengths of $3$, $4$, and $5$",correct:!1},{clue:`Congruent triangles have the same side lengths. - -This choice is similar to triangle $ABC$.`,content:"A triangle with side lengths of $6$, $7$, and $10$",correct:!1},{clue:"Congruent triangles have the same side lengths.",content:"A triangle with side lengths of $10$, $12$, and $18$",correct:!1,isNoneOfTheAbove:!1},{clue:"Congruent triangles have the same side lengths.",content:"A triangle with side lengths of $12$, $14$, and $20$",correct:!0,isNoneOfTheAbove:!1},{clue:`Congruent triangles have the same side lengths. - -This choice is similar to triangle $ABC$.`,content:"A triangle with side lengths of $24$, $28$, and $40$",correct:!1,isNoneOfTheAbove:!1}],countChoices:!1,deselectEnabled:!1,displayCount:null,hasNoneOfTheAbove:!1,multipleSelect:!1,randomize:!1},static:!1,type:"radio",version:{major:1,minor:0}},"input-number 1":{type:"input-number",graded:!0,options:{answerType:"number",value:"-42",simplify:"required",size:"normal",inexact:!1,maxError:.1}}}}}},v=({children:y,simpleItem:o,apiOptions:m})=>{const n=g.useRef(null),[u,a]=g.useState(null);return e(A,{leftTitle:"Multi Renderer",left:i(f,{children:[e(T.MultiRenderer,{item:o,shape:x,ref:n,dependencies:O,children:w=>y(w)}),e("div",{id:"workarea"}),e("div",{id:"hintsarea"}),e(r,{style:{flexDirection:"row",alignItems:"center"},children:e(q,{onClick:()=>{n.current&&a(n.current.score())},children:"Check"})}),e(R,{score:u})]}),jsonObject:o})};v.__docgenInfo={description:"",methods:[],displayName:"MultiItemRendererWithDebugUI",props:{simpleItem:{required:!0,tsType:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ - // @ts-expect-error - TS2315 - Type 'Tree' is not generic. - [k: string]: Tree; -}`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]}},description:""},children:{required:!0,tsType:{name:"signature",type:"function",raw:`(tree: { - renderers: SimpleItemRenderTree; -}) => React.ReactElement`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - renderers: SimpleItemRenderTree; -}`,signature:{properties:[{key:"renderers",value:{name:"signature",type:"object",raw:`{ - blurb: React.ReactNode; - question: React.ReactNode; - hints: ReadonlyArray; -}`,signature:{properties:[{key:"blurb",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!0}},{key:"question",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!0}},{key:"hints",value:{name:"ReadonlyArray",elements:[{name:"ReactReactNode",raw:"React.ReactNode"}],raw:"ReadonlyArray",required:!0}}]},required:!0}}]}},name:"tree"}],return:{name:"ReactReactElement",raw:"React.ReactElement",elements:[{name:"any"}]}}},description:""},apiOptions:{required:!1,tsType:{name:"Readonly",elements:[{name:"signature",type:"object",raw:`{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}`,signature:{properties:[{key:"isArticle",value:{name:"boolean",required:!1}},{key:"onFocusChange",value:{name:"signature",type:"function",raw:`( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, -) => unknown`,signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"newFocusPath"},{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"oldFocusPath"},{type:{name:"number"},name:"keypadHeight"},{type:{name:"HTMLElement"},name:"focusedElement"}],return:{name:"unknown"}},required:!1}},{key:"GroupMetadataEditor",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!1}},{key:"showAlignmentOptions",value:{name:"boolean",required:!1}},{key:"readOnly",value:{name:"boolean",required:!1},description:`A boolean that indicates whether the associated problem has been -answered correctly and should no longer be interactive.`},{key:"answerableCallback",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1}},{key:"getAnotherHint",value:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}},required:!1}},{key:"interactionCallback",value:{name:"signature",type:"function",raw:"(widgetData: {[widgetId: string]: any}) => void",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{[widgetId: string]: any}",signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]}},name:"widgetData"}],return:{name:"void"}},required:!1}},{key:"groupAnnotator",value:{name:"signature",type:"function",raw:"(groupNumber: number, widgetId: string) => React.ReactNode",signature:{arguments:[{type:{name:"number"},name:"groupNumber"},{type:{name:"string"},name:"widgetId"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`A function that takes in the relative problem number (starts at -0 and is incremented for each group widget), and the ID of the -group widget, then returns a react component that will be added -immediately above the renderer in the group widget. If the -function returns null, no annotation will be added.`},{key:"imagePlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If imagePlaceholder is set, Perseus will render the placeholder instead -of the image node.`},{key:"widgetPlaceholder",value:{name:"ReactReactNode",raw:"React.ReactNode",required:!1},description:`If widgetPlaceholder is set, Perseus will render the placeholder instead -of the widget node.`},{key:"baseElements",value:{name:"signature",type:"object",raw:`{ - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; -}`,signature:{properties:[{key:"Link",value:{name:"ReactComponentType",raw:"React.ComponentType",elements:[{name:"any"}],required:!0},description:`The component provided here must adhere to the same -interface as React's base component.`}]},required:!1},description:`Base React elements that can be used in place of the standard DOM -DOM elements. For example, when provided, will be used -in place of . This allows clients to provide pre-styled -components or components with custom behavior.`},{key:"imagePreloader",value:{name:"signature",type:"function",raw:"(dimensions: Dimensions) => React.ReactNode",signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]}},name:"dimensions"}],return:{name:"ReactReactNode",raw:"React.ReactNode"}},required:!1},description:`Function that takes dimensions and returns a React component -to display while an image is loading.`},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(args: TrackInteractionArgs) => void",signature:{arguments:[{type:{name:"intersection",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -} & Partial & - Partial`,elements:[{name:"signature",type:"object",raw:`{ - // The widget type that this interaction originates from - type: string; - // The widget id that this interaction originates from - id: string; - - correct?: boolean; - - // Tracking args are all optional here because we don't know which - // widgets originated the call, and thus can't know what extra - // arguments will be included! -}`,signature:{properties:[{key:"type",value:{name:"string",required:!0}},{key:"id",value:{name:"string",required:!0}},{key:"correct",value:{name:"boolean",required:!1}}]}},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - status: "correct" | "incorrect" | "invalid"; -}`,signature:{properties:[{key:"status",value:{name:"union",raw:'"correct" | "incorrect" | "invalid"',elements:[{name:"literal",value:'"correct"'},{name:"literal",value:'"incorrect"'},{name:"literal",value:'"invalid"'}],required:!0}}]}}],raw:"Partial"},{name:"Partial",elements:[{name:"signature",type:"object",raw:`{ - visible: number; -}`,signature:{properties:[{key:"visible",value:{name:"number",required:!0}}]}}],raw:"Partial"}]},name:"args"}],return:{name:"void"}},required:!1},description:`A function that is called when the user has interacted with a widget. It -also includes any extra parameters that the originating widget provided. -This is used for keeping track of widget interactions.`},{key:"customKeypad",value:{name:"boolean",required:!1},description:`A boolean that indicates whether or not a custom keypad is -being used. For mobile web this will be the ProvidedKeypad -component. In this situation we use the MathInput component -from the math-input repo instead of the existing perseus math -input components.`},{key:"nativeKeypadProxy",value:{name:"signature",type:"function",raw:"(blur: () => void) => KeypadAPI",signature:{arguments:[{type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}},name:"blur"}],return:{name:"KeypadAPI"}},required:!1},description:`If this is provided, it is called instead of appending an instance -of \`math-input\`'s keypad to the body. This is used by the native -apps so they can have the keypad be defined on the native side. -It is called with an function that, when called, blurs the input, -and is expected to return an object of the shape -keypadElementPropType from math-input/src/prop-types.js.`},{key:"isMobile",value:{name:"boolean",required:!1},description:"Indicates whether or not to use mobile styling."},{key:"setDrawingAreaAvailable",value:{name:"signature",type:"function",raw:"(arg1: boolean) => unknown",signature:{arguments:[{type:{name:"boolean"},name:"arg1"}],return:{name:"unknown"}},required:!1},description:`A function, called with a bool indicating whether use of the -drawing area (scratchpad) should be allowed/disallowed. - -Previously handled by \`Khan.scratchpad.enable/disable\``},{key:"hintProgressColor",value:{name:"string",required:!1},description:"The color used for the hint progress indicator (eg. 1 / 3)"},{key:"canScrollPage",value:{name:"boolean",required:!1},description:`Whether this Renderer is allowed to auto-scroll the rest of the -page. For example, if this is enabled, the most recently used -radio widget will attempt to keep the "selected" answer in view -after entering review mode. - -Defaults to \`false\`.`},{key:"crossOutEnabled",value:{name:"boolean",required:!1},description:`Whether to enable the cross-out feature on multiple-choice radio -widgets. This allows users to note which answers they believe to -be incorrect, to find the answer by process of elimination. - -We plan to roll this out to all call sites eventually, but for -now we have this flag, to add it to Generalized Test Prep first.`},{key:"editorChangeDelay",value:{name:"number",required:!1},description:`The value in milliseconds by which the local state of content -in a editor is delayed before propagated to a prop. For example, -when text is typed in the text area of an Editor component, -there will be a delay equal to the value of \`editorChangeDelay\` -before the change is propagated. This is added for better -responsiveness of the editor when used in certain contexts such -as StructuredItem exercises where constant re-rendering for each -keystroke caused text typed in the text area to appear in it -only after a good few seconds.`},{key:"flags",value:{name:"signature",type:"object",raw:`{ - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); -}`,signature:{properties:[{key:"mafs",value:{name:"union",raw:`| false -| ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - })`,elements:[{name:"literal",value:"false"},{name:"unknown"}],required:!1},description:`Flags related to the interactive-graph Mafs migration. - -Add values to the relevant array to create new flags.`}]},required:!1},description:"Feature flags that can be passed from consuming application."},{key:"onWidgetStartProps",value:{name:"signature",type:"function",raw:"(widgets: PerseusWidgetsMap) => void",signature:{arguments:[{type:{name:"intersection",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n} & {\n [key in `cs-program ${number}`]: CSProgramWidget;\n} & {\n [key in `definition ${number}`]: DefinitionWidget;\n} & {\n [key in `dropdown ${number}`]: DropdownWidget;\n} & {\n [key in `explanation ${number}`]: ExplanationWidget;\n} & {\n [key in `expression ${number}`]: ExpressionWidget;\n} & {\n [key in `grapher ${number}`]: GrapherWidget;\n} & {\n [key in `group ${number}`]: GroupWidget;\n} & {\n [key in `graded-group ${number}`]: GradedGroupWidget;\n} & {\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n} & {\n [key in `iframe ${number}`]: IFrameWidget;\n} & {\n [key in `image ${number}`]: ImageWidget;\n} & {\n [key in `input-number ${number}`]: InputNumberWidget;\n} & {\n [key in `interaction ${number}`]: InteractionWidget;\n} & {\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n} & {\n [key in `label-image ${number}`]: LabelImageWidget;\n} & {\n [key in `matcher ${number}`]: MatcherWidget;\n} & {\n [key in `matrix ${number}`]: MatrixWidget;\n} & {\n [key in `measurer ${number}`]: MeasurerWidget;\n} & {\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n} & {\n [key in `number-line ${number}`]: NumberLineWidget;\n} & {\n [key in `numeric-input ${number}`]: NumericInputWidget;\n} & {\n [key in `orderer ${number}`]: OrdererWidget;\n} & {\n [key in `passage ${number}`]: PassageWidget;\n} & {\n [key in `passage-ref ${number}`]: PassageRefWidget;\n} & {\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n} & {\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n} & {\n [key in `plotter ${number}`]: PlotterWidget;\n} & {\n [key in `python-program ${number}`]: PythonProgramWidget;\n} & {\n [key in `radio ${number}`]: RadioWidget;\n} & {\n [key in `sorter ${number}`]: SorterWidget;\n} & {\n [key in `table ${number}`]: TableWidget;\n} & {\n [key in `video ${number}`]: VideoWidget;\n}",elements:[{name:"signature",type:"object",raw:"{\n [key in `categorizer ${number}`]: CategorizerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`categorizer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}]},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props -after they have been transformed by the widget's transform function. -This is useful for when we need to know how a widget has shuffled its -the available choices.`}]}}],raw:`Readonly<{ - isArticle?: boolean; - onFocusChange?: ( - newFocusPath: FocusPath, - oldFocusPath: FocusPath, - keypadHeight?: number, - focusedElement?: HTMLElement, - ) => unknown; - GroupMetadataEditor?: React.ComponentType; - showAlignmentOptions?: boolean; - /** - * A boolean that indicates whether the associated problem has been - * answered correctly and should no longer be interactive. - */ - readOnly?: boolean; - answerableCallback?: (arg1: boolean) => unknown; - getAnotherHint?: () => unknown; - interactionCallback?: (widgetData: {[widgetId: string]: any}) => void; - /** - * A function that takes in the relative problem number (starts at - * 0 and is incremented for each group widget), and the ID of the - * group widget, then returns a react component that will be added - * immediately above the renderer in the group widget. If the - * function returns null, no annotation will be added. - */ - groupAnnotator?: (groupNumber: number, widgetId: string) => React.ReactNode; - /** - * If imagePlaceholder is set, Perseus will render the placeholder instead - * of the image node. - */ - imagePlaceholder?: React.ReactNode; - /** - * If widgetPlaceholder is set, Perseus will render the placeholder instead - * of the widget node. - */ - widgetPlaceholder?: React.ReactNode; - /** - * Base React elements that can be used in place of the standard DOM - * DOM elements. For example, when provided, will be used - * in place of . This allows clients to provide pre-styled - * components or components with custom behavior. - */ - baseElements?: { - /** - * The component provided here must adhere to the same - * interface as React's base component. - */ - Link: React.ComponentType; - }; - /** - * Function that takes dimensions and returns a React component - * to display while an image is loading. - */ - imagePreloader?: (dimensions: Dimensions) => React.ReactNode; - /** - * A function that is called when the user has interacted with a widget. It - * also includes any extra parameters that the originating widget provided. - * This is used for keeping track of widget interactions. - */ - trackInteraction?: (args: TrackInteractionArgs) => void; - /** - * A boolean that indicates whether or not a custom keypad is - * being used. For mobile web this will be the ProvidedKeypad - * component. In this situation we use the MathInput component - * from the math-input repo instead of the existing perseus math - * input components. - */ - customKeypad?: boolean; - /** - * If this is provided, it is called instead of appending an instance - * of \`math-input\`'s keypad to the body. This is used by the native - * apps so they can have the keypad be defined on the native side. - * It is called with an function that, when called, blurs the input, - * and is expected to return an object of the shape - * keypadElementPropType from math-input/src/prop-types.js. - */ - nativeKeypadProxy?: (blur: () => void) => KeypadAPI; - /** Indicates whether or not to use mobile styling. */ - isMobile?: boolean; - /** A function, called with a bool indicating whether use of the - * drawing area (scratchpad) should be allowed/disallowed. - * - * Previously handled by \`Khan.scratchpad.enable/disable\` - */ - setDrawingAreaAvailable?: (arg1: boolean) => unknown; - /** The color used for the hint progress indicator (eg. 1 / 3) */ - hintProgressColor?: string; - /** - * Whether this Renderer is allowed to auto-scroll the rest of the - * page. For example, if this is enabled, the most recently used - * radio widget will attempt to keep the "selected" answer in view - * after entering review mode. - * - * Defaults to \`false\`. - */ - canScrollPage?: boolean; - /** - * Whether to enable the cross-out feature on multiple-choice radio - * widgets. This allows users to note which answers they believe to - * be incorrect, to find the answer by process of elimination. - * - * We plan to roll this out to all call sites eventually, but for - * now we have this flag, to add it to Generalized Test Prep first. - */ - crossOutEnabled?: boolean; - /** - * The value in milliseconds by which the local state of content - * in a editor is delayed before propagated to a prop. For example, - * when text is typed in the text area of an Editor component, - * there will be a delay equal to the value of \`editorChangeDelay\` - * before the change is propagated. This is added for better - * responsiveness of the editor when used in certain contexts such - * as StructuredItem exercises where constant re-rendering for each - * keystroke caused text typed in the text area to appear in it - * only after a good few seconds. - */ - editorChangeDelay?: number; - /** Feature flags that can be passed from consuming application. */ - flags?: { - /** - * Flags related to the interactive-graph Mafs migration. - * - * Add values to the relevant array to create new flags. - */ - mafs?: - | false - | ({[Key in (typeof MafsGraphTypeFlags)[number]]?: boolean} & { - [Key in (typeof InteractiveGraphLockedFeaturesFlags)[number]]?: boolean; - }); - }; - /** - * This is a callback function that returns all of the Widget props - * after they have been transformed by the widget's transform function. - * This is useful for when we need to know how a widget has shuffled its - * the available choices. - */ - onWidgetStartProps?: (widgets: PerseusWidgetsMap) => void; -}>`},description:""}}};const s=y=>{const o={_multi:{...h._multi,blurb:{...h._multi.blurb,content:"This is a short snippet to help you understand the context of the question. We call it the 'blurb'."}}};return e(v,{simpleItem:o,children:({renderers:m})=>{const{blurb:n,question:u,hints:a}=m;return i(r,{children:[i(r,{style:t.section,children:[e(d,{style:t.heading,children:"Blurb"}),n]}),i(r,{style:t.section,children:[e(d,{style:t.heading,children:"Question"}),u]}),i(r,{style:t.section,children:[e(d,{style:t.heading,children:"Hints"}),e(r,{style:t.hints,children:a==null?void 0:a.firstN(2)})]})]})}})},t=k.StyleSheet.create({section:{backgroundColor:"#F5F5F5",padding:"5px",borderWidth:"1px",marginTop:"5px",marginBottom:"5px"},heading:{backgroundColor:"#A9A9A9",margin:"-5px",padding:"5px"},hints:{marginLeft:"50px"}}),wt={title:"Perseus/Renderers/Multi Renderer"};s.__docgenInfo={description:"",methods:[],displayName:"SingleItem"};var p,c,b;s.parameters={...s.parameters,docs:{...(p=s.parameters)==null?void 0:p.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { - const item = ({ - _multi: { - ...question1._multi, - blurb: { - ...question1._multi.blurb, - content: "This is a short snippet to help you understand the context of the question. We call it the 'blurb'." - } - } - } as const); - return - {({ - renderers - }) => { - const { - blurb, - question, - hints - } = renderers; - return - - - Blurb - - {blurb} - - - - Question - - {question} - - - - Hints - - - { - // @ts-expect-error [FEI-5003] - TS2339 - Property 'firstN' does not exist on type 'readonly ReactNode[]'. - hints?.firstN(2)} - - - ; - }} - ; -}`,...(b=(c=s.parameters)==null?void 0:c.docs)==null?void 0:b.source}}};const ft=["SingleItem"];export{s as SingleItem,ft as __namedExportsOrder,wt as default}; diff --git a/assets/navigation-pad-ss7r0FKW.js b/assets/navigation-pad-ss7r0FKW.js index d4d475983f..ccbe24eae6 100644 --- a/assets/navigation-pad-ss7r0FKW.js +++ b/assets/navigation-pad-ss7r0FKW.js @@ -1,4 +1,4 @@ -import{j as e,a as b}from"./jsx-runtime-FVsy8kgq.js";import{V as s}from"./index-6h5t6F0w.js";import{c as i}from"./index-deFLJwr4.js";import{l}from"./index-awljIyHI.js";import{B as h,u as f,K as w}from"./button-assets-txIojR3b.js";import{C as k}from"./index-WNT3sUKf.js";function v(o){switch(o){case"UP":return t.up;case"RIGHT":return t.right;case"DOWN":return t.down;case"LEFT":return t.left;default:throw new Error(`Invalid key: ${o}`)}}function d({coord:o,keyConfig:r,onClickKey:u}){const a=r.id,p=v(a);return e(s,{style:{gridColumn:o[0]+1,gridRow:o[1]+1},children:e(k,{onClick:c=>u(r.id,c),style:t.clickable,"aria-label":r.ariaLabel,children:({hovered:c,focused:m,pressed:g})=>e(s,{style:t.outerBoxBase,children:e(s,{style:[t.base,p,c&&t.hovered,m&&t.focused,g&&t.pressed],children:e(h,{id:r.id})})})})})}const n=4,t=l.StyleSheet.create({clickable:{width:"100%",height:"100%",":focus":{outline:"none"}},outerBoxBase:{height:"100%",width:"100%"},base:{boxShadow:`0px 1px 0px ${i.offBlack32}`,display:"flex",justifyContent:"center",alignItems:"center",background:i.white,borderWidth:2,borderColor:i.white},up:{borderTopLeftRadius:n,borderTopRightRadius:n},right:{borderTopRightRadius:n,borderBottomRightRadius:n},down:{borderBottomLeftRadius:n,borderBottomRightRadius:n},left:{borderTopLeftRadius:n,borderBottomLeftRadius:n},hovered:{borderColor:i.blue,boxShadow:"none"},focused:{borderColor:i.blue,boxShadow:"none"},pressed:{border:"2px solid #1B50B3",background:`linear-gradient(0deg, rgba(24, 101, 242, 0.32), rgba(24, 101, 242, 0.32)), ${i.white}`,boxShadow:"none"}});d.__docgenInfo={description:"",methods:[],displayName:"NavigationButton",props:{coord:{required:!0,tsType:{name:"unknown"},description:""},keyConfig:{required:!0,tsType:{name:"signature",type:"object",raw:`{ +import{j as e,a as b}from"./jsx-runtime-FVsy8kgq.js";import{V as s}from"./index-6h5t6F0w.js";import{c as i}from"./index-deFLJwr4.js";import{l}from"./index-awljIyHI.js";import{B as h,u as f,K as w}from"./button-assets-txIojR3b.js";import{C as k}from"./index-2dmvOE3q.js";function v(o){switch(o){case"UP":return t.up;case"RIGHT":return t.right;case"DOWN":return t.down;case"LEFT":return t.left;default:throw new Error(`Invalid key: ${o}`)}}function d({coord:o,keyConfig:r,onClickKey:u}){const a=r.id,p=v(a);return e(s,{style:{gridColumn:o[0]+1,gridRow:o[1]+1},children:e(k,{onClick:c=>u(r.id,c),style:t.clickable,"aria-label":r.ariaLabel,children:({hovered:c,focused:m,pressed:g})=>e(s,{style:t.outerBoxBase,children:e(s,{style:[t.base,p,c&&t.hovered,m&&t.focused,g&&t.pressed],children:e(h,{id:r.id})})})})})}const n=4,t=l.StyleSheet.create({clickable:{width:"100%",height:"100%",":focus":{outline:"none"}},outerBoxBase:{height:"100%",width:"100%"},base:{boxShadow:`0px 1px 0px ${i.offBlack32}`,display:"flex",justifyContent:"center",alignItems:"center",background:i.white,borderWidth:2,borderColor:i.white},up:{borderTopLeftRadius:n,borderTopRightRadius:n},right:{borderTopRightRadius:n,borderBottomRightRadius:n},down:{borderBottomLeftRadius:n,borderBottomRightRadius:n},left:{borderTopLeftRadius:n,borderBottomLeftRadius:n},hovered:{borderColor:i.blue,boxShadow:"none"},focused:{borderColor:i.blue,boxShadow:"none"},pressed:{border:"2px solid #1B50B3",background:`linear-gradient(0deg, rgba(24, 101, 242, 0.32), rgba(24, 101, 242, 0.32)), ${i.white}`,boxShadow:"none"}});d.__docgenInfo={description:"",methods:[],displayName:"NavigationButton",props:{coord:{required:!0,tsType:{name:"unknown"},description:""},keyConfig:{required:!0,tsType:{name:"signature",type:"object",raw:`{ id: Key; type: KeyType; icon: IconConfig; diff --git a/assets/navigation-pad.stories-qTnieBG4.js b/assets/navigation-pad.stories-qTnieBG4.js index 8e83457c7c..ce908f3c6d 100644 --- a/assets/navigation-pad.stories-qTnieBG4.js +++ b/assets/navigation-pad.stories-qTnieBG4.js @@ -1,4 +1,4 @@ -import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{a as n}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{N as e}from"./navigation-pad-ss7r0FKW.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./index-deFLJwr4.js";import"./button-assets-txIojR3b.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";const N={title:"math-input/components/MathInput v2 Navigation Pad",parameters:{backgrounds:{default:"light background",values:[{name:"light background",value:"lightgrey",default:!0}]}}};function t(){return i("div",{style:{padding:50},children:i(e,{onClickKey:n("onClickKey")})})}t.__docgenInfo={description:"",methods:[],displayName:"basic"};var a,o,r;t.parameters={...t.parameters,docs:{...(a=t.parameters)==null?void 0:a.docs,source:{originalSource:`function basic() { +import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{a as n}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{N as e}from"./navigation-pad-ss7r0FKW.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./index-deFLJwr4.js";import"./button-assets-txIojR3b.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";const N={title:"math-input/components/MathInput v2 Navigation Pad",parameters:{backgrounds:{default:"light background",values:[{name:"light background",value:"lightgrey",default:!0}]}}};function t(){return i("div",{style:{padding:50},children:i(e,{onClickKey:n("onClickKey")})})}t.__docgenInfo={description:"",methods:[],displayName:"basic"};var a,o,r;t.parameters={...t.parameters,docs:{...(a=t.parameters)==null?void 0:a.docs,source:{originalSource:`function basic() { return
diff --git a/assets/number-input-dpusjjfa.js b/assets/number-input-ZhezuDVT.js similarity index 97% rename from assets/number-input-dpusjjfa.js rename to assets/number-input-ZhezuDVT.js index 2e51a1e61d..cad75ad6d3 100644 --- a/assets/number-input-dpusjjfa.js +++ b/assets/number-input-ZhezuDVT.js @@ -1 +1 @@ -import{j as d}from"./jsx-runtime-FVsy8kgq.js";import{e as h,U as f,K as c}from"./util-XcxTwqb0.js";import{c as y}from"./index-dnMhQZ-1.js";import{_ as o,$ as g}from"./jquery-yG1GhClm.js";import{P as s}from"./index-k-0mNqHS.js";import{r as V}from"./index-TT1qJ6UJ.js";import{R as n}from"./index-7vsPyIck.js";import{P as v}from"./i18n-context-hxuRe8oU.js";const{firstNumericalParse:u,captureScratchpadTouchStart:k}=f,p=c.toNumericString,_=c.getNumericFormat,a=class a extends V.Component{constructor(){super(...arguments),this.state={format:this.props.format},this.getValue=()=>this.parseInputValue(n.findDOMNode(this.refs.input).value),this.getStringValue=()=>n.findDOMNode(this.refs.input).value.toString(),this.parseInputValue=e=>{if(e===""){const l=this.props.placeholder;return o.isFinite(l)?+l:null}const t=u(e,this.context.strings);return o.isFinite(t)?t:this.props.value},this.focus=()=>{n.findDOMNode(this.refs.input).focus(),this._handleFocus()},this.blur=()=>{n.findDOMNode(this.refs.input).blur(),this._handleBlur()},this.setSelectionRange=(e,t)=>{n.findDOMNode(this).setSelectionRange(e,t)},this.getSelectionStart=()=>n.findDOMNode(this).selectionStart,this.getSelectionEnd=()=>n.findDOMNode(this).selectionEnd,this._checkValidity=e=>{if(e==null)return!0;const t=u(e,this.context.strings),l=this.props.checkValidity;return o.isFinite(t)&&l(t)},this._handleChange=e=>{const t=e.target.value,l=this.parseInputValue(t),r=_(t);this.props.onChange(l),r&&(this.props.onFormatChange(l,r),this.setState({format:r}))},this._handleFocus=()=>{this.props.onFocus&&this.props.onFocus()},this._handleBlur=e=>{e&&e.type==="keypress"&&e.keyCode!==13||(this._setValue(this.props.value,this.state.format),this.props.onBlur&&this.props.onBlur())},this._onKeyDown=e=>{if(this.props.onKeyDown&&this.props.onKeyDown(e),!this.props.useArrowKeys||!o.contains(["ArrowUp","ArrowDown"],e.key))return;let t=this.getValue();t===Math.floor(t)&&(e.key==="ArrowUp"?t=t+1:e.key==="ArrowDown"&&(t=t-1),this._checkValidity(t)&&this.props.onChange(t))},this._setValue=(e,t)=>{g(n.findDOMNode(this.refs.input)).val(p(e,t))}}componentDidUpdate(e){h(this.getValue(),this.props.value)||this._setValue(this.props.value,this.state.format)}render(){let e=y({"number-input":!0,"invalid-input":!this._checkValidity(this.props.value),mini:this.props.size==="mini",small:this.props.size==="small",normal:this.props.size==="normal"});this.props.className!=null&&(e=e+" "+this.props.className);const{onFormatChange:t,checkValidity:l,useArrowKeys:r,...m}=this.props;return d("input",{...m,className:e,type:"text",ref:"input",onChange:this._handleChange,onFocus:this._handleFocus,onBlur:this._handleBlur,onKeyPress:this._handleBlur,onKeyDown:this._onKeyDown,onTouchStart:k,defaultValue:p(this.props.value,this.state.format),value:void 0})}};a.contextType=v,a.propTypes={value:s.number,format:s.string,placeholder:s.oneOfType([s.string,s.number]),onChange:s.func.isRequired,onFormatChange:s.func,checkValidity:s.func,size:s.string,label:s.oneOf(["put your labels outside your inputs!"])},a.defaultProps={value:null,placeholder:null,format:null,onFormatChange:()=>null,checkValidity:()=>!0,useArrowKeys:!1};let i=a;i.__docgenInfo={description:"",methods:[{name:"getValue",docblock:null,modifiers:[],params:[],returns:null},{name:"getStringValue",docblock:null,modifiers:[],params:[],returns:null},{name:"parseInputValue",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"blur",docblock:null,modifiers:[],params:[],returns:null},{name:"setSelectionRange",docblock:null,modifiers:[],params:[{name:"selectionStart",optional:!1,type:null},{name:"selectionEnd",optional:!1,type:null}],returns:null},{name:"getSelectionStart",docblock:null,modifiers:[],params:[],returns:null},{name:"getSelectionEnd",docblock:null,modifiers:[],params:[],returns:null},{name:"_checkValidity",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:null}],returns:null},{name:"_handleChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"_handleFocus",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleBlur",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"_onKeyDown",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"_setValue",docblock:null,modifiers:[],params:[{name:"val",optional:!1,type:null},{name:"format",optional:!1,type:null}],returns:null}],displayName:"NumberInput",props:{value:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"number"},required:!1},placeholder:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"union",value:[{name:"string"},{name:"number"}]},required:!1},format:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"string"},required:!1},onFormatChange:{defaultValue:{value:"() => null",computed:!1},description:"",type:{name:"func"},required:!1},checkValidity:{defaultValue:{value:"() => true",computed:!1},description:"",type:{name:"func"},required:!1},useArrowKeys:{defaultValue:{value:"false",computed:!1},required:!1},onChange:{description:"",type:{name:"func"},required:!0},size:{description:"",type:{name:"string"},required:!1},label:{description:"",type:{name:"enum",value:[{value:'"put your labels outside your inputs!"',computed:!1}]},required:!1}}};export{i as N}; +import{j as d}from"./jsx-runtime-FVsy8kgq.js";import{e as h,U as f,K as c}from"./util-YrNvlCNO.js";import{c as y}from"./index-dnMhQZ-1.js";import{_ as o,$ as g}from"./jquery-yG1GhClm.js";import{P as s}from"./index-0C4KXdeC.js";import{r as V}from"./index-TT1qJ6UJ.js";import{R as n}from"./index-7vsPyIck.js";import{P as v}from"./i18n-context-hxuRe8oU.js";const{firstNumericalParse:u,captureScratchpadTouchStart:k}=f,p=c.toNumericString,_=c.getNumericFormat,a=class a extends V.Component{constructor(){super(...arguments),this.state={format:this.props.format},this.getValue=()=>this.parseInputValue(n.findDOMNode(this.refs.input).value),this.getStringValue=()=>n.findDOMNode(this.refs.input).value.toString(),this.parseInputValue=e=>{if(e===""){const l=this.props.placeholder;return o.isFinite(l)?+l:null}const t=u(e,this.context.strings);return o.isFinite(t)?t:this.props.value},this.focus=()=>{n.findDOMNode(this.refs.input).focus(),this._handleFocus()},this.blur=()=>{n.findDOMNode(this.refs.input).blur(),this._handleBlur()},this.setSelectionRange=(e,t)=>{n.findDOMNode(this).setSelectionRange(e,t)},this.getSelectionStart=()=>n.findDOMNode(this).selectionStart,this.getSelectionEnd=()=>n.findDOMNode(this).selectionEnd,this._checkValidity=e=>{if(e==null)return!0;const t=u(e,this.context.strings),l=this.props.checkValidity;return o.isFinite(t)&&l(t)},this._handleChange=e=>{const t=e.target.value,l=this.parseInputValue(t),r=_(t);this.props.onChange(l),r&&(this.props.onFormatChange(l,r),this.setState({format:r}))},this._handleFocus=()=>{this.props.onFocus&&this.props.onFocus()},this._handleBlur=e=>{e&&e.type==="keypress"&&e.keyCode!==13||(this._setValue(this.props.value,this.state.format),this.props.onBlur&&this.props.onBlur())},this._onKeyDown=e=>{if(this.props.onKeyDown&&this.props.onKeyDown(e),!this.props.useArrowKeys||!o.contains(["ArrowUp","ArrowDown"],e.key))return;let t=this.getValue();t===Math.floor(t)&&(e.key==="ArrowUp"?t=t+1:e.key==="ArrowDown"&&(t=t-1),this._checkValidity(t)&&this.props.onChange(t))},this._setValue=(e,t)=>{g(n.findDOMNode(this.refs.input)).val(p(e,t))}}componentDidUpdate(e){h(this.getValue(),this.props.value)||this._setValue(this.props.value,this.state.format)}render(){let e=y({"number-input":!0,"invalid-input":!this._checkValidity(this.props.value),mini:this.props.size==="mini",small:this.props.size==="small",normal:this.props.size==="normal"});this.props.className!=null&&(e=e+" "+this.props.className);const{onFormatChange:t,checkValidity:l,useArrowKeys:r,...m}=this.props;return d("input",{...m,className:e,type:"text",ref:"input",onChange:this._handleChange,onFocus:this._handleFocus,onBlur:this._handleBlur,onKeyPress:this._handleBlur,onKeyDown:this._onKeyDown,onTouchStart:k,defaultValue:p(this.props.value,this.state.format),value:void 0})}};a.contextType=v,a.propTypes={value:s.number,format:s.string,placeholder:s.oneOfType([s.string,s.number]),onChange:s.func.isRequired,onFormatChange:s.func,checkValidity:s.func,size:s.string,label:s.oneOf(["put your labels outside your inputs!"])},a.defaultProps={value:null,placeholder:null,format:null,onFormatChange:()=>null,checkValidity:()=>!0,useArrowKeys:!1};let i=a;i.__docgenInfo={description:"",methods:[{name:"getValue",docblock:null,modifiers:[],params:[],returns:null},{name:"getStringValue",docblock:null,modifiers:[],params:[],returns:null},{name:"parseInputValue",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:null}],returns:null},{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"blur",docblock:null,modifiers:[],params:[],returns:null},{name:"setSelectionRange",docblock:null,modifiers:[],params:[{name:"selectionStart",optional:!1,type:null},{name:"selectionEnd",optional:!1,type:null}],returns:null},{name:"getSelectionStart",docblock:null,modifiers:[],params:[],returns:null},{name:"getSelectionEnd",docblock:null,modifiers:[],params:[],returns:null},{name:"_checkValidity",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:null}],returns:null},{name:"_handleChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"_handleFocus",docblock:null,modifiers:[],params:[],returns:null},{name:"_handleBlur",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"_onKeyDown",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"_setValue",docblock:null,modifiers:[],params:[{name:"val",optional:!1,type:null},{name:"format",optional:!1,type:null}],returns:null}],displayName:"NumberInput",props:{value:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"number"},required:!1},placeholder:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"union",value:[{name:"string"},{name:"number"}]},required:!1},format:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"string"},required:!1},onFormatChange:{defaultValue:{value:"() => null",computed:!1},description:"",type:{name:"func"},required:!1},checkValidity:{defaultValue:{value:"() => true",computed:!1},description:"",type:{name:"func"},required:!1},useArrowKeys:{defaultValue:{value:"false",computed:!1},required:!1},onChange:{description:"",type:{name:"func"},required:!0},size:{description:"",type:{name:"string"},required:!1},label:{description:"",type:{name:"enum",value:[{value:'"put your labels outside your inputs!"',computed:!1}]},required:!1}}};export{i as N}; diff --git a/assets/number-input.stories-upCNzoBF.js b/assets/number-input.stories-gsy02QmS.js similarity index 93% rename from assets/number-input.stories-upCNzoBF.js rename to assets/number-input.stories-gsy02QmS.js index d058591fb9..32506999fc 100644 --- a/assets/number-input.stories-upCNzoBF.js +++ b/assets/number-input.stories-gsy02QmS.js @@ -1,4 +1,4 @@ -import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{N as r}from"./number-input-dpusjjfa.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./index-dnMhQZ-1.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./index-7vsPyIck.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";const a={onChange:()=>{}},G={title:"Perseus/Components/Number Input"},o=t=>e(r,{...a}),s=t=>e(r,{...a,value:1234567890}),c=t=>e(r,{...a,placeholder:"Sample placeholder"}),m=t=>e(r,{...a,placeholder:"Sample placeholder"}),n=t=>e(r,{...a,size:"small"}),p=t=>e(r,{...a,size:"normal"});o.__docgenInfo={description:"",methods:[],displayName:"EmptyPropsObject"};s.__docgenInfo={description:"",methods:[],displayName:"SampleValue"};c.__docgenInfo={description:"",methods:[],displayName:"Placeholder"};m.__docgenInfo={description:"",methods:[],displayName:"SizeMini"};n.__docgenInfo={description:"",methods:[],displayName:"SizeSmall"};p.__docgenInfo={description:"",methods:[],displayName:"SizeNormal"};var l,i,d;o.parameters={...o.parameters,docs:{...(l=o.parameters)==null?void 0:l.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{N as r}from"./number-input-ZhezuDVT.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./index-dnMhQZ-1.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./index-7vsPyIck.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";const a={onChange:()=>{}},G={title:"Perseus/Components/Number Input"},o=t=>e(r,{...a}),s=t=>e(r,{...a,value:1234567890}),c=t=>e(r,{...a,placeholder:"Sample placeholder"}),m=t=>e(r,{...a,placeholder:"Sample placeholder"}),n=t=>e(r,{...a,size:"small"}),p=t=>e(r,{...a,size:"normal"});o.__docgenInfo={description:"",methods:[],displayName:"EmptyPropsObject"};s.__docgenInfo={description:"",methods:[],displayName:"SampleValue"};c.__docgenInfo={description:"",methods:[],displayName:"Placeholder"};m.__docgenInfo={description:"",methods:[],displayName:"SizeMini"};n.__docgenInfo={description:"",methods:[],displayName:"SizeSmall"};p.__docgenInfo={description:"",methods:[],displayName:"SizeNormal"};var l,i,d;o.parameters={...o.parameters,docs:{...(l=o.parameters)==null?void 0:l.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(d=(i=o.parameters)==null?void 0:i.docs)==null?void 0:d.source}}};var u,g,S;s.parameters={...s.parameters,docs:{...(u=s.parameters)==null?void 0:u.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/number-line-editor-qZz0HHTk.js b/assets/number-line-editor-5mXaeixJ.js similarity index 94% rename from assets/number-line-editor-qZz0HHTk.js rename to assets/number-line-editor-5mXaeixJ.js index 46656e1fe3..c555cfe5f1 100644 --- a/assets/number-line-editor-qZz0HHTk.js +++ b/assets/number-line-editor-5mXaeixJ.js @@ -1 +1 @@ -import{a as l,j as i}from"./jsx-runtime-FVsy8kgq.js";import{i as k}from"./util-XcxTwqb0.js";import"./article-renderer-6f7Dak4j.js";import{_ as C}from"./jquery-yG1GhClm.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as w}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{E as R}from"./editor-jsonify-iuVqcZSO.js";import{C as m}from"./index-QCAhLhLD.js";import{P as a}from"./index-0C4KXdeC.js";import{r as S}from"./index-TT1qJ6UJ.js";const{ButtonGroup:q,InfoTip:p,NumberInput:r,RangeInput:T}=w,N=(b,e,n)=>Math.min(Math.max(b,e),n),V="–",c=class c extends S.Component{constructor(){super(...arguments),this.onRangeChange=e=>{this.props.onChange({range:e})},this.onLabelRangeChange=(e,n)=>{let s=this.props.labelRange.slice();const o=s[1-e];n==null||o==null?s[e]=n:s=[Math.min(n,o),Math.max(n,o)],this.props.onChange({labelRange:s})},this.onDivisionRangeChange=e=>{let n=this.props.numDivisions;n=N(n,e[0],e[1]),this.props.onChange({divisionRange:e,numDivisions:n})},this.onNumChange=(e,n)=>{const s={};s[e]=n,this.props.onChange(s)},this.onNumDivisionsChange=e=>{const n=this.props.divisionRange.slice();e=C.isFinite(e)?Math.round(e):0,e=e<0?e*-1:e,e&&(e=Math.min(n[1],Math.max(n[0],e)),this.props.onChange({tickStep:null,divisionRange:n,numDivisions:e}))},this.onTickStepChange=e=>{this.props.onChange({numDivisions:null,tickStep:e})},this.onChangeRelation=e=>{const n=e.target.value;this.props.onChange({correctRel:n,isInequality:n!=="eq"})},this.onLabelStyleChange=e=>{this.props.onChange({labelStyle:e})},this.serialize=()=>R.serialize.call(this)}render(){const e=this.props.range,n=this.props.labelRange,s=this.props.divisionRange;e[0]=+e[0],e[1]=+e[1];const o=e[1]-e[0],y=this.props.numDivisions,u=this.props.snapDivisions,g=this.props.tickStep,d=this.props.isTickCtrl;let h;d?h=null:h=g?g/u:o/y/u;const v=[{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"}];return l("div",{className:"perseus-widget-number-line-editor",children:[l("div",{className:"perseus-widget-row",children:["Correct x"," ",l("select",{value:this.props.correctRel,onChange:this.onChangeRelation,"aria-label":"Select relationship",children:[i("option",{value:"eq","aria-label":"Equal",children:"="}),i("option",{value:"lt","aria-label":"Less than",children:"<"}),i("option",{value:"gt","aria-label":"Greater than",children:">"}),i("option",{value:"le","aria-label":"Less than or equal",children:"≤"}),i("option",{value:"ge","aria-label":"Greater than or equal",children:"≥"})]})," ",i(r,{value:this.props.correctX,format:this.props.labelStyle,onChange:this.onNumChange.bind(this,"correctX"),checkValidity:t=>t>=e[0]&&t<=e[1]&&(!h||k((t-e[0])/h)),placeholder:"answer",size:"normal",useArrowKeys:!0}),i(p,{children:i("p",{children:"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 (=, <, >, ≤, ≥)."})})]}),l("div",{className:"perseus-widget-row",children:[this.props.static?i("label",{children:"Range:"}):l("label",{children:["Position:"," ",i(r,{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})," ∈ "]}),i(T,{value:e,onChange:this.onRangeChange,format:this.props.labelStyle,useArrowKeys:!0}),l(p,{children:[l("p",{children:["This controls the initial position of the point along the number line and the",i("strong",{children:"range"}),", the position of the endpoints of the number line. Setting the range constrains the position of the answer and the labels."]}),i("p",{children:"In static mode, the initial position of the point is determined by Correct x instead of position."})]})]}),i("div",{className:"perseus-widget-row",children:l("div",{className:"perseus-widget-left-col",children:["Labels:"," ",i(r,{value:n[0],placeholder:e[0],format:this.props.labelStyle,checkValidity:t=>t>=e[0]&&t<=e[1],onChange:this.onLabelRangeChange.bind(this,0),useArrowKeys:!0}),i("span",{children:" & "}),i(r,{value:n[1],placeholder:e[1],format:this.props.labelStyle,checkValidity:t=>t>=e[0]&&t<=e[1],onChange:this.onLabelRangeChange.bind(this,1),useArrowKeys:!0}),i(p,{children:l("p",{children:["This controls the position of the left / right labels. By default, the labels are set by the range ",i("br",{}),i("strong",{children:"Note:"})," Ensure that the labels line up with the tick marks, or it may be confusing for users."]})})]})}),l("div",{className:"perseus-widget-row",children:["Style:"," ",i(q,{allowEmpty:!1,value:this.props.labelStyle,buttons:v,onChange:this.onLabelStyleChange}),i(p,{children:i("p",{children:"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."})})]}),l("div",{className:"perseus-widget-row",children:[!this.props.static&&i("div",{className:"perseus-widget-left-col",children:i(m,{label:"Show tick controller",checked:this.props.isTickCtrl,onChange:t=>{this.props.onChange({isTickCtrl:t})}})}),i("div",{className:"perseus-widget-right-col",children:i(m,{label:"Show label ticks",checked:this.props.labelTicks,onChange:t=>{this.props.onChange({labelTicks:t})}})})]}),i("div",{className:"perseus-widget-row",children:!this.props.static&&i(m,{label:"Show tooltips",checked:this.props.showTooltips,onChange:t=>{this.props.onChange({showTooltips:t})}})}),l("div",{className:"perseus-widget-row",children:[d&&l("span",{children:[l("label",{children:["Start num divisions at"," ",i(r,{value:this.props.numDivisions||null,format:"decimal",onChange:this.onNumDivisionsChange,checkValidity:t=>t>=s[0]&&t<=s[1],placeholder:o/this.props.tickStep,useArrowKeys:!0})]}),i(p,{children:l("p",{children:["This controls the number (and position) of the tick marks. The number of divisions is constrained to"," "+s[0]+V+s[1],".",i("br",{}),i("strong",{children:"Note:"})," The user will be able to specify the number of divisions in a number input."]})})]}),!d&&l("span",{children:[l("label",{children:["Num divisions:"," ",i(r,{value:this.props.numDivisions||null,format:"decimal",onChange:this.onNumDivisionsChange,checkValidity:t=>t>=s[0]&&t<=s[1],placeholder:o/this.props.tickStep,useArrowKeys:!0})]})," ",l("label",{children:["or tick step:"," ",i(r,{value:this.props.tickStep||null,format:this.props.labelStyle,onChange:this.onTickStepChange,checkValidity:t=>t>0&&t<=o,placeholder:o/this.props.numDivisions,useArrowKeys:!0})]}),i(p,{children:l("p",{children:["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."," ",i("br",{}),i("strong",{children:"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."]})})]})]}),l("div",{className:"perseus-widget-row",children:[l("label",{children:["Snap increments per tick:"," ",i(r,{value:u,checkValidity:t=>t>0,format:this.props.labelStyle,onChange:this.onNumChange.bind(this,"snapDivisions"),useArrowKeys:!0})]}),i(p,{children:l("p",{children:["This determines the number of different places the point will snap between two adjacent tick marks."," ",i("br",{}),i("strong",{children:"Note:"}),"Ensure the required number of snap increments is provided to answer the question."]})})]})]})}};c.propTypes={range:a.arrayOf(a.number).isRequired,labelRange:a.arrayOf(a.number).isRequired,labelStyle:a.string.isRequired,labelTicks:a.bool,divisionRange:a.arrayOf(a.number).isRequired,numDivisions:a.number.isRequired,snapDivisions:a.number,tickStep:a.number,correctRel:a.oneOf(["lt","gt","le","ge","eq"]),correctX:a.number,initialX:a.number,isTickCtrl:a.bool,onChange:a.func.isRequired,static:a.bool,showTooltips:a.bool},c.widgetName="number-line",c.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};let f=c;f.__docgenInfo={description:"",methods:[{name:"onRangeChange",docblock:null,modifiers:[],params:[{name:"range",optional:!1,type:null}],returns:null},{name:"onLabelRangeChange",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"num",optional:!1,type:null}],returns:null},{name:"onDivisionRangeChange",docblock:null,modifiers:[],params:[{name:"divisionRange",optional:!1,type:null}],returns:null},{name:"onNumChange",docblock:null,modifiers:[],params:[{name:"key",optional:!1,type:null},{name:"value",optional:!1,type:null}],returns:null},{name:"onNumDivisionsChange",docblock:null,modifiers:[],params:[{name:"numDivisions",optional:!1,type:null}],returns:null},{name:"onTickStepChange",docblock:null,modifiers:[],params:[{name:"tickStep",optional:!1,type:null}],returns:null},{name:"onChangeRelation",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"onLabelStyleChange",docblock:null,modifiers:[],params:[{name:"labelStyle",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"NumberLineEditor",props:{range:{defaultValue:{value:"[0, 10]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1},labelRange:{defaultValue:{value:"[null, null]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1},labelStyle:{defaultValue:{value:'"decimal"',computed:!1},description:"",type:{name:"string"},required:!1},labelTicks:{defaultValue:{value:"true",computed:!1},description:"",type:{name:"bool"},required:!1},divisionRange:{defaultValue:{value:"[1, 12]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1},numDivisions:{defaultValue:{value:"5",computed:!1},description:"",type:{name:"number"},required:!1},snapDivisions:{defaultValue:{value:"2",computed:!1},description:"",type:{name:"number"},required:!1},tickStep:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"number"},required:!1},correctRel:{defaultValue:{value:'"eq"',computed:!1},description:"",type:{name:"enum",value:[{value:'"lt"',computed:!1},{value:'"gt"',computed:!1},{value:'"le"',computed:!1},{value:'"ge"',computed:!1},{value:'"eq"',computed:!1}]},required:!1},correctX:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"number"},required:!1},initialX:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"number"},required:!1},showTooltips:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},isTickCtrl:{description:"",type:{name:"bool"},required:!1},onChange:{description:"",type:{name:"func"},required:!0},static:{description:"",type:{name:"bool"},required:!1}}};export{f as N}; +import{a as l,j as i}from"./jsx-runtime-FVsy8kgq.js";import{i as k}from"./util-YrNvlCNO.js";import"./article-renderer-TMdCDA85.js";import{_ as C}from"./jquery-yG1GhClm.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as w}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{E as R}from"./editor-jsonify-SX5E4P_Y.js";import{C as m}from"./index-QCAhLhLD.js";import{P as a}from"./index-k-0mNqHS.js";import{r as S}from"./index-TT1qJ6UJ.js";const{ButtonGroup:q,InfoTip:p,NumberInput:r,RangeInput:T}=w,N=(b,e,n)=>Math.min(Math.max(b,e),n),V="–",c=class c extends S.Component{constructor(){super(...arguments),this.onRangeChange=e=>{this.props.onChange({range:e})},this.onLabelRangeChange=(e,n)=>{let s=this.props.labelRange.slice();const o=s[1-e];n==null||o==null?s[e]=n:s=[Math.min(n,o),Math.max(n,o)],this.props.onChange({labelRange:s})},this.onDivisionRangeChange=e=>{let n=this.props.numDivisions;n=N(n,e[0],e[1]),this.props.onChange({divisionRange:e,numDivisions:n})},this.onNumChange=(e,n)=>{const s={};s[e]=n,this.props.onChange(s)},this.onNumDivisionsChange=e=>{const n=this.props.divisionRange.slice();e=C.isFinite(e)?Math.round(e):0,e=e<0?e*-1:e,e&&(e=Math.min(n[1],Math.max(n[0],e)),this.props.onChange({tickStep:null,divisionRange:n,numDivisions:e}))},this.onTickStepChange=e=>{this.props.onChange({numDivisions:null,tickStep:e})},this.onChangeRelation=e=>{const n=e.target.value;this.props.onChange({correctRel:n,isInequality:n!=="eq"})},this.onLabelStyleChange=e=>{this.props.onChange({labelStyle:e})},this.serialize=()=>R.serialize.call(this)}render(){const e=this.props.range,n=this.props.labelRange,s=this.props.divisionRange;e[0]=+e[0],e[1]=+e[1];const o=e[1]-e[0],y=this.props.numDivisions,u=this.props.snapDivisions,g=this.props.tickStep,d=this.props.isTickCtrl;let h;d?h=null:h=g?g/u:o/y/u;const v=[{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"}];return l("div",{className:"perseus-widget-number-line-editor",children:[l("div",{className:"perseus-widget-row",children:["Correct x"," ",l("select",{value:this.props.correctRel,onChange:this.onChangeRelation,"aria-label":"Select relationship",children:[i("option",{value:"eq","aria-label":"Equal",children:"="}),i("option",{value:"lt","aria-label":"Less than",children:"<"}),i("option",{value:"gt","aria-label":"Greater than",children:">"}),i("option",{value:"le","aria-label":"Less than or equal",children:"≤"}),i("option",{value:"ge","aria-label":"Greater than or equal",children:"≥"})]})," ",i(r,{value:this.props.correctX,format:this.props.labelStyle,onChange:this.onNumChange.bind(this,"correctX"),checkValidity:t=>t>=e[0]&&t<=e[1]&&(!h||k((t-e[0])/h)),placeholder:"answer",size:"normal",useArrowKeys:!0}),i(p,{children:i("p",{children:"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 (=, <, >, ≤, ≥)."})})]}),l("div",{className:"perseus-widget-row",children:[this.props.static?i("label",{children:"Range:"}):l("label",{children:["Position:"," ",i(r,{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})," ∈ "]}),i(T,{value:e,onChange:this.onRangeChange,format:this.props.labelStyle,useArrowKeys:!0}),l(p,{children:[l("p",{children:["This controls the initial position of the point along the number line and the",i("strong",{children:"range"}),", the position of the endpoints of the number line. Setting the range constrains the position of the answer and the labels."]}),i("p",{children:"In static mode, the initial position of the point is determined by Correct x instead of position."})]})]}),i("div",{className:"perseus-widget-row",children:l("div",{className:"perseus-widget-left-col",children:["Labels:"," ",i(r,{value:n[0],placeholder:e[0],format:this.props.labelStyle,checkValidity:t=>t>=e[0]&&t<=e[1],onChange:this.onLabelRangeChange.bind(this,0),useArrowKeys:!0}),i("span",{children:" & "}),i(r,{value:n[1],placeholder:e[1],format:this.props.labelStyle,checkValidity:t=>t>=e[0]&&t<=e[1],onChange:this.onLabelRangeChange.bind(this,1),useArrowKeys:!0}),i(p,{children:l("p",{children:["This controls the position of the left / right labels. By default, the labels are set by the range ",i("br",{}),i("strong",{children:"Note:"})," Ensure that the labels line up with the tick marks, or it may be confusing for users."]})})]})}),l("div",{className:"perseus-widget-row",children:["Style:"," ",i(q,{allowEmpty:!1,value:this.props.labelStyle,buttons:v,onChange:this.onLabelStyleChange}),i(p,{children:i("p",{children:"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."})})]}),l("div",{className:"perseus-widget-row",children:[!this.props.static&&i("div",{className:"perseus-widget-left-col",children:i(m,{label:"Show tick controller",checked:this.props.isTickCtrl,onChange:t=>{this.props.onChange({isTickCtrl:t})}})}),i("div",{className:"perseus-widget-right-col",children:i(m,{label:"Show label ticks",checked:this.props.labelTicks,onChange:t=>{this.props.onChange({labelTicks:t})}})})]}),i("div",{className:"perseus-widget-row",children:!this.props.static&&i(m,{label:"Show tooltips",checked:this.props.showTooltips,onChange:t=>{this.props.onChange({showTooltips:t})}})}),l("div",{className:"perseus-widget-row",children:[d&&l("span",{children:[l("label",{children:["Start num divisions at"," ",i(r,{value:this.props.numDivisions||null,format:"decimal",onChange:this.onNumDivisionsChange,checkValidity:t=>t>=s[0]&&t<=s[1],placeholder:o/this.props.tickStep,useArrowKeys:!0})]}),i(p,{children:l("p",{children:["This controls the number (and position) of the tick marks. The number of divisions is constrained to"," "+s[0]+V+s[1],".",i("br",{}),i("strong",{children:"Note:"})," The user will be able to specify the number of divisions in a number input."]})})]}),!d&&l("span",{children:[l("label",{children:["Num divisions:"," ",i(r,{value:this.props.numDivisions||null,format:"decimal",onChange:this.onNumDivisionsChange,checkValidity:t=>t>=s[0]&&t<=s[1],placeholder:o/this.props.tickStep,useArrowKeys:!0})]})," ",l("label",{children:["or tick step:"," ",i(r,{value:this.props.tickStep||null,format:this.props.labelStyle,onChange:this.onTickStepChange,checkValidity:t=>t>0&&t<=o,placeholder:o/this.props.numDivisions,useArrowKeys:!0})]}),i(p,{children:l("p",{children:["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."," ",i("br",{}),i("strong",{children:"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."]})})]})]}),l("div",{className:"perseus-widget-row",children:[l("label",{children:["Snap increments per tick:"," ",i(r,{value:u,checkValidity:t=>t>0,format:this.props.labelStyle,onChange:this.onNumChange.bind(this,"snapDivisions"),useArrowKeys:!0})]}),i(p,{children:l("p",{children:["This determines the number of different places the point will snap between two adjacent tick marks."," ",i("br",{}),i("strong",{children:"Note:"}),"Ensure the required number of snap increments is provided to answer the question."]})})]})]})}};c.propTypes={range:a.arrayOf(a.number).isRequired,labelRange:a.arrayOf(a.number).isRequired,labelStyle:a.string.isRequired,labelTicks:a.bool,divisionRange:a.arrayOf(a.number).isRequired,numDivisions:a.number.isRequired,snapDivisions:a.number,tickStep:a.number,correctRel:a.oneOf(["lt","gt","le","ge","eq"]),correctX:a.number,initialX:a.number,isTickCtrl:a.bool,onChange:a.func.isRequired,static:a.bool,showTooltips:a.bool},c.widgetName="number-line",c.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};let f=c;f.__docgenInfo={description:"",methods:[{name:"onRangeChange",docblock:null,modifiers:[],params:[{name:"range",optional:!1,type:null}],returns:null},{name:"onLabelRangeChange",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"num",optional:!1,type:null}],returns:null},{name:"onDivisionRangeChange",docblock:null,modifiers:[],params:[{name:"divisionRange",optional:!1,type:null}],returns:null},{name:"onNumChange",docblock:null,modifiers:[],params:[{name:"key",optional:!1,type:null},{name:"value",optional:!1,type:null}],returns:null},{name:"onNumDivisionsChange",docblock:null,modifiers:[],params:[{name:"numDivisions",optional:!1,type:null}],returns:null},{name:"onTickStepChange",docblock:null,modifiers:[],params:[{name:"tickStep",optional:!1,type:null}],returns:null},{name:"onChangeRelation",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"onLabelStyleChange",docblock:null,modifiers:[],params:[{name:"labelStyle",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"NumberLineEditor",props:{range:{defaultValue:{value:"[0, 10]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1},labelRange:{defaultValue:{value:"[null, null]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1},labelStyle:{defaultValue:{value:'"decimal"',computed:!1},description:"",type:{name:"string"},required:!1},labelTicks:{defaultValue:{value:"true",computed:!1},description:"",type:{name:"bool"},required:!1},divisionRange:{defaultValue:{value:"[1, 12]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1},numDivisions:{defaultValue:{value:"5",computed:!1},description:"",type:{name:"number"},required:!1},snapDivisions:{defaultValue:{value:"2",computed:!1},description:"",type:{name:"number"},required:!1},tickStep:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"number"},required:!1},correctRel:{defaultValue:{value:'"eq"',computed:!1},description:"",type:{name:"enum",value:[{value:'"lt"',computed:!1},{value:'"gt"',computed:!1},{value:'"le"',computed:!1},{value:'"ge"',computed:!1},{value:'"eq"',computed:!1}]},required:!1},correctX:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"number"},required:!1},initialX:{defaultValue:{value:"null",computed:!1},description:"",type:{name:"number"},required:!1},showTooltips:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},isTickCtrl:{description:"",type:{name:"bool"},required:!1},onChange:{description:"",type:{name:"func"},required:!0},static:{description:"",type:{name:"bool"},required:!1}}};export{f as N}; diff --git a/assets/number-line-editor.stories-rmnn8J8W.js b/assets/number-line-editor.stories-jKILPdN5.js similarity index 65% rename from assets/number-line-editor.stories-rmnn8J8W.js rename to assets/number-line-editor.stories-jKILPdN5.js index 0ec0344850..0a128ed25b 100644 --- a/assets/number-line-editor.stories-rmnn8J8W.js +++ b/assets/number-line-editor.stories-jKILPdN5.js @@ -1,3 +1,3 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{N as e}from"./number-line-editor-qZz0HHTk.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./article-renderer-6f7Dak4j.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./editor-jsonify-iuVqcZSO.js";import"./index-0C4KXdeC.js";const oo={title:"PerseusEditor/Widgets/Number Line Editor"},r=a=>m(e,{onChange:p("onChange")});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var o,t,i;r.parameters={...r.parameters,docs:{...(o=r.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{N as e}from"./number-line-editor-5mXaeixJ.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./article-renderer-TMdCDA85.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./editor-jsonify-SX5E4P_Y.js";import"./index-k-0mNqHS.js";const oo={title:"PerseusEditor/Widgets/Number Line Editor"},r=a=>m(e,{onChange:p("onChange")});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var o,t,i;r.parameters={...r.parameters,docs:{...(o=r.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(i=(t=r.parameters)==null?void 0:t.docs)==null?void 0:i.source}}};const to=["Default"];export{r as Default,to as __namedExportsOrder,oo as default}; diff --git a/assets/number-line.stories-T0jmTY2_.js b/assets/number-line.stories-eX2HoIDy.js similarity index 81% rename from assets/number-line.stories-T0jmTY2_.js rename to assets/number-line.stories-eX2HoIDy.js index 55c4c74a43..f405127e7f 100644 --- a/assets/number-line.stories-T0jmTY2_.js +++ b/assets/number-line.stories-eX2HoIDy.js @@ -1,4 +1,4 @@ -import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{a as q}from"./mobile-keypad-hKjeQGNp.js";import{R as m}from"./renderer-with-debug-ui-fbym8U_I.js";import{S as C}from"./server-item-renderer-with-debug-ui-rx6QaX-9.js";import{T as k}from"./test-keypad-context-wrapper-UieRILfg.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./choice-E4eyMygy.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";import"./ke-score-ui-xy7p6xf5.js";import"./test-dependencies-UUeUFXqw.js";import"./chunk-WFFRPTHA-zlNDxfrq.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";const T={content:`$E=2.5$ +import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{a as q}from"./mobile-keypad-hKjeQGNp.js";import{R as m}from"./renderer-with-debug-ui-YzY7YHzw.js";import{S as C}from"./server-item-renderer-with-debug-ui-xomgDBO_.js";import{T as k}from"./test-keypad-context-wrapper-UieRILfg.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./choice-E4eyMygy.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";import"./ke-score-ui-xy7p6xf5.js";import"./test-dependencies-OZugV_HD.js";import"./chunk-WFFRPTHA-zlNDxfrq.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";const T={content:`$E=2.5$ **Move the dot to $-E$ on the number line.** diff --git a/assets/numeric-input-editor-qJT3lp_E.js b/assets/numeric-input-editor-HZCTKW32.js similarity index 94% rename from assets/numeric-input-editor-qJT3lp_E.js rename to assets/numeric-input-editor-HZCTKW32.js index 66b56739e4..1f86bb3d25 100644 --- a/assets/numeric-input-editor-qJT3lp_E.js +++ b/assets/numeric-input-editor-HZCTKW32.js @@ -1,4 +1,4 @@ -import{a,j as e}from"./jsx-runtime-FVsy8kgq.js";import{c as E}from"./article-renderer-6f7Dak4j.js";import{_ as o}from"./jquery-yG1GhClm.js";import{U as F}from"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as O}from"./components-GHvuFaIn.js";import{I as D}from"./icon-paths-AuJwhOz7.js";import"./index-k-0mNqHS.js";import{P as I}from"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{E as z}from"./editor-jsonify-iuVqcZSO.js";import{C as y}from"./index-QCAhLhLD.js";import{r as P}from"./index-TT1qJ6UJ.js";import{E as R}from"./editor-HVcPyY4Q.js";const{ButtonGroup:A,InfoTip:d,InlineIcon:N,MultiButtonGroup:M,NumberInput:v,TextInput:j}=O,{iconGear:U,iconTrash:V}=D,{firstNumericalParse:k}=F,W=[{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:"π"}],b=T=>({value:null,status:T,message:"",simplify:"required",answerForms:[],strict:!1,maxError:null}),m=class m extends P.Component{constructor(p){super(p),this.change=(...t)=>E.apply(this,t),this.onToggleOptions=t=>{const r=this.state.showOptions.slice();r[t]=!r[t],this.setState({showOptions:r})},this.onTrashAnswer=t=>{if(t>=0&&t{t.key===" "&&(t.preventDefault(),r.apply(this,l))},this.onStatusChange=t=>{const r=["wrong","ungraded","correct"],l=this.props.answers,c=o.indexOf(r,l[t].status),u=r[(c+1)%r.length];this.updateAnswer(t,{status:u,simplify:u==="correct"?"required":"accepted"})},this.updateAnswer=(t,r)=>{if(!o.isObject(r))return o.partial((c,u,w)=>{const h={};h[u]=w,this.updateAnswer(c,h)},t,r);let l=[...this.props.answers];if(t===l.length){const c=b(this.state.lastStatus);l=l.concat(c)}l[t]=o.extend({},l[t],r),this.props.onChange({answers:l})},this.addAnswer=()=>{const t=b(this.state.lastStatus),r=this.props.answers.concat(t);this.props.onChange({answers:r})},this.getSaveWarnings=()=>{const t=[];return o.contains(o.pluck(this.props.answers,"value"),"")&&t.push("One or more answers is empty"),this.props.answers.forEach((r,l)=>{r.strict&&(!r.answerForms||r.answerForms.length===0)&&t.push(`Answer ${l+1} is set to string format matching, but no format was selected`)}),t},this.serialize=()=>z.serialize.call(this),this.state={lastStatus:"wrong",showOptions:o.map(this.props.answers,()=>!1)}}render(){const p=this.props.answers,t=n=>a("div",{className:"perseus-widget-row",children:[e("label",{children:"Unsimplified answers are"}),e(A,{value:p[n].simplify,allowEmpty:!1,buttons:[{value:"required",content:"ungraded"},{value:"optional",content:"accepted"},{value:"enforced",content:"wrong"}],onChange:this.updateAnswer(n,"simplify")||(()=>{})}),a(d,{children:[e("p",{children:'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)'}),e("p",{children:'Select "accepted" only if the user is not expected to know how to simplify fractions yet. (Anything prior to 5th grade)'}),a("p",{children:['Select "wrong" ',e("em",{children:"only"})," if we are specifically assessing the ability to simplify."]})]})]}),r=n=>a("div",{children:[a("div",{className:"perseus-widget-row",children:[e("label",{children:"Choose the suggested answer formats"}),e(M,{buttons:W,values:p[n].answerForms,onChange:this.updateAnswer(n,"answerForms")||(()=>{})}),a(d,{children:[e("p",{children:'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.'}),a("p",{children:["To restrict the answer to ",e("em",{children:"only"}),' an improper fraction (i.e. 7/4), select the improper fraction and toggle "strict" to true. This ',e("b",{children:"will not"})," ","accept 1.75 as an answer."," "]}),e("p",{children:"Unless you are testing that specific skill, please do not restrict the answer format."})]})]}),e("div",{className:"perseus-widget-row",children:e(y,{label:"Strictly match only these formats",checked:p[n].strict,onChange:i=>{this.updateAnswer.bind(this,n)({strict:i})}})})]}),l=n=>e("div",{className:"perseus-widget-row",children:a("label",{children:["Max error"," ",e(v,{className:"max-error",value:p[n].maxError,onChange:this.updateAnswer(n,"maxError"),placeholder:"0"})]})}),c=a("div",{className:"perseus-widget-row",children:[e("label",{children:"Width: "}),e(A,{value:this.props.size,allowEmpty:!1,buttons:[{value:"normal",content:"Normal (80px)"},{value:"small",content:"Small (40px)"}],onChange:this.change("size")}),e(d,{children:e("p",{children:'Use size "Normal" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them.'})})]}),u=e("div",{className:"perseus-widget-row",children:e(y,{label:"Right alignment",checked:this.props.rightAlign,onChange:n=>{this.props.onChange({rightAlign:n})}})}),w=a("div",{className:"perseus-widget-row",children:[a("label",{children:["Aria label",e(j,{value:this.props.labelText,onChange:this.change("labelText")})]}),e(d,{children:e("p",{children:"Text to describe this input. This will be shown to users using screenreaders."})})]}),h=e("div",{children:a("div",{className:"perseus-widget-row",children:[e(y,{label:"Coefficient",checked:this.props.coefficient,onChange:n=>{this.props.onChange({coefficient:n})}}),e(d,{children:e("p",{children:"A coefficient style number allows the student to use - for -1 and an empty string to mean 1."})})]})}),C=e("div",{children:e("a",{href:"#",className:"simple-button orange",onClick:n=>{n.preventDefault(),this.addAnswer()},onKeyDown:n=>this.onSpace(n,this.addAnswer),children:e("span",{children:"Add new answer"})})}),q={wrong:"(address the mistake/misconception)",ungraded:"(explain in detail to avoid confusion)",correct:"(reinforce the user's understanding)"};return a("div",{className:"perseus-input-number-editor",children:[e("div",{className:"ui-title",children:"User input"}),e("div",{className:"msg-title",children:"Message shown to user on attempt"}),p.map((n,i)=>{const S=e(R,{apiOptions:this.props.apiOptions,content:n.message||"",placeholder:"Why is this answer "+n.status+"? "+q[n.status],widgetEnabled:!1,onChange:s=>{"content"in s&&this.updateAnswer(i,{message:s.content})}});return a("div",{className:"perseus-widget-row",children:[a("div",{className:"input-answer-editor-value-container"+(n.maxError?" with-max-error":""),children:[e(v,{value:n.value,className:"numeric-input-value",placeholder:"answer",format:o.last(n.answerForms||[]),onFormatChange:(s,f)=>{let g;f==="pi"?g=["pi"]:f==="mixed"?g=["proper","mixed"]:(f==="proper"||f==="improper")&&(g=["proper","improper"]),this.updateAnswer(i,{value:k(s,this.context.strings),answerForms:g})},onChange:s=>{this.updateAnswer(i,{value:k(s,this.context.strings)})}}),n.strict&&e("div",{className:"is-strict-indicator",title:"strictly equivalent to",children:"≡"}),n.simplify!=="required"&&n.status==="correct"&&e("div",{className:"simplify-indicator "+n.simplify,title:"accepts unsimplified answers",children:"‰"}),n.maxError?a("div",{className:"max-error-container",children:[e("div",{className:"max-error-plusmn",children:"±"}),e(v,{placeholder:0,value:p[i].maxError,format:o.last(n.answerForms||[]),onChange:this.updateAnswer(i,"maxError")})]}):null,e("div",{className:"value-divider"}),e("a",{href:"#",className:"answer-status "+n.status,onClick:s=>{s.preventDefault(),this.onStatusChange(i)},onKeyDown:s=>this.onSpace(s,this.onStatusChange),children:n.status}),e("a",{href:"#",className:"answer-trash","aria-label":"Delete answer",onClick:s=>{s.preventDefault(),this.onTrashAnswer(i)},onKeyDown:s=>this.onSpace(s,this.onTrashAnswer),children:e(N,{...V})}),e("a",{href:"#",className:"options-toggle","aria-label":"Toggle options",onClick:s=>{s.preventDefault(),this.onToggleOptions(i)},onKeyDown:s=>this.onSpace(s,this.onToggleOptions),children:e(N,{...U})})]}),e("div",{className:"input-answer-editor-message",children:S}),this.state.showOptions[i]&&a("div",{className:"options-container",children:[l(i),n.status==="correct"&&t(i),r(i)]})]},i)}),C,c,u,h,w]})}};m.contextType=I,m.widgetName="numeric-input",m.displayName="NumericInputEditor",m.defaultProps={answers:[b("correct")],size:"normal",coefficient:!1,labelText:"",rightAlign:!1};let x=m;x.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"onToggleOptions",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null}],returns:null},{name:"onTrashAnswer",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null}],returns:null},{name:"onSpace",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null},{name:"callback",optional:!1,type:null},{name:"...args",optional:!1,type:null}],returns:null},{name:"onStatusChange",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null}],returns:null},{name:"updateAnswer",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null},{name:"update",optional:!1,type:null}],returns:null},{name:"addAnswer",docblock:null,modifiers:[],params:[],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"NumericInputEditor",props:{answers:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ +import{a,j as e}from"./jsx-runtime-FVsy8kgq.js";import{c as E}from"./article-renderer-TMdCDA85.js";import{_ as o}from"./jquery-yG1GhClm.js";import{U as F}from"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as O}from"./components-h6HHhmoA.js";import{I as D}from"./icon-paths-AuJwhOz7.js";import"./index-0C4KXdeC.js";import{P as I}from"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{E as z}from"./editor-jsonify-SX5E4P_Y.js";import{C as y}from"./index-QCAhLhLD.js";import{r as P}from"./index-TT1qJ6UJ.js";import{E as R}from"./editor-I-vnrXtz.js";const{ButtonGroup:A,InfoTip:d,InlineIcon:N,MultiButtonGroup:M,NumberInput:v,TextInput:j}=O,{iconGear:U,iconTrash:V}=D,{firstNumericalParse:k}=F,W=[{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:"π"}],b=T=>({value:null,status:T,message:"",simplify:"required",answerForms:[],strict:!1,maxError:null}),m=class m extends P.Component{constructor(p){super(p),this.change=(...t)=>E.apply(this,t),this.onToggleOptions=t=>{const r=this.state.showOptions.slice();r[t]=!r[t],this.setState({showOptions:r})},this.onTrashAnswer=t=>{if(t>=0&&t{t.key===" "&&(t.preventDefault(),r.apply(this,l))},this.onStatusChange=t=>{const r=["wrong","ungraded","correct"],l=this.props.answers,c=o.indexOf(r,l[t].status),u=r[(c+1)%r.length];this.updateAnswer(t,{status:u,simplify:u==="correct"?"required":"accepted"})},this.updateAnswer=(t,r)=>{if(!o.isObject(r))return o.partial((c,u,w)=>{const h={};h[u]=w,this.updateAnswer(c,h)},t,r);let l=[...this.props.answers];if(t===l.length){const c=b(this.state.lastStatus);l=l.concat(c)}l[t]=o.extend({},l[t],r),this.props.onChange({answers:l})},this.addAnswer=()=>{const t=b(this.state.lastStatus),r=this.props.answers.concat(t);this.props.onChange({answers:r})},this.getSaveWarnings=()=>{const t=[];return o.contains(o.pluck(this.props.answers,"value"),"")&&t.push("One or more answers is empty"),this.props.answers.forEach((r,l)=>{r.strict&&(!r.answerForms||r.answerForms.length===0)&&t.push(`Answer ${l+1} is set to string format matching, but no format was selected`)}),t},this.serialize=()=>z.serialize.call(this),this.state={lastStatus:"wrong",showOptions:o.map(this.props.answers,()=>!1)}}render(){const p=this.props.answers,t=n=>a("div",{className:"perseus-widget-row",children:[e("label",{children:"Unsimplified answers are"}),e(A,{value:p[n].simplify,allowEmpty:!1,buttons:[{value:"required",content:"ungraded"},{value:"optional",content:"accepted"},{value:"enforced",content:"wrong"}],onChange:this.updateAnswer(n,"simplify")||(()=>{})}),a(d,{children:[e("p",{children:'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)'}),e("p",{children:'Select "accepted" only if the user is not expected to know how to simplify fractions yet. (Anything prior to 5th grade)'}),a("p",{children:['Select "wrong" ',e("em",{children:"only"})," if we are specifically assessing the ability to simplify."]})]})]}),r=n=>a("div",{children:[a("div",{className:"perseus-widget-row",children:[e("label",{children:"Choose the suggested answer formats"}),e(M,{buttons:W,values:p[n].answerForms,onChange:this.updateAnswer(n,"answerForms")||(()=>{})}),a(d,{children:[e("p",{children:'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.'}),a("p",{children:["To restrict the answer to ",e("em",{children:"only"}),' an improper fraction (i.e. 7/4), select the improper fraction and toggle "strict" to true. This ',e("b",{children:"will not"})," ","accept 1.75 as an answer."," "]}),e("p",{children:"Unless you are testing that specific skill, please do not restrict the answer format."})]})]}),e("div",{className:"perseus-widget-row",children:e(y,{label:"Strictly match only these formats",checked:p[n].strict,onChange:i=>{this.updateAnswer.bind(this,n)({strict:i})}})})]}),l=n=>e("div",{className:"perseus-widget-row",children:a("label",{children:["Max error"," ",e(v,{className:"max-error",value:p[n].maxError,onChange:this.updateAnswer(n,"maxError"),placeholder:"0"})]})}),c=a("div",{className:"perseus-widget-row",children:[e("label",{children:"Width: "}),e(A,{value:this.props.size,allowEmpty:!1,buttons:[{value:"normal",content:"Normal (80px)"},{value:"small",content:"Small (40px)"}],onChange:this.change("size")}),e(d,{children:e("p",{children:'Use size "Normal" for all text boxes, unless there are multiple text boxes in one line and the answer area is too narrow to fit them.'})})]}),u=e("div",{className:"perseus-widget-row",children:e(y,{label:"Right alignment",checked:this.props.rightAlign,onChange:n=>{this.props.onChange({rightAlign:n})}})}),w=a("div",{className:"perseus-widget-row",children:[a("label",{children:["Aria label",e(j,{value:this.props.labelText,onChange:this.change("labelText")})]}),e(d,{children:e("p",{children:"Text to describe this input. This will be shown to users using screenreaders."})})]}),h=e("div",{children:a("div",{className:"perseus-widget-row",children:[e(y,{label:"Coefficient",checked:this.props.coefficient,onChange:n=>{this.props.onChange({coefficient:n})}}),e(d,{children:e("p",{children:"A coefficient style number allows the student to use - for -1 and an empty string to mean 1."})})]})}),C=e("div",{children:e("a",{href:"#",className:"simple-button orange",onClick:n=>{n.preventDefault(),this.addAnswer()},onKeyDown:n=>this.onSpace(n,this.addAnswer),children:e("span",{children:"Add new answer"})})}),q={wrong:"(address the mistake/misconception)",ungraded:"(explain in detail to avoid confusion)",correct:"(reinforce the user's understanding)"};return a("div",{className:"perseus-input-number-editor",children:[e("div",{className:"ui-title",children:"User input"}),e("div",{className:"msg-title",children:"Message shown to user on attempt"}),p.map((n,i)=>{const S=e(R,{apiOptions:this.props.apiOptions,content:n.message||"",placeholder:"Why is this answer "+n.status+"? "+q[n.status],widgetEnabled:!1,onChange:s=>{"content"in s&&this.updateAnswer(i,{message:s.content})}});return a("div",{className:"perseus-widget-row",children:[a("div",{className:"input-answer-editor-value-container"+(n.maxError?" with-max-error":""),children:[e(v,{value:n.value,className:"numeric-input-value",placeholder:"answer",format:o.last(n.answerForms||[]),onFormatChange:(s,f)=>{let g;f==="pi"?g=["pi"]:f==="mixed"?g=["proper","mixed"]:(f==="proper"||f==="improper")&&(g=["proper","improper"]),this.updateAnswer(i,{value:k(s,this.context.strings),answerForms:g})},onChange:s=>{this.updateAnswer(i,{value:k(s,this.context.strings)})}}),n.strict&&e("div",{className:"is-strict-indicator",title:"strictly equivalent to",children:"≡"}),n.simplify!=="required"&&n.status==="correct"&&e("div",{className:"simplify-indicator "+n.simplify,title:"accepts unsimplified answers",children:"‰"}),n.maxError?a("div",{className:"max-error-container",children:[e("div",{className:"max-error-plusmn",children:"±"}),e(v,{placeholder:0,value:p[i].maxError,format:o.last(n.answerForms||[]),onChange:this.updateAnswer(i,"maxError")})]}):null,e("div",{className:"value-divider"}),e("a",{href:"#",className:"answer-status "+n.status,onClick:s=>{s.preventDefault(),this.onStatusChange(i)},onKeyDown:s=>this.onSpace(s,this.onStatusChange),children:n.status}),e("a",{href:"#",className:"answer-trash","aria-label":"Delete answer",onClick:s=>{s.preventDefault(),this.onTrashAnswer(i)},onKeyDown:s=>this.onSpace(s,this.onTrashAnswer),children:e(N,{...V})}),e("a",{href:"#",className:"options-toggle","aria-label":"Toggle options",onClick:s=>{s.preventDefault(),this.onToggleOptions(i)},onKeyDown:s=>this.onSpace(s,this.onToggleOptions),children:e(N,{...U})})]}),e("div",{className:"input-answer-editor-message",children:S}),this.state.showOptions[i]&&a("div",{className:"options-container",children:[l(i),n.status==="correct"&&t(i),r(i)]})]},i)}),C,c,u,h,w]})}};m.contextType=I,m.widgetName="numeric-input",m.displayName="NumericInputEditor",m.defaultProps={answers:[b("correct")],size:"normal",coefficient:!1,labelText:"",rightAlign:!1};let x=m;x.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"onToggleOptions",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null}],returns:null},{name:"onTrashAnswer",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null}],returns:null},{name:"onSpace",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null},{name:"callback",optional:!1,type:null},{name:"...args",optional:!1,type:null}],returns:null},{name:"onStatusChange",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null}],returns:null},{name:"updateAnswer",docblock:null,modifiers:[],params:[{name:"choiceIndex",optional:!1,type:null},{name:"update",optional:!1,type:null}],returns:null},{name:"addAnswer",docblock:null,modifiers:[],params:[],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"NumericInputEditor",props:{answers:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ message: string; value: number; status: string; diff --git a/assets/numeric-input-editor.stories-8JKpa6PE.js b/assets/numeric-input-editor.stories-_Cl_Up33.js similarity index 52% rename from assets/numeric-input-editor.stories-8JKpa6PE.js rename to assets/numeric-input-editor.stories-_Cl_Up33.js index d5bc3e9353..90b466fba2 100644 --- a/assets/numeric-input-editor.stories-8JKpa6PE.js +++ b/assets/numeric-input-editor.stories-_Cl_Up33.js @@ -1,3 +1,3 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{N as e}from"./numeric-input-editor-qJT3lp_E.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./editor-jsonify-iuVqcZSO.js";import"./editor-HVcPyY4Q.js";import"./index-0C4KXdeC.js";import"./index-SM3muJE2.js";import"./section-control-button-c-G3Veu9.js";import"./index-tFzzSRL2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";const at={title:"PerseusEditor/Widgets/NumericInput Editor"},r=a=>m(e,{onChange:p("onChange")});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var t,o,i;r.parameters={...r.parameters,docs:{...(t=r.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{N as e}from"./numeric-input-editor-HZCTKW32.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./editor-jsonify-SX5E4P_Y.js";import"./editor-I-vnrXtz.js";import"./index-fuycm_QE.js";import"./index-k-0mNqHS.js";import"./index-SM3muJE2.js";import"./section-control-button-J8oVp9bZ.js";import"./index-tFzzSRL2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";const st={title:"PerseusEditor/Widgets/NumericInput Editor"},r=a=>m(e,{onChange:p("onChange")});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var t,o,i;r.parameters={...r.parameters,docs:{...(t=r.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; -}`,...(i=(o=r.parameters)==null?void 0:o.docs)==null?void 0:i.source}}};const st=["Default"];export{r as Default,st as __namedExportsOrder,at as default}; +}`,...(i=(o=r.parameters)==null?void 0:o.docs)==null?void 0:i.source}}};const nt=["Default"];export{r as Default,nt as __namedExportsOrder,st as default}; diff --git a/assets/numeric-input.stories-iXupslkj.js b/assets/numeric-input.stories-urQAWTUr.js similarity index 83% rename from assets/numeric-input.stories-iXupslkj.js rename to assets/numeric-input.stories-urQAWTUr.js index 0791f54c0b..21bdb4379a 100644 --- a/assets/numeric-input.stories-iXupslkj.js +++ b/assets/numeric-input.stories-urQAWTUr.js @@ -1,4 +1,4 @@ -import{j as i,a as t}from"./jsx-runtime-FVsy8kgq.js";import{a as o}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{R as z}from"./renderer-with-debug-ui-fbym8U_I.js";import{N as p}from"./article-renderer-6f7Dak4j.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./side-by-side-kpK-8vW0.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./dependencies-8XILypbq.js";import"./multi-renderer-PglzmXdY.js";import"./renderer-vBOYiNCS.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./hints-renderer-zKC46_AN.js";import"./shared-3pf9YZIg.js";import"./base-radio-ffaiqOwN.js";import"./choice-none-above-tmJoP6pY.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./hud-FI3E3dT_.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./enums-x5qaTru7.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./answer-choices-uB4giKvU.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";const A={content:"$5008 \\div 4 =$ [[☃ numeric-input 1]] ",images:{},widgets:{"numeric-input 1":{graded:!0,version:{major:0,minor:0},static:!1,type:"numeric-input",options:{coefficient:!1,static:!1,answers:[{status:"correct",maxError:null,strict:!1,value:1252,simplify:"required",message:""}],labelText:"",size:"normal"},alignment:"default"}}};function l(e){return{...{alignment:"",answers:[],containerSizeClass:"medium",isLastUsedWidget:!0,coefficient:!1,currentValue:"",problemNum:0,reviewModeRubric:{answers:[],labelText:"",size:"medium",coefficient:!1,static:!1},rightAlign:!1,size:"normal",static:!1,widgetId:"widgetId",findWidgets:o("findWidgets"),onBlur:o("onBlur"),onChange:o("onChange"),onFocus:o("onFocus"),trackInteraction:o("trackInteraction")},...e}}const yr={title:"Perseus/Widgets/NumericInput",args:{coefficient:!1,currentValue:"8675309",rightAlign:!1},argTypes:{size:{options:["normal","small"],control:{type:"radio"},defaultValue:"normal"}}},n=()=>i(z,{question:A}),s=e=>{const r=l(e);return i(p,{...r})},a=e=>{const r=l({...e,size:"small"}),c=l({...e,size:"normal"});return t("div",{children:[t("label",{children:["Small:",i(p,{...r})]}),t("label",{children:["Normal:",i(p,{...c})]})]})},m=e=>{const r=l({...e,rightAlign:!1}),c=l({...e,rightAlign:!0});return t("div",{children:[t("label",{children:["Left:",i(p,{...r})]}),t("label",{children:["Right:",i(p,{...c})]})]})};n.__docgenInfo={description:"",methods:[],displayName:"Question1"};s.__docgenInfo={description:"",methods:[],displayName:"Interactive",props:{coefficient:{required:!0,tsType:{name:"boolean"},description:""},currentValue:{required:!0,tsType:{name:"string"},description:""},rightAlign:{required:!0,tsType:{name:"boolean"},description:""},size:{required:!0,tsType:{name:"union",raw:'"normal" | "small"',elements:[{name:"literal",value:'"normal"'},{name:"literal",value:'"small"'}]},description:""}}};a.__docgenInfo={description:"",methods:[],displayName:"Sizes",props:{coefficient:{required:!0,tsType:{name:"boolean"},description:""},currentValue:{required:!0,tsType:{name:"string"},description:""},rightAlign:{required:!0,tsType:{name:"boolean"},description:""},size:{required:!0,tsType:{name:"union",raw:'"normal" | "small"',elements:[{name:"literal",value:'"normal"'},{name:"literal",value:'"small"'}]},description:""}}};m.__docgenInfo={description:"",methods:[],displayName:"TextAlignment",props:{coefficient:{required:!0,tsType:{name:"boolean"},description:""},currentValue:{required:!0,tsType:{name:"string"},description:""},rightAlign:{required:!0,tsType:{name:"boolean"},description:""},size:{required:!0,tsType:{name:"union",raw:'"normal" | "small"',elements:[{name:"literal",value:'"normal"'},{name:"literal",value:'"small"'}]},description:""}}};var u,d,g;n.parameters={...n.parameters,docs:{...(u=n.parameters)==null?void 0:u.docs,source:{originalSource:`(): React.ReactElement => { +import{j as i,a as t}from"./jsx-runtime-FVsy8kgq.js";import{a as o}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{R as z}from"./renderer-with-debug-ui-YzY7YHzw.js";import{N as p}from"./article-renderer-TMdCDA85.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./side-by-side-kpK-8vW0.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./dependencies-8XILypbq.js";import"./multi-renderer-vtdVtdWv.js";import"./renderer-hPmI_Chp.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./hints-renderer-sA0Ao_qa.js";import"./shared-3pf9YZIg.js";import"./base-radio-TdBv-OLd.js";import"./choice-none-above-HXEAXx7K.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./hud-FI3E3dT_.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./enums-x5qaTru7.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./answer-choices-xSqM961S.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";const A={content:"$5008 \\div 4 =$ [[☃ numeric-input 1]] ",images:{},widgets:{"numeric-input 1":{graded:!0,version:{major:0,minor:0},static:!1,type:"numeric-input",options:{coefficient:!1,static:!1,answers:[{status:"correct",maxError:null,strict:!1,value:1252,simplify:"required",message:""}],labelText:"",size:"normal"},alignment:"default"}}};function l(e){return{...{alignment:"",answers:[],containerSizeClass:"medium",isLastUsedWidget:!0,coefficient:!1,currentValue:"",problemNum:0,reviewModeRubric:{answers:[],labelText:"",size:"medium",coefficient:!1,static:!1},rightAlign:!1,size:"normal",static:!1,widgetId:"widgetId",findWidgets:o("findWidgets"),onBlur:o("onBlur"),onChange:o("onChange"),onFocus:o("onFocus"),trackInteraction:o("trackInteraction")},...e}}const yr={title:"Perseus/Widgets/NumericInput",args:{coefficient:!1,currentValue:"8675309",rightAlign:!1},argTypes:{size:{options:["normal","small"],control:{type:"radio"},defaultValue:"normal"}}},n=()=>i(z,{question:A}),s=e=>{const r=l(e);return i(p,{...r})},a=e=>{const r=l({...e,size:"small"}),c=l({...e,size:"normal"});return t("div",{children:[t("label",{children:["Small:",i(p,{...r})]}),t("label",{children:["Normal:",i(p,{...c})]})]})},m=e=>{const r=l({...e,rightAlign:!1}),c=l({...e,rightAlign:!0});return t("div",{children:[t("label",{children:["Left:",i(p,{...r})]}),t("label",{children:["Right:",i(p,{...c})]})]})};n.__docgenInfo={description:"",methods:[],displayName:"Question1"};s.__docgenInfo={description:"",methods:[],displayName:"Interactive",props:{coefficient:{required:!0,tsType:{name:"boolean"},description:""},currentValue:{required:!0,tsType:{name:"string"},description:""},rightAlign:{required:!0,tsType:{name:"boolean"},description:""},size:{required:!0,tsType:{name:"union",raw:'"normal" | "small"',elements:[{name:"literal",value:'"normal"'},{name:"literal",value:'"small"'}]},description:""}}};a.__docgenInfo={description:"",methods:[],displayName:"Sizes",props:{coefficient:{required:!0,tsType:{name:"boolean"},description:""},currentValue:{required:!0,tsType:{name:"string"},description:""},rightAlign:{required:!0,tsType:{name:"boolean"},description:""},size:{required:!0,tsType:{name:"union",raw:'"normal" | "small"',elements:[{name:"literal",value:'"normal"'},{name:"literal",value:'"small"'}]},description:""}}};m.__docgenInfo={description:"",methods:[],displayName:"TextAlignment",props:{coefficient:{required:!0,tsType:{name:"boolean"},description:""},currentValue:{required:!0,tsType:{name:"string"},description:""},rightAlign:{required:!0,tsType:{name:"boolean"},description:""},size:{required:!0,tsType:{name:"union",raw:'"normal" | "small"',elements:[{name:"literal",value:'"normal"'},{name:"literal",value:'"small"'}]},description:""}}};var u,d,g;n.parameters={...n.parameters,docs:{...(u=n.parameters)==null?void 0:u.docs,source:{originalSource:`(): React.ReactElement => { return ; }`,...(g=(d=n.parameters)==null?void 0:d.docs)==null?void 0:g.source}}};var f,h,b;s.parameters={...s.parameters,docs:{...(f=s.parameters)==null?void 0:f.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const props = generateProps(args); diff --git a/assets/orderer.stories-X3e5f_od.js b/assets/orderer.stories-pD1b7a2C.js similarity index 76% rename from assets/orderer.stories-X3e5f_od.js rename to assets/orderer.stories-pD1b7a2C.js index 5289c41c26..0b898454e7 100644 --- a/assets/orderer.stories-X3e5f_od.js +++ b/assets/orderer.stories-pD1b7a2C.js @@ -1,4 +1,4 @@ -import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{R as n}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const g={content:`**Without using a calculator, put the numbers in order from least to greatest.** +import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{R as n}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const g={content:`**Without using a calculator, put the numbers in order from least to greatest.** [[☃ orderer 1]]`,images:{},widgets:{"orderer 1":{version:{major:0,minor:0},type:"orderer",graded:!0,options:{otherOptions:[],layout:"horizontal",options:[{content:"$10.9$",images:{},widgets:{}},{content:"$11$",images:{},widgets:{}},{content:"$\\sqrt{120}$",images:{},widgets:{}}],correctOptions:[{content:"$10.9$",images:{},widgets:{}},{content:"$\\sqrt{120}$",images:{},widgets:{}},{content:"$11$",images:{},widgets:{}}],height:"normal"}}}},c={content:`**Put $6$ flowers in the box.** diff --git a/assets/passage-ref.stories-SR_UfM-e.js b/assets/passage-ref.stories-4D87gHwq.js similarity index 88% rename from assets/passage-ref.stories-SR_UfM-e.js rename to assets/passage-ref.stories-4D87gHwq.js index 68bb085c6c..5652b0e233 100644 --- a/assets/passage-ref.stories-SR_UfM-e.js +++ b/assets/passage-ref.stories-4D87gHwq.js @@ -1,4 +1,4 @@ -import{j as o}from"./jsx-runtime-FVsy8kgq.js";import{V as d}from"./index-6h5t6F0w.js";import{R as l}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const u={content:`[[☃ passage 1]] +import{j as o}from"./jsx-runtime-FVsy8kgq.js";import{V as d}from"./index-6h5t6F0w.js";import{R as l}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const u={content:`[[☃ passage 1]] We can see the word “promotes” is used in [[☃ passage-ref 1]] diff --git a/assets/passage.stories-md5VTRVQ.js b/assets/passage.stories-eTFrj0vn.js similarity index 91% rename from assets/passage.stories-md5VTRVQ.js rename to assets/passage.stories-eTFrj0vn.js index 91eb5c3338..d8774ec24e 100644 --- a/assets/passage.stories-md5VTRVQ.js +++ b/assets/passage.stories-eTFrj0vn.js @@ -1,4 +1,4 @@ -import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{V as g}from"./index-6h5t6F0w.js";import{R as f}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const y={content:`[[☃ passage 1]] +import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{V as g}from"./index-6h5t6F0w.js";import{R as f}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const y={content:`[[☃ passage 1]] `,images:{},widgets:{"passage 1":{alignment:"default",graded:!0,options:{footnotes:"",passageText:`Sociologists study folktales because they provide a means of understanding the distinctive values of a culture. However, the folktales in almost all cultures are adaptations of the same ancient narratives to the local milieu. `,passageTitle:"",showLineNumbers:!1,static:!1},static:!1,type:"passage",version:{major:0,minor:0}}}},v={content:`>Select text to highlight it. *(Laptop/desktop only)* diff --git a/assets/perseus-api-mOiZT07d.js b/assets/perseus-api-mOiZT07d.js index 4aaa7e411f..756daeb389 100644 --- a/assets/perseus-api-mOiZT07d.js +++ b/assets/perseus-api-mOiZT07d.js @@ -1 +1 @@ -import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{P as e}from"./index-k-0mNqHS.js";import{S as o}from"./stub-tag-editor-Hmby24Jq.js";const t={propTypes:e.shape({isArticle:e.bool.isRequired,onFocusChange:e.func.isRequired,GroupMetadataEditor:e.func.isRequired,showAlignmentOptions:e.bool.isRequired,readOnly:e.bool.isRequired,answerableCallback:e.func,getAnotherHint:e.func,interactionCallback:e.func,groupAnnotator:e.func.isRequired,imagePlaceholder:e.node,widgetPlaceholder:e.node,baseElements:e.shape({Link:e.func}),imagePreloader:e.func,trackInteraction:e.func,customKeypad:e.bool,nativeKeypadProxy:e.func,isMobile:e.bool,setDrawingAreaAvailable:e.func,hintProgressColor:e.string,canScrollPage:e.bool,crossOutEnabled:e.bool,editorChangeDelay:e.number}).isRequired,defaults:{isArticle:!1,isMobile:!1,onFocusChange:function(){},GroupMetadataEditor:o,showAlignmentOptions:!1,readOnly:!1,groupAnnotator:function(){return null},baseElements:{Link:r=>s("a",{...r})},setDrawingAreaAvailable:function(){},canScrollPage:!1,crossOutEnabled:!1,editorChangeDelay:0}},l={RENDERER:"perseus-renderer",TWO_COLUMN_RENDERER:"perseus-renderer-two-columns",RESPONSIVE_RENDERER:"perseus-renderer-responsive",INPUT:"perseus-input",FOCUSED:"perseus-focused",RADIO:{OPTION:"perseus-radio-option",SELECTED:"perseus-radio-selected",OPTION_CONTENT:"perseus-radio-option-content"},INTERACTIVE:"perseus-interactive",CORRECT:"perseus-correct",INCORRECT:"perseus-incorrect",UNANSWERED:"perseus-unanswered",MOBILE:"perseus-mobile"};export{t as A,l as C}; +import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{P as e}from"./index-0C4KXdeC.js";import{S as o}from"./stub-tag-editor-Hmby24Jq.js";const t={propTypes:e.shape({isArticle:e.bool.isRequired,onFocusChange:e.func.isRequired,GroupMetadataEditor:e.func.isRequired,showAlignmentOptions:e.bool.isRequired,readOnly:e.bool.isRequired,answerableCallback:e.func,getAnotherHint:e.func,interactionCallback:e.func,groupAnnotator:e.func.isRequired,imagePlaceholder:e.node,widgetPlaceholder:e.node,baseElements:e.shape({Link:e.func}),imagePreloader:e.func,trackInteraction:e.func,customKeypad:e.bool,nativeKeypadProxy:e.func,isMobile:e.bool,setDrawingAreaAvailable:e.func,hintProgressColor:e.string,canScrollPage:e.bool,crossOutEnabled:e.bool,editorChangeDelay:e.number}).isRequired,defaults:{isArticle:!1,isMobile:!1,onFocusChange:function(){},GroupMetadataEditor:o,showAlignmentOptions:!1,readOnly:!1,groupAnnotator:function(){return null},baseElements:{Link:r=>s("a",{...r})},setDrawingAreaAvailable:function(){},canScrollPage:!1,crossOutEnabled:!1,editorChangeDelay:0}},l={RENDERER:"perseus-renderer",TWO_COLUMN_RENDERER:"perseus-renderer-two-columns",RESPONSIVE_RENDERER:"perseus-renderer-responsive",INPUT:"perseus-input",FOCUSED:"perseus-focused",RADIO:{OPTION:"perseus-radio-option",SELECTED:"perseus-radio-selected",OPTION_CONTENT:"perseus-radio-option-content"},INTERACTIVE:"perseus-interactive",CORRECT:"perseus-correct",INCORRECT:"perseus-incorrect",UNANSWERED:"perseus-unanswered",MOBILE:"perseus-mobile"};export{t as A,l as C}; diff --git a/assets/phet-simulation-4u5-UljK.js b/assets/phet-simulation-4u5-UljK.js new file mode 100644 index 0000000000..4685fe53c1 --- /dev/null +++ b/assets/phet-simulation-4u5-UljK.js @@ -0,0 +1 @@ +import{a as St,j as Q}from"./jsx-runtime-FVsy8kgq.js";import{r as i}from"./index-TT1qJ6UJ.js";import{l as S}from"./index-awljIyHI.js";import{m as Je,c as Ye,u as Ze,a as wt,T as Qe,I as xt,x as kt}from"./index-rfN0X25E.js";import{a as b,_ as l,V as W,b as Fe}from"./index-6h5t6F0w.js";import{c as Z,L as he,w as Ct}from"./react-router-dom-W_e8xVUu.js";import{i as et,g as tt}from"./index-o3wWn3Y5.js";import{C as It}from"./index-ngddCaVG.js";import{c as d,b as R,s as C,a as ke,m as ve,f as We}from"./index-deFLJwr4.js";import{P as Ce}from"./index-xuPsLuPk.js";import{e as $t,_ as Te}from"./arrow-square-out-bold-090vdhrx.js";import{b as Et}from"./index-h_CiYGGb.js";import{P as Rt}from"./i18n-context-hxuRe8oU.js";import{g as _t}from"./dependencies-8XILypbq.js";import{s as Nt}from"./constants-I_nlPaPx.js";function rt(o){const e=[];if(o)if(Array.isArray(o))for(const t of o)e.push(...rt(t));else e.push(o);else return e;return e}function nt(o){const e=[],t=[];if(!o)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;rt(o).forEach(a=>{const s=a._definition;if(s!=null)if(n){const c={};for(const[f,u]of Object.entries(s))c[f.replace(/-[a-z]/g,m=>m[1].toUpperCase())]=u;t.push(c)}else e.push(a);else t.push(a)});const r=Object.assign({},...t);if(t.length>0&&!n){const a=S.StyleSheet.create({inlineStyles:r});e.push(a.inlineStyles)}return{style:n?r:{},className:S.css(...e)}}const Ft=["children","style","tag","testId"],Bt=/^h[1-6]$/,He=S.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}}),F=i.forwardRef(function(e,t){let{children:n,style:r,tag:a="span",testId:s}=e,c=b(e,Ft);const f=Bt.test(a),u=nt([He.text,f&&He.header,r]),m=c.className?[c.className,u.className].join(" "):u.className;return i.createElement(a,l({},c,{style:u.style,className:m,"data-testid":s,ref:t}),n)}),Lt=["className","style"];function M(o,e){return i.forwardRef((t,n)=>{const{className:r,style:a}=t,s=b(t,Lt),c=typeof o=="string"?Pt[o]:null,{className:f,style:u}=nt([c,e,a]);return i.createElement(o,l({},s,{ref:n,className:[f,r].filter(Boolean).join(" "),style:u}))})}const Pt=S.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),Dt=["testId","tag"],ne=S.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=M("div",ne.default),Wt=M("article",ne.default),Tt=M("aside",ne.default),Ht=M("nav",ne.default),Ut=M("section",ne.default),Ue=i.forwardRef(function(e,t){const{testId:n,tag:r="div"}=e,a=b(e,Dt),s=l({},a,{"data-testid":n});switch(r){case"article":return i.createElement(Wt,l({},s,{ref:t}));case"aside":return i.createElement(Tt,l({},s,{ref:t}));case"nav":return i.createElement(Ht,l({},s,{ref:t}));case"section":return i.createElement(Ut,l({},s,{ref:t}));case"div":return i.createElement(zt,l({},s,{ref:t}));default:throw Error(`${r} is not an allowed value for the 'tag' prop`)}});let V=function(o){return o.Root="root",o.Initial="initial",o.Standard="standard",o}({});const ce=i.createContext(V.Root);ce.displayName="RenderStateContext";let At=class extends i.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,fallback:n}=this.props;return this._isTheRootComponent=!0,e?i.createElement(ce.Provider,{value:V.Standard},t()):n?i.createElement(ce.Provider,{value:V.Initial},n()):null}_maybeRender(e){const{children:t,fallback:n}=this.props;switch(e){case V.Root:return this._renderAsRootComponent();case V.Initial:return n?n():null;case V.Standard:return t()}{var r;return console.log(`We got a render state we don't understand: "${(r=JSON.stringify(e))!=null?r:""}"`),this._maybeRender(V.Root)}}render(){return i.createElement(ce.Consumer,null,e=>this._maybeRender(e))}},ot=class it{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const r=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${r}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${it._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}};ot._factoryUniquenessCounter=0;let Ie=class{get(e){return e}};Ie.Default=new Ie;var Ot=Ie.Default;let Mt=class extends i.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(Ot):null:(this._idFactory||(this._idFactory=new ot(r)),t(this._idFactory))}render(){return i.createElement(At,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}},Kt=class at extends i.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(at.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():i.createElement(Mt,{scope:t,mockOnFirstRender:!0},n=>this.renderChildren(n))}};Kt.defaultId="wb-id";const A=400,ee=700,jt=900,Se="@media (max-width: 1023px)",we="@media (min-width: 1024px)",N={display:"block"},z='Lato, "Noto Sans", sans-serif',Ae='"Noto Serif", serif',qt="Inconsolata, monospace",B=S.StyleSheet.create({Title:l({},N,{fontFamily:z,fontWeight:jt,[we]:{fontSize:36,lineHeight:"40px"},[Se]:{fontSize:28,lineHeight:"32px"}}),Tagline:l({},N,{fontFamily:z,fontWeight:A,fontSize:20,lineHeight:"24px"}),HeadingLarge:l({},N,{fontFamily:z,fontWeight:ee,[we]:{fontSize:28,lineHeight:"32px"},[Se]:{fontSize:24,lineHeight:"28px"}}),HeadingMedium:l({},N,{fontFamily:z,fontWeight:ee,[we]:{fontSize:24,lineHeight:"28px"},[Se]:{fontSize:22,lineHeight:"26px"}}),HeadingSmall:l({},N,{fontFamily:z,fontWeight:ee,fontSize:20,lineHeight:"24px"}),HeadingXSmall:l({},N,{fontFamily:z,fontWeight:ee,fontSize:12,lineHeight:"16px",letterSpacing:.6,textTransform:"uppercase"}),BodySerifBlock:l({},N,{fontFamily:Ae,fontWeight:A,fontSize:22,lineHeight:"28px"}),BodySerif:l({},N,{fontFamily:Ae,fontWeight:A,fontSize:18,lineHeight:"22px"}),BodyMonospace:l({},N,{fontFamily:qt,fontWeight:A,fontSize:17,lineHeight:"22px"}),Body:l({},N,{fontFamily:z,fontWeight:A,fontSize:16,lineHeight:"22px"}),LabelLarge:l({},N,{fontFamily:z,fontWeight:ee,fontSize:16,lineHeight:"20px"}),LabelMedium:l({},N,{fontFamily:z,fontWeight:A,fontSize:16,lineHeight:"20px"}),LabelSmall:l({},N,{fontFamily:z,fontWeight:A,fontSize:14,lineHeight:"18px"}),LabelXSmall:l({},N,{fontFamily:z,fontWeight:A,fontSize:12,lineHeight:"16px"}),Caption:l({},N,{fontFamily:z,fontWeight:A,fontSize:14,lineHeight:"20px"}),Footnote:l({},N,{fontFamily:z,fontWeight:A,fontSize:12,lineHeight:"18px"})}),Vt=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="h1"}=e,s=b(e,Vt);return i.createElement(F,l({},s,{tag:a,style:[B.Title,n],ref:t}),r)});const Xt=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="h2"}=e,s=b(e,Xt);return i.createElement(F,l({},s,{tag:a,style:[B.HeadingLarge,n],ref:t}),r)});const Gt=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="h3"}=e,s=b(e,Gt);return i.createElement(F,l({},s,{tag:a,style:[B.HeadingMedium,n],ref:t}),r)});const Jt=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="h4"}=e,s=b(e,Jt);return i.createElement(F,l({},s,{tag:a,style:[B.HeadingSmall,n],ref:t}),r)});const Yt=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="h4"}=e,s=b(e,Yt);return i.createElement(F,l({},s,{tag:a,style:[B.HeadingXSmall,n],ref:t}),r)});const Zt=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="span"}=e,s=b(e,Zt);return i.createElement(F,l({},s,{tag:a,style:[B.BodySerifBlock,n],ref:t}),r)});const Qt=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="span"}=e,s=b(e,Qt);return i.createElement(F,l({},s,{tag:a,style:[B.BodySerif,n],ref:t}),r)});const er=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="span"}=e,s=b(e,er);return i.createElement(F,l({},s,{tag:a,style:[B.BodyMonospace,n],ref:t}),r)});const tr=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="span"}=e,s=b(e,tr);return i.createElement(F,l({},s,{tag:a,style:[B.Body,n],ref:t}),r)});const rr=["style","children","tag"],nr=i.forwardRef(function(e,t){let{style:n,children:r,tag:a="span"}=e,s=b(e,rr);return i.createElement(F,l({},s,{tag:a,style:[B.LabelLarge,n],ref:t}),r)}),or=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="span"}=e,s=b(e,or);return i.createElement(F,l({},s,{tag:a,style:[B.LabelMedium,n],ref:t}),r)});const ir=["style","children","tag"],ar=i.forwardRef(function(e,t){let{style:n,children:r,tag:a="span"}=e,s=b(e,ir);return i.createElement(F,l({},s,{tag:a,style:[B.LabelSmall,n],ref:t}),r)}),sr=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="span"}=e,s=b(e,sr);return i.createElement(F,l({},s,{tag:a,style:[B.LabelXSmall,n],ref:t}),r)});const lr=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="span"}=e,s=b(e,lr);return i.createElement(F,l({},s,{tag:a,style:[B.Tagline,n],ref:t}),r)});const cr=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="span"}=e,s=b(e,cr);return i.createElement(F,l({},s,{tag:a,style:[B.Caption,n],ref:t}),r)});const dr=["style","children","tag"];i.forwardRef(function(e,t){let{style:n,children:r,tag:a="span"}=e,s=b(e,dr);return i.createElement(F,l({},s,{tag:a,style:[B.Footnote,n],ref:t}),r)});const ur=o=>({small:16,medium:24,large:48,xlarge:96})[o],fr=["color","icon","size","style","testId","className"],hr=M("span"),$e=i.forwardRef(function(e,t){const{color:n="currentColor",icon:r,size:a="small",style:s,testId:c,className:f}=e,u=b(e,fr),m=ur(a),y=`${f??""}`,h=mr(n,m);return i.createElement(hr,l({},u,{className:y,style:[Ee.svg,h.icon,{maskImage:`url(${r})`},s],"data-testid":c,ref:t}))}),Oe={},mr=(o,e)=>{const t=`${o}-${e}`;if(Ee[t])return Ee[t];const n={icon:{backgroundColor:o,width:e,height:e}};return Oe[t]=S.StyleSheet.create(n),Oe[t]},Ee=S.StyleSheet.create({svg:{display:"inline-block",verticalAlign:"text-bottom",flexShrink:0,flexGrow:0,maskSize:"100%",maskRepeat:"no-repeat",maskPosition:"center"}});$e.displayName="PhosphorIcon";const me={color:{bg:{action:{default:d.blue,active:d.activeBlue,inverse:d.fadedBlue},critical:{default:d.red,active:d.activeRed,inverse:d.fadedRed},primary:{default:d.white,disabled:d.offBlack32,inverse:d.darkBlue},secondary:{default:"none",inverse:"none",focus:d.white,active:{action:d.fadedBlue,critical:d.fadedRed}},tertiary:{hover:d.white},icon:{secondaryHover:"transparent"}},text:{disabled:d.offBlack32,inverse:d.white,primary:{disabled:d.white64},secondary:{inverse:d.white50},icon:{secondaryHover:"inherit"}},border:{disabled:d.offBlack32,primary:{inverse:d.white},secondary:{action:d.offBlack50,critical:d.offBlack50,inverse:d.white50},tertiary:{inverse:d.white}}},border:{width:{secondary:R.width.hairline,focused:R.width.thin,disabled:R.width.thin},radius:{default:R.radius.medium_4,tertiary:R.radius.xSmall_2,small:R.radius.medium_4,large:R.radius.large_6,icon:R.radius.full}},size:{height:{tertiaryHover:C.xxxxSmall_2,small:C.xLarge_32,medium:40,large:56}},margin:{icon:{offset:-C.xxxxSmall_2}},padding:{xsmall:C.xxxxSmall_2,small:C.xxSmall_6,medium:C.small_12,large:C.medium_16,xLarge:C.xLarge_32},font:{size:{large:18},lineHeight:{large:ke.lineHeight.medium},weight:{default:ke.weight.bold}}},pr=Je(me,{color:{bg:{secondary:{default:d.offWhite,active:{action:d.fadedBlue8,critical:d.fadedRed8},focus:d.offWhite},icon:{secondaryHover:d.fadedBlue16}},border:{secondary:{action:d.fadedBlue,critical:d.fadedRed}},text:{icon:{secondaryHover:d.blue}}},border:{radius:{default:R.radius.xLarge_12,small:R.radius.large_6,large:R.radius.xLarge_12},width:{focused:R.width.hairline}},margin:{icon:{offset:-C.xSmall_8}},font:{weight:{default:ke.weight.regular}}}),yr={default:me,khanmigo:pr},st=Ye(me);function gr(o){const e=i.useContext(Qe),t=yr[e]||me;return i.createElement(st.Provider,{value:t},o.children)}function Me({icon:o,size:e,style:t,testId:n}){const r={"aria-hidden":!0,color:"currentColor",style:t,testId:n};switch(e){case"small":return i.createElement($e,l({},r,{size:"small",icon:o}));case"medium":default:return i.createElement($e,l({},r,{size:"medium",icon:o}))}}const br=["children","skipClientNav","color","disabled","focused","hovered","href","kind","labelStyle","light","pressed","size","style","testId","type","spinner","startIcon","endIcon","id","waiting"],vr=M("a"),Sr=M("button"),wr=M(he),xr=i.forwardRef(function(e,t){const{theme:n,themeName:r}=Ze(st),a=wt(kr,n),s=c=>{const{children:f,skipClientNav:u,color:m,disabled:y,focused:h,hovered:w,href:v=void 0,kind:p="primary",labelStyle:x,light:E=!1,pressed:k,size:I="medium",style:L,testId:g,type:$=void 0,spinner:_,startIcon:P,endIcon:O,id:H}=e,q=b(e,br),T=Cr(m,p,E,I,n,r),U=_||y,ae=[a.shared,U&&a.disabled,P&&a.withStartIcon,O&&a.withEndIcon,T.default,U&&T.disabled,p!=="tertiary"&&!U&&(k?T.active:(w||h)&&T.focus),p==="tertiary"&&!k&&h&&[T.focus,U&&T.disabledFocus],I==="small"&&a.small,I==="large"&&a.large],ge=l({"data-testid":g,id:H,role:"button",style:[ae,L]},q),gt=I==="small"?ar:nr,bt=i.createElement(gt,{style:[a.text,I==="large"&&a.largeText,x,_&&a.hiddenText,p==="tertiary"&&a.textWithFocus,p==="tertiary"&&!U&&(k?[T.hover,T.active]:w&&T.hover)],testId:g?`${g}-inner-label`:void 0},f),vt={medium:"small",small:"xsmall",large:"medium"},ze=I==="small"?"small":"medium",be=i.createElement(i.Fragment,null,P&&i.createElement(Ue,{style:a.iconWrapper},i.createElement(Me,{size:ze,icon:P,style:[a.startIcon,p==="tertiary"&&a.tertiaryStartIcon],testId:g?`${g}-start-icon`:void 0})),bt,_&&i.createElement(It,{style:a.spinner,size:vt[I],light:p==="primary",testId:`${g||"button"}-spinner`}),O&&i.createElement(Ue,{testId:g?`${g}-end-icon-wrapper`:void 0,style:[re.endIcon,a.iconWrapper,a.endIconWrapper,p==="tertiary"&&a.endIconWrapperTertiary,(h||w)&&p!=="primary"&&a.iconWrapperSecondaryHovered]},i.createElement(Me,{size:ze,icon:O,testId:g?`${g}-end-icon`:void 0})));return v&&!U?c&&!u&&et(v)?i.createElement(wr,l({},ge,{to:v,ref:t}),be):i.createElement(vr,l({},ge,{href:v,ref:t}),be):i.createElement(Sr,l({type:$||"button"},ge,{"aria-disabled":U,ref:t}),be)};return i.createElement(Z.Consumer,null,c=>s(c))}),kr=o=>({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",height:o.size.height.medium,paddingTop:0,paddingBottom:0,paddingLeft:o.padding.large,paddingRight:o.padding.large,border:"none",borderRadius:o.border.radius.default,cursor:"pointer",outline:"none",textDecoration:"none",boxSizing:"border-box",touchAction:"manipulation",userSelect:"none",":focus":{WebkitTapHighlightColor:"rgba(0,0,0,0)"}},disabled:{cursor:"auto"},small:{borderRadius:o.border.radius.small,height:o.size.height.small},large:{borderRadius:o.border.radius.large,height:o.size.height.large},text:{alignItems:"center",fontWeight:o.font.weight.default,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",display:"inline-block",pointerEvents:"none"},largeText:{fontSize:o.font.size.large,lineHeight:`${o.font.lineHeight.large}px`},textWithFocus:{position:"relative"},hiddenText:{visibility:"hidden"},spinner:{position:"absolute"},startIcon:{marginRight:o.padding.small,marginLeft:o.margin.icon.offset},tertiaryStartIcon:{marginLeft:0},endIcon:{marginLeft:o.padding.small},iconWrapper:{borderRadius:o.border.radius.icon,padding:o.padding.xsmall,minWidth:"auto"},iconWrapperSecondaryHovered:{backgroundColor:o.color.bg.icon.secondaryHover,color:o.color.text.icon.secondaryHover},endIconWrapper:{marginLeft:o.padding.small,marginRight:o.margin.icon.offset},endIconWrapperTertiary:{marginRight:0}}),re={},Cr=(o="default",e,t,n,r,a)=>{const s=o==="destructive"?r.color.bg.critical.default:r.color.bg.action.default,c=`${s}-${e}-${t}-${n}-${a}`;if(re[c])return re[c];const f=o==="destructive"?r.color.bg.critical.inverse:r.color.bg.action.inverse,u=o==="destructive"?r.color.bg.critical.active:r.color.bg.action.active,m=n==="large"?r.padding.xLarge:r.padding.large;let y={};if(e==="primary"){const h=t?r.color.bg.primary.inverse:r.color.bg.primary.default;y={default:{background:t?r.color.bg.primary.default:s,color:t?s:r.color.text.inverse,paddingLeft:m,paddingRight:m},focus:{boxShadow:`0 0 0 1px ${h}, 0 0 0 3px ${t?r.color.bg.primary.default:s}`},active:{boxShadow:`0 0 0 1px ${h}, 0 0 0 3px ${t?f:u}`,background:t?f:u,color:t?u:f},disabled:{background:t?f:r.color.bg.primary.disabled,color:t?s:r.color.text.primary.disabled,cursor:"default",":focus":{boxShadow:`0 0 0 1px ${t?r.color.bg.primary.disabled:r.color.bg.primary.default}, 0 0 0 3px ${t?f:r.color.bg.primary.disabled}`}}}}else if(e==="secondary"){const h=o==="destructive"?r.color.border.secondary.critical:r.color.border.secondary.action,w=o==="destructive"?r.color.bg.secondary.active.critical:r.color.bg.secondary.active.action;y={default:{background:t?r.color.bg.secondary.inverse:r.color.bg.secondary.default,color:t?r.color.text.inverse:s,borderColor:t?r.color.border.secondary.inverse:h,borderStyle:"solid",borderWidth:r.border.width.secondary,paddingLeft:m,paddingRight:m},focus:{background:t?r.color.bg.secondary.inverse:r.color.bg.secondary.focus,borderColor:"transparent",outlineColor:t?r.color.border.primary.inverse:s,outlineStyle:"solid",outlineWidth:r.border.width.focused},active:{background:t?u:w,color:t?f:u,borderColor:"transparent",outlineColor:t?f:u,outlineStyle:"solid",outlineWidth:r.border.width.focused},disabled:{color:t?r.color.text.secondary.inverse:r.color.text.disabled,outlineColor:t?f:r.color.border.disabled,cursor:"default",":focus":{outlineColor:t?r.color.border.secondary.inverse:r.color.border.disabled,outlineStyle:"solid",outlineWidth:r.border.width.disabled}}}}else if(e==="tertiary")y={default:{background:"none",color:t?r.color.text.inverse:s,paddingLeft:0,paddingRight:0},hover:{":after":{content:"''",position:"absolute",height:r.size.height.tertiaryHover,width:"100%",right:0,bottom:0,background:t?r.color.bg.tertiary.hover:s,borderRadius:r.border.radius.tertiary}},focus:{outlineStyle:"solid",outlineColor:t?r.color.border.tertiary.inverse:s,outlineWidth:r.border.width.focused,borderRadius:r.border.radius.default},active:{color:t?f:u,":after":{height:r.size.height.tertiaryHover,background:t?f:u}},disabled:{color:t?f:r.color.text.disabled,cursor:"default"},disabledFocus:{outlineColor:t?r.color.border.tertiary.inverse:r.color.border.disabled}};else throw new Error("Button kind not recognized");return re[c]=S.StyleSheet.create(y),re[c]},Ir=["href","type","children","skipClientNav","onClick","beforeNav","safeWithNav","tabIndex","target","rel","color","kind","light","size","disabled","spinner"],$r=i.forwardRef(function(e,t){const{href:n=void 0,type:r=void 0,children:a,skipClientNav:s,onClick:c,beforeNav:f=void 0,safeWithNav:u=void 0,tabIndex:m,target:y,rel:h,color:w="default",kind:v="primary",light:p=!1,size:x="medium",disabled:E=!1,spinner:k=!1}=e,I=b(e,Ir),L=g=>{const $=tt(n,s,g),_=(P,O)=>i.createElement(xr,l({},I,P,O,{disabled:E,spinner:k||P.waiting,color:w,kind:v,light:p,size:x,skipClientNav:s,href:n,target:y,type:r,tabIndex:m,ref:t}),a);return f?i.createElement($,{disabled:k||E,href:n,role:"button",type:r,onClick:c,beforeNav:f,safeWithNav:u,rel:h},_):i.createElement($,{disabled:k||E,href:n,role:"button",type:r,onClick:c,safeWithNav:u,target:y,rel:h},_)};return i.createElement(gr,null,i.createElement(Z.Consumer,null,g=>L(g)))});function lt(o){const e=[];if(o)if(Array.isArray(o))for(const t of o)e.push(...lt(t));else e.push(o);else return e;return e}function ct(o){const e=[],t=[];if(!o)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;lt(o).forEach(a=>{const s=a._definition;if(s!=null)if(n){const c={};for(const[f,u]of Object.entries(s))c[f.replace(/-[a-z]/g,m=>m[1].toUpperCase())]=u;t.push(c)}else e.push(a);else t.push(a)});const r=Object.assign({},...t);if(t.length>0&&!n){const a=S.StyleSheet.create({inlineStyles:r});e.push(a.inlineStyles)}return{style:n?r:{},className:S.css(...e)}}const Er=["children","style","tag","testId"],Rr=/^h[1-6]$/,Ke=S.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}});i.forwardRef(function(e,t){let{children:n,style:r,tag:a="span",testId:s}=e,c=b(e,Er);const f=Rr.test(a),u=ct([Ke.text,f&&Ke.header,r]),m=c.className?[c.className,u.className].join(" "):u.className;return i.createElement(a,l({},c,{style:u.style,className:m,"data-testid":s,ref:t}),n)});const _r=["className","style"];function K(o,e){return i.forwardRef((t,n)=>{const{className:r,style:a}=t,s=b(t,_r),c=typeof o=="string"?Nr[o]:null,{className:f,style:u}=ct([c,e,a]);return i.createElement(o,l({},s,{ref:n,className:[f,r].filter(Boolean).join(" "),style:u}))})}const Nr=S.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),Fr=["testId","tag"],oe=S.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}}),Br=K("div",oe.default),Lr=K("article",oe.default),Pr=K("aside",oe.default),Dr=K("nav",oe.default),zr=K("section",oe.default);i.forwardRef(function(e,t){const{testId:n,tag:r="div"}=e,a=b(e,Fr),s=l({},a,{"data-testid":n});switch(r){case"article":return i.createElement(Lr,l({},s,{ref:t}));case"aside":return i.createElement(Pr,l({},s,{ref:t}));case"nav":return i.createElement(Dr,l({},s,{ref:t}));case"section":return i.createElement(zr,l({},s,{ref:t}));case"div":return i.createElement(Br,l({},s,{ref:t}));default:throw Error(`${r} is not an allowed value for the 'tag' prop`)}});let X=function(o){return o.Root="root",o.Initial="initial",o.Standard="standard",o}({});const de=i.createContext(X.Root);de.displayName="RenderStateContext";let Wr=class extends i.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,fallback:n}=this.props;return this._isTheRootComponent=!0,e?i.createElement(de.Provider,{value:X.Standard},t()):n?i.createElement(de.Provider,{value:X.Initial},n()):null}_maybeRender(e){const{children:t,fallback:n}=this.props;switch(e){case X.Root:return this._renderAsRootComponent();case X.Initial:return n?n():null;case X.Standard:return t()}{var r;return console.log(`We got a render state we don't understand: "${(r=JSON.stringify(e))!=null?r:""}"`),this._maybeRender(X.Root)}}render(){return i.createElement(de.Consumer,null,e=>this._maybeRender(e))}},dt=class ut{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const r=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${r}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${ut._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}};dt._factoryUniquenessCounter=0;let Re=class{get(e){return e}};Re.Default=new Re;var Tr=Re.Default;let Hr=class extends i.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(Tr):null:(this._idFactory||(this._idFactory=new dt(r)),t(this._idFactory))}render(){return i.createElement(Wr,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}},Ur=class ft extends i.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(ft.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():i.createElement(Hr,{scope:t,mockOnFirstRender:!0},n=>this.renderChildren(n))}};Ur.defaultId="wb-id";const Ar=o=>({small:16,medium:24,large:48,xlarge:96})[o],Or=["color","icon","size","style","testId","className"],Mr=K("span"),ht=i.forwardRef(function(e,t){const{color:n="currentColor",icon:r,size:a="small",style:s,testId:c,className:f}=e,u=b(e,Or),m=Ar(a),y=`${f??""}`,h=Kr(n,m);return i.createElement(Mr,l({},u,{className:y,style:[_e.svg,h.icon,{maskImage:`url(${r})`},s],"data-testid":c,ref:t}))}),je={},Kr=(o,e)=>{const t=`${o}-${e}`;if(_e[t])return _e[t];const n={icon:{backgroundColor:o,width:e,height:e}};return je[t]=S.StyleSheet.create(n),je[t]},_e=S.StyleSheet.create({svg:{display:"inline-block",verticalAlign:"text-bottom",flexShrink:0,flexGrow:0,maskSize:"100%",maskRepeat:"no-repeat",maskPosition:"center"}});ht.displayName="PhosphorIcon";const jr=["children","skipClientNav","focused","hovered","href","inline","kind","light","visitable","pressed","style","testId","waiting","target","startIcon","endIcon"],qr=K("a"),Vr=K(he),qe=i.forwardRef(function(e,t){const n=r=>{const{children:a,skipClientNav:s,focused:c,hovered:f,href:u,inline:m=!1,kind:y="primary",light:h=!1,visitable:w=!1,pressed:v,style:p,testId:x,target:E,startIcon:k,endIcon:I}=e,L=b(e,jr),g=Gr(m,y,h,w),$=m?g.restingInline:g.resting,_=[Xr.shared,$,v&&g.active,!v&&f&&g.hover,!v&&c&&g.focus],P=l({"data-testid":x,style:[_,p],target:E},L),H=new URL(u,window.location.origin).origin!==window.location.origin,q=i.createElement(ht,{icon:$t,size:"small",style:[J.endIcon,J.centered],testId:"external-icon"});let T,U;k&&(T=i.cloneElement(k,l({style:[J.startIcon,J.centered],testId:"start-icon","aria-hidden":"true"},k.props))),I&&(U=i.cloneElement(I,l({style:[J.endIcon,J.centered],testId:"end-icon","aria-hidden":"true"},I.props)));const ae=i.createElement(i.Fragment,null,k&&T,a,I?U:H&&E==="_blank"&&q);return r&&!s&&et(u)?i.createElement(Vr,l({},P,{to:u,ref:t}),ae):i.createElement(qr,l({},P,{href:u,ref:t}),ae)};return i.createElement(Z.Consumer,null,r=>n(r))}),se={},J=S.StyleSheet.create({startIcon:{marginInlineEnd:C.xxxSmall_4},endIcon:{marginInlineStart:C.xxxSmall_4},centered:{verticalAlign:"-10%"}}),Xr=S.StyleSheet.create({shared:{cursor:"pointer",textDecoration:"none",outline:"none",alignItems:"center"}}),Gr=(o,e,t,n)=>{const r=`${e}-${o.toString()}-${t.toString()}-${n.toString()}`;if(se[r])return se[r];if(e==="secondary"&&t)throw new Error("Secondary Light links are not supported");if(n&&e!=="primary")throw new Error("Only primary link is visitable");const{blue:a,purple:s,white:c,offBlack:f,offBlack32:u,offBlack64:m}=d,y="#fa50ae",h=ve(We(f,.08),s),w=d.fadedBlue,v=ve(We(c,.32),y),p=d.activeBlue,k=e==="primary"?t?c:a:o?f:m,g=e==="primary"?t?w:p:o?p:f,$=n?{":visited":{color:t?y:h}}:Object.freeze({}),_=n?{":visited":{color:t?v:ve(u,h)}}:Object.freeze({}),P={resting:l({color:k},$),restingInline:l({color:k,textDecoration:"underline currentcolor solid",textUnderlineOffset:2},$),hover:l({textDecoration:"underline currentcolor solid",color:k},$),focus:{":focus-visible":l({color:k,outline:`1px solid ${t?c:a}`,borderRadius:3},$)},active:l({color:g,textDecoration:"underline currentcolor solid"},_)};return se[r]=S.StyleSheet.create(P),se[r]},Jr=["onClick","beforeNav","safeWithNav","href","skipClientNav","children","tabIndex","onKeyDown","onKeyUp","target","inline","kind","light","visitable"],Yr=i.forwardRef(function(e,t){const{onClick:n,beforeNav:r=void 0,safeWithNav:a,href:s,skipClientNav:c,children:f,tabIndex:u,onKeyDown:m,onKeyUp:y,target:h=void 0,inline:w=!1,kind:v="primary",light:p=!1,visitable:x=!1}=e,E=b(e,Jr),k=I=>{const L=tt(s,c,I);return r?i.createElement(L,{disabled:!1,href:s,role:"link",onClick:n,beforeNav:r,safeWithNav:a,onKeyDown:m,onKeyUp:y},(g,$)=>{let _=l({},(Te($),$));return i.createElement(qe,l({},E,g,_,{skipClientNav:c,href:s,target:h,tabIndex:u,inline:w,kind:v,light:p,visitable:x,ref:t}),f)}):i.createElement(L,{disabled:!1,href:s,role:"link",onClick:n,safeWithNav:a,target:h,onKeyDown:m,onKeyUp:y},(g,$)=>{let _=l({},(Te($),$));return i.createElement(qe,l({},E,g,_,{skipClientNav:c,href:s,target:h,tabIndex:u,inline:w,kind:v,light:p,visitable:x,ref:t}),f)})};return i.createElement(Z.Consumer,null,I=>k(I))}),Zr=""+new URL("info-vUJD1n-8.svg",import.meta.url).href,Qr=""+new URL("smiley-xdY6f5H9.svg",import.meta.url).href,en=""+new URL("warning-ctw6EWuu.svg",import.meta.url).href,tn=""+new URL("warning-circle-OrBK1ju8.svg",import.meta.url).href,rn=o=>{switch(o){case"success":return{color:d.green,icon:Qr,role:"status"};case"warning":return{color:d.gold,icon:en,role:"alert",ariaLive:"polite"};case"critical":return{color:d.red,icon:tn,role:"alert"};default:return{color:d.blue,icon:Zr,role:"status"}}},nn=o=>{const{actions:e,"aria-label":t,dismissAriaLabel:n="Dismiss banner.",onDismiss:r,kind:a="info",layout:s,text:c,testId:f,icon:u}=o,m=()=>e==null?void 0:e.filter(Boolean).map((h,w)=>{if(h.type==="custom")return i.createElement(W,{style:D.action,key:`custom-action-${w}`},h.node);const v=h.onClick;if(h.type==="link"){var p;return i.createElement(W,{style:D.action,key:h.title},i.createElement(Yr,{kind:"primary",href:h.href,onClick:v,"aria-label":(p=h.ariaLabel)!=null?p:h.title,style:D.link},h.title))}else{var x;return i.createElement(W,{style:D.action,key:h.title},i.createElement($r,{kind:"tertiary",size:"small","aria-label":(x=h.ariaLabel)!=null?x:h.title,onClick:v},h.title))}}),y=rn(a);return i.createElement(W,{style:[D.containerOuter,s==="floating"&&D.floatingBorder,{borderInlineStartColor:y.color}],role:y.role,"aria-label":t,"aria-live":y.ariaLive,testId:f},i.createElement(W,{style:[D.backgroundColor,{backgroundColor:y.color}]}),i.createElement(W,{style:D.containerInner},i.createElement(Ce,{icon:u||y.icon,size:"medium",style:D.icon,"aria-label":a,testId:"banner-kind-icon",role:"img"}),i.createElement(W,{style:D.labelAndButtonsContainer},i.createElement(W,{style:D.labelContainer},i.createElement(Et,null,c)),e&&i.createElement(W,{style:D.actionsContainer},m())),r?i.createElement(W,{style:D.dismissContainer},i.createElement(xt,{icon:kt,kind:"tertiary",onClick:r,style:D.dismiss,"aria-label":n})):null))},D=S.StyleSheet.create({backgroundColor:{position:"absolute",top:0,bottom:0,left:0,right:0,opacity:.08},containerOuter:{borderInlineStartWidth:C.xxSmall_6,width:"100%",backgroundColor:d.white},containerInner:{flexDirection:"row",padding:C.xSmall_8},icon:{marginTop:C.xSmall_8,marginBottom:C.xSmall_8,marginInlineStart:C.xxxxSmall_2,marginInlineEnd:C.xSmall_8,alignSelf:"flex-start",color:d.offBlack64},labelAndButtonsContainer:{flex:1,flexDirection:"row",alignItems:"center",alignContent:"center",flexWrap:"wrap",justifyContent:"space-between"},labelContainer:{flexShrink:1,margin:C.xSmall_8,textAlign:"start",overflowWrap:"break-word"},actionsContainer:{flexDirection:"row",justifyContent:"flex-start",marginTop:C.xSmall_8,marginBottom:C.xSmall_8,height:18,alignItems:"center"},action:{marginLeft:C.xSmall_8,marginRight:C.xSmall_8,justifyContent:"center"},link:{fontSize:14},dismiss:{flexShrink:1},dismissContainer:{height:40,width:40,justifyContent:"center",alignItems:"center",marginLeft:C.xSmall_8,marginRight:C.xSmall_8},floatingBorder:{borderRadius:4,overflow:"hidden"}}),on="6px",mo=1e3,po="#71B307",yo="#BED47A",go="#314453",bo="#4D6779",vo="#C42420",So="#4898FC",wo="#46A8BF",xo="#00294A",an="#CCCCCC";function mt(o){const e=[];if(o)if(Array.isArray(o))for(const t of o)e.push(...mt(t));else e.push(o);else return e;return e}function pt(o){const e=[],t=[];if(!o)return{style:{},className:""};const n=typeof global<"u"&&global.SNAPSHOT_INLINE_APHRODITE;mt(o).forEach(a=>{const s=a._definition;if(s!=null)if(n){const c={};for(const[f,u]of Object.entries(s))c[f.replace(/-[a-z]/g,m=>m[1].toUpperCase())]=u;t.push(c)}else e.push(a);else t.push(a)});const r=Object.assign({},...t);if(t.length>0&&!n){const a=S.StyleSheet.create({inlineStyles:r});e.push(a.inlineStyles)}return{style:n?r:{},className:S.css(...e)}}const sn=["children","style","tag","testId"],ln=/^h[1-6]$/,Ve=S.StyleSheet.create({text:{WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"},header:{marginTop:0,marginBottom:0}});i.forwardRef(function(e,t){let{children:n,style:r,tag:a="span",testId:s}=e,c=b(e,sn);const f=ln.test(a),u=pt([Ve.text,f&&Ve.header,r]),m=c.className?[c.className,u.className].join(" "):u.className;return i.createElement(a,l({},c,{style:u.style,className:m,"data-testid":s,ref:t}),n)});const cn=["className","style"];function j(o,e){return i.forwardRef((t,n)=>{const{className:r,style:a}=t,s=b(t,cn),c=typeof o=="string"?dn[o]:null,{className:f,style:u}=pt([c,e,a]);return i.createElement(o,l({},s,{ref:n,className:[f,r].filter(Boolean).join(" "),style:u}))})}const dn=S.StyleSheet.create({button:{margin:0,"::-moz-focus-inner":{border:0}}}),un=["testId","tag"],ie=S.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}}),fn=j("div",ie.default),hn=j("article",ie.default),mn=j("aside",ie.default),pn=j("nav",ie.default),yn=j("section",ie.default);i.forwardRef(function(e,t){const{testId:n,tag:r="div"}=e,a=b(e,un),s=l({},a,{"data-testid":n});switch(r){case"article":return i.createElement(hn,l({},s,{ref:t}));case"aside":return i.createElement(mn,l({},s,{ref:t}));case"nav":return i.createElement(pn,l({},s,{ref:t}));case"section":return i.createElement(yn,l({},s,{ref:t}));case"div":return i.createElement(fn,l({},s,{ref:t}));default:throw Error(`${r} is not an allowed value for the 'tag' prop`)}});let G=function(o){return o.Root="root",o.Initial="initial",o.Standard="standard",o}({});const ue=i.createContext(G.Root);ue.displayName="RenderStateContext";class gn extends i.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,fallback:n}=this.props;return this._isTheRootComponent=!0,e?i.createElement(ue.Provider,{value:G.Standard},t()):n?i.createElement(ue.Provider,{value:G.Initial},n()):null}_maybeRender(e){const{children:t,fallback:n}=this.props;switch(e){case G.Root:return this._renderAsRootComponent();case G.Initial:return n?n():null;case G.Standard:return t()}{var r;return console.log(`We got a render state we don't understand: "${(r=JSON.stringify(e))!=null?r:""}"`),this._maybeRender(G.Root)}}render(){return i.createElement(ue.Consumer,null,e=>this._maybeRender(e))}}class pe{constructor(e){this._uniqueFactoryName=void 0,this.get=n=>{const r=n.toLowerCase();if(!this._hasValidIdChars(n))throw new Error(`Invalid identifier key: ${n}`);return`${this._uniqueFactoryName}-${r}`},e=typeof e=="string"?e:"";const t=e.toLowerCase();if(!this._hasValidIdChars(t))throw new Error(`Invalid factory scope: ${e}`);this._uniqueFactoryName=`uid-${t}-${pe._factoryUniquenessCounter++}`}_hasValidIdChars(e){return typeof e=="string"?!/\s/.test(e):!1}}pe._factoryUniquenessCounter=0;class Ne{get(e){return e}}Ne.Default=new Ne;var bn=Ne.Default;class vn extends i.Component{constructor(...e){super(...e),this._idFactory=void 0}_performRender(e){const{children:t,mockOnFirstRender:n,scope:r}=this.props;return e?n?t(bn):null:(this._idFactory||(this._idFactory=new pe(r)),t(this._idFactory))}render(){return i.createElement(gn,{fallback:()=>this._performRender(!0)},()=>this._performRender(!1))}}class Be extends i.Component{renderChildren(e){const{id:t,children:n}=this.props,r=e?e.get(Be.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():i.createElement(vn,{scope:t,mockOnFirstRender:!0},n=>this.renderChildren(n))}}Be.defaultId="wb-id";const Xe=o=>{switch(o){case"link":return{triggerOnEnter:!0,triggerOnSpace:!1};case"checkbox":case"radio":case"listbox":return{triggerOnEnter:!1,triggerOnSpace:!0};case"button":case"menuitem":case"menu":case"option":default:return{triggerOnEnter:!0,triggerOnSpace:!0}}},Sn={onClick:()=>{},onMouseEnter:()=>{},onMouseLeave:()=>{},onMouseDown:()=>{},onMouseUp:()=>{},onTouchStart:()=>{},onTouchEnd:()=>{},onTouchCancel:()=>{},onKeyDown:()=>{},onKeyUp:()=>{}},Y={enter:13,space:32},Ge={hovered:!1,focused:!1,pressed:!1,waiting:!1};class Le extends i.Component{static getDerivedStateFromProps(e,t){return e.disabled?l({},Ge,{focused:t.focused}):null}constructor(e){super(e),this.waitingForClick=void 0,this.enterClick=void 0,this.handleClick=t=>{const{onClick:n=void 0,beforeNav:r=void 0,safeWithNav:a=void 0}=this.props;this.enterClick||((n||r||a)&&(this.waitingForClick=!1),this.runCallbackAndMaybeNavigate(t))},this.handleMouseEnter=t=>{this.waitingForClick||this.setState({hovered:!0})},this.handleMouseLeave=()=>{this.waitingForClick||this.setState({hovered:!1,pressed:!1,focused:!1})},this.handleMouseDown=t=>{this.props.onMouseDown&&this.props.onMouseDown(t),this.setState({pressed:!0})},this.handleMouseUp=t=>{this.props.onMouseUp&&this.props.onMouseUp(t),this.setState({pressed:!1,focused:!1})},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=t=>{const{onKeyDown:n,role:r}=this.props;n&&n(t);const a=t.which||t.keyCode,{triggerOnEnter:s,triggerOnSpace:c}=Xe(r);s&&a===Y.enter||c&&a===Y.space?(t.preventDefault(),this.setState({pressed:!0})):!s&&a===Y.enter&&(this.enterClick=!0)},this.handleKeyUp=t=>{const{onKeyUp:n,role:r}=this.props;n&&n(t);const a=t.which||t.keyCode,{triggerOnEnter:s,triggerOnSpace:c}=Xe(r);s&&a===Y.enter||c&&a===Y.space?(this.setState({pressed:!1,focused:!0}),this.runCallbackAndMaybeNavigate(t)):!s&&a===Y.enter&&(this.enterClick=!1)},this.handleFocus=t=>{const{onFocus:n}=this.props;this.setState({focused:!0},()=>{n&&n(t)})},this.handleBlur=t=>{this.setState({focused:!1,pressed:!1})},this.state=Ge,this.waitingForClick=!1,this.enterClick=!1}navigateOrReset(e){if(e){const{history:t,href:n,skipClientNav:r,target:a=void 0}=this.props;n&&(a==="_blank"?(window.open(n,"_blank"),this.setState({waiting:!1})):t&&!r?(t.push(n),this.setState({waiting:!1})):window.location.assign(n))}else this.setState({waiting:!1})}handleSafeWithNav(e,t){const{skipClientNav:n,history:r}=this.props;return r&&!n||this.props.target==="_blank"?(e(),this.navigateOrReset(t),Promise.resolve()):(this.state.waiting||this.setState({waiting:!0}),e().then(()=>{this.state.waiting||this.setState({waiting:!0})}).catch(a=>{}).finally(()=>{this.navigateOrReset(t)}))}runCallbackAndMaybeNavigate(e){const{onClick:t=void 0,beforeNav:n=void 0,safeWithNav:r=void 0,href:a,type:s}=this.props;let c=!0,f=!0;if(t&&t(e),e.defaultPrevented&&(c=!1,f=!1),e.preventDefault(),!a&&s==="submit"&&f){let u=e.currentTarget;for(;u;){if(u instanceof window.HTMLFormElement){const m=new window.Event("submit",{bubbles:!0,cancelable:!0});u.dispatchEvent(m);break}u=u.parentElement}}if(n)this.setState({waiting:!0}),n().then(()=>r?this.handleSafeWithNav(r,c):this.navigateOrReset(c)).catch(()=>{});else{if(r)return this.handleSafeWithNav(r,c);this.navigateOrReset(c)}}render(){const e=this.props.rel||(this.props.target==="_blank"?"noopener noreferrer":void 0),t=this.props.disabled?l({},Sn,{onFocus:this.handleFocus,onBlur:this.handleBlur,tabIndex:this.props.tabIndex,rel:e}):{onClick:this.handleClick,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,onMouseDown:this.handleMouseDown,onMouseUp:this.handleMouseUp,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onTouchCancel:this.handleTouchCancel,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onFocus:this.handleFocus,onBlur:this.handleBlur,tabIndex:this.props.tabIndex,rel:e},{children:n}=this.props;return n&&n(this.state,t)}}Le.defaultProps={disabled:!1};const Pe=o=>typeof o!="string"?!1:!/^(https?:)?\/\//i.test(o)&&!/^([^#]*#[\w-]*|[\w\-.]+:)/.test(o),wn=Ct(Le);function xn(o,e,t){return t&&e!==!0&&o&&Pe(o)?wn:Le}const kn=["href","onClick","skipClientNav","beforeNav","safeWithNav","style","target","testId","onFocus","onKeyDown","onKeyUp","onMouseDown","onMouseUp","hideDefaultFocusRing","light","disabled","tabIndex"],Cn=j("a"),In=j("button"),$n=j(he),En=i.forwardRef(function(e,t){const n=(a,s,c)=>{const f=e.href&&!e.disabled,u=s&&!e.skipClientNav&&Pe(e.href||"");return f&&u&&e.href?i.createElement($n,l({},c,{to:e.href,role:e.role,target:e.target||void 0,"aria-disabled":e.disabled?"true":"false",ref:t}),e.children(a)):f&&!u?i.createElement(Cn,l({},c,{href:e.href,role:e.role,target:e.target||void 0,"aria-disabled":e.disabled?"true":"false",ref:t}),e.children(a)):i.createElement(In,l({},c,{type:"button","aria-disabled":e.disabled,ref:t}),e.children(a))},r=a=>{const{href:s,onClick:c,skipClientNav:f,beforeNav:u=void 0,safeWithNav:m=void 0,style:y,target:h=void 0,testId:w,onFocus:v,onKeyDown:p,onKeyUp:x,onMouseDown:E,onMouseUp:k,hideDefaultFocusRing:I,light:L,disabled:g,tabIndex:$}=e,_=b(e,kn),P=xn(s,f,a),O=H=>[te.reset,te.link,!I&&H.focused&&(L?te.focusedLight:te.focused),g&&te.disabled,y];return u?i.createElement(P,{href:s,onClick:c,beforeNav:u,safeWithNav:m,onFocus:v,onKeyDown:p,onKeyUp:x,onMouseDown:E,onMouseUp:k,disabled:g,tabIndex:$},(H,q)=>n(H,a,l({},_,{"data-testid":w,style:O(H)},q))):i.createElement(P,{href:s,onClick:c,safeWithNav:m,onFocus:v,onKeyDown:p,onKeyUp:x,onMouseDown:E,onMouseUp:k,target:h,disabled:g,tabIndex:$},(H,q)=>n(H,a,l({},_,{"data-testid":w,style:O(H)},q)))};return i.createElement(Z.Consumer,null,a=>r(a))});En.defaultProps={light:!1,disabled:!1};const te=S.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:{":focus":{outline:`solid 2px ${d.blue}`}},focusedLight:{outline:`solid 2px ${d.white}`},disabled:{color:d.offBlack32,cursor:"not-allowed",":focus":{outline:"none"},":focus-visible":{outline:`solid 2px ${d.blue}`}}}),Rn=o=>{switch(o){case"xsmall":return"small";case"small":return"medium";case"medium":return"medium";case"large":return"medium"}},_n=o=>({xsmall:24,small:32,medium:40,large:48})[o],ye={color:{bg:{hovered:"transparent",active:"transparent",disabled:"transparent",filled:{action:{hovered:"transparent",active:"transparent"},critical:{hovered:"transparent",active:"transparent"}}},stroke:{disabled:{default:d.offBlack32,inverse:d.white50},inverse:d.white,action:{default:d.blue,active:d.activeBlue,inverse:d.fadedBlue},critical:{default:d.red,active:d.activeRed,inverse:d.fadedRed},primary:{action:{hovered:d.blue,active:d.activeBlue},critical:{hovered:d.red,active:d.activeRed},inverse:{default:d.white,hovered:d.white}},secondary:{default:d.offBlack},tertiary:{default:d.offBlack64},filled:{action:{hovered:d.blue,active:d.activeBlue},critical:{hovered:d.red,active:d.activeRed}}}},border:{width:{default:R.width.thin,active:R.width.none,hovered:R.width.thin,hoveredInverse:R.width.thin},radius:{default:R.radius.medium_4}}},Nn=Je(ye,{color:{bg:{hovered:d.white,active:d.white64,filled:{action:{hovered:d.blue,active:d.activeBlue},critical:{hovered:d.red,active:d.activeRed}}},stroke:{action:{inverse:d.eggplant},critical:{inverse:d.eggplant},primary:{action:{hovered:d.eggplant,active:d.eggplant},critical:{hovered:d.eggplant,active:d.eggplant},inverse:{hovered:d.eggplant}},filled:{action:{hovered:d.white,active:d.white},critical:{hovered:d.white,active:d.white}}}},border:{width:{hovered:R.width.none,hoveredInverse:R.width.none}}}),Fn={default:ye,khanmigo:Nn},yt=Ye(ye);function Bn(o){var e;const t=i.useContext(Qe),n=(e=Fn[t])!=null?e:ye;return i.createElement(yt.Provider,{value:n},o.children)}const Ln=["color","disabled","href","icon","kind","light","size","skipClientNav","style","testId"];function Pn({icon:o,size:e}){switch(Rn(e)){case"small":return i.createElement(Ce,{size:"small",color:"currentColor",icon:o});case"medium":default:return i.createElement(Ce,{size:"medium",color:"currentColor",icon:o})}}const Dn=Fe("a"),zn=Fe("button"),Wn=Fe(he),Tn=i.forwardRef(function(e,t){const{color:n,disabled:r,href:a,icon:s,kind:c="primary",light:f=!1,size:u="medium",skipClientNav:m,style:y,testId:h}=e,w=b(e,Ln),{theme:v,themeName:p}=Ze(yt),x=E=>{const k=An(n,c,f,u,v,p),I=[Hn.shared,k.default,r&&k.disabled],L=i.createElement(Pn,{size:u,icon:s}),g=l({"data-testid":h,style:[I,y]},w);return a&&!r?E&&!m&&Pe(a)?i.createElement(Wn,l({},g,{to:a,ref:t}),L):i.createElement(Dn,l({},g,{href:a,ref:t}),L):i.createElement(zn,l({type:"button"},g,{onClick:r?void 0:w.onClick,"aria-disabled":r,ref:t}),L)};return i.createElement(Z.Consumer,null,E=>x(E))}),Hn=S.StyleSheet.create({shared:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",padding:0,cursor:"pointer",border:"none",outline:"none",textDecoration:"none",background:"none",margin:-8,touchAction:"manipulation"}}),le={};function Un(o,e,t,n,r){switch(o){case"primary":const a=r==="destructive"?e.color.stroke.primary.critical.hovered:e.color.stroke.primary.action.hovered;return{":hover":{backgroundColor:e.color.bg.hovered,color:n?e.color.stroke.primary.inverse.hovered:a,outlineColor:n?e.color.stroke.inverse:t,outlineOffset:1,outlineStyle:"solid",outlineWidth:n?e.border.width.hoveredInverse:e.border.width.hovered},":active":{backgroundColor:e.color.bg.active}};case"secondary":case"tertiary":return{":hover":{backgroundColor:r==="destructive"?e.color.bg.filled.critical.hovered:e.color.bg.filled.action.hovered,color:r==="destructive"?e.color.stroke.filled.critical.hovered:e.color.stroke.filled.action.hovered,outlineWidth:e.border.width.active},":active":{backgroundColor:r==="destructive"?e.color.bg.filled.critical.active:e.color.bg.filled.action.active,color:r==="destructive"?e.color.stroke.filled.critical.active:e.color.stroke.filled.action.active,outlineWidth:e.border.width.active}};default:return{":focus-visible":{},":hover":{},":active":{}}}}const An=(o="default",e,t,n,r,a)=>{const s=o==="destructive"?r.color.stroke.critical.default:r.color.stroke.action.default,c=`${s}-${e}-${t}-${n}-${a}`;if(le[c])return le[c];if(t&&e!=="primary")throw new Error("Light is only supported for primary IconButtons");const f=(()=>{switch(e){case"primary":return t?r.color.stroke.primary.inverse.default:s;case"secondary":return r.color.stroke.secondary.default;case"tertiary":return r.color.stroke.tertiary.default;default:throw new Error("IconButton kind not recognized")}})(),u=_n(n),m=Un(e,r,s,t,o),y=o==="destructive"?r.color.stroke.critical.inverse:r.color.stroke.action.inverse,h=o==="destructive"?r.color.stroke.critical.active:r.color.stroke.action.active,w=t?r.color.stroke.inverse:s,v=t?r.color.stroke.disabled.inverse:r.color.stroke.disabled.default,p={backgroundColor:r.color.bg.disabled,color:v,outlineColor:v},x={default:{height:u,width:u,color:f,borderRadius:r.border.radius.default,":hover":l({boxShadow:"none",color:w,borderRadius:r.border.radius.default,outlineWidth:r.border.width.default},m[":hover"]),"@media not (hover: hover)":{":hover":{boxShadow:"none",color:f,borderRadius:r.border.radius.default,outline:"none",backgroundColor:"transparent"}},":focus":{boxShadow:`0 0 0 ${r.border.width.default}px ${w}`,borderRadius:r.border.radius.default},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":l({boxShadow:"none",outlineWidth:r.border.width.default,outlineColor:w,outlineOffset:1,outlineStyle:"solid",borderRadius:r.border.radius.default},m[":focus-visible"]),":active":l({color:t?y:h,outlineWidth:r.border.width.default,outlineColor:t?y:h,outlineOffset:1,outlineStyle:"solid",borderRadius:r.border.radius.default},m[":active"])},disabled:{color:v,cursor:"not-allowed",":hover":l({},p,{outline:"none"}),":active":l({},p,{outline:"none"}),":focus":{boxShadow:`0 0 0 ${r.border.width.default}px ${v}`,borderRadius:r.border.radius.default},":focus:not(:focus-visible)":{boxShadow:"none"},":focus-visible":p}};return le[c]=S.StyleSheet.create(x),le[c]},On=["color","disabled","href","kind","light","size","skipClientNav","tabIndex","target"],Mn=i.forwardRef(function(e,t){const{color:n="default",disabled:r=!1,href:a,kind:s="primary",light:c=!1,size:f="medium",skipClientNav:u,tabIndex:m,target:y}=e,h=b(e,On);function w(p){const x=p.key;!a&&(x==="Enter"||x==="Space")&&p.preventDefault()}function v(p){const x=p.key;!a&&(x==="Enter"||x==="Space")&&h.onClick&&h.onClick(p)}return i.createElement(Bn,null,i.createElement(Tn,l({},h,{color:n,disabled:r,href:a,kind:s,light:c,ref:t,skipClientNav:u,size:f,target:y,tabIndex:m,onKeyDown:w,onKeyUp:v})))}),Kn=""+new URL("corners-out-ZcPb1LY6.svg",import.meta.url).href,De=class De extends i.Component{constructor(e){super(e),this.iframeRef=i.createRef(),this.state={url:null,banner:null},this.getPhetCompatibleLocale=t=>{switch(t){case"pt-pt":return"pt";case"zh-hans":return"zh_CN";case"zh-hant":return"zh_TW";case"fa-af":return"fa_DA";default:return t}},this.displayLoadFailure=()=>{this.setState({url:null,banner:{message:this.context.strings.simulationLoadFail,kind:"critical"}})},this.locale=this.getPhetCompatibleLocale(_t().kaLocale)}async componentDidMount(){await this.updateSimState(this.props.url)}async componentDidUpdate(e){e.url!==this.props.url&&await this.updateSimState(this.props.url)}getUserInput(){return null}async updateSimState(e){const t=jn(e,this.locale);if(t===null){this.displayLoadFailure();return}if(!(await fetch(t)).ok){this.displayLoadFailure();return}const r=await this.showLocaleWarning(t);this.setState({url:t,banner:r?{message:this.context.strings.simulationLocaleWarning,kind:"warning"}:null})}async showLocaleWarning(e){if(!e)return!1;const n=/https:\/\/phet\.colorado\.edu\/sims\/html\/([a-zA-Z0-9-]+)\/.*/g.exec(e.toString());if(n===null)return!1;const r=n[1],a=await fetch(`https://phet.colorado.edu/sims/html/${r}/latest/string-map.json`);if(!a.ok)return!1;let s;try{s=await a.json()}catch{return!1}const c=Object.keys(s),f=this.locale.split("_")[0];for(const u of c)if(f===u.split("_")[0])return!1;return!0}render(){var t;return St(W,{style:xe.widgetContainer,children:[this.state.banner!==null&&Q(W,{style:{marginBottom:Nt},children:Q(nn,{layout:"floating",kind:this.state.banner.kind,text:this.state.banner.message})}),Q(W,{style:xe.iframeContainer,children:Q("iframe",{ref:this.iframeRef,title:this.props.description,sandbox:"allow-same-origin allow-scripts",className:S.css(xe.iframeResponsive),src:(t=this.state.url)==null?void 0:t.toString(),allow:"fullscreen"})}),this.state.url!==null&&Q(Mn,{icon:Kn,onClick:()=>{var n;(n=this.iframeRef.current)==null||n.requestFullscreen()},kind:"secondary","aria-label":"Fullscreen",style:{marginTop:5,marginBottom:5,alignSelf:"flex-end"}})]})}};De.contextType=Rt;let fe=De;const jn=(o,e)=>{if(!URL.canParse(o))return null;const t=new URL(o);return t.origin!=="https://phet.colorado.edu"?null:(t.searchParams.set("locale",e),t)},xe=S.StyleSheet.create({widgetContainer:{borderRadius:on,borderWidth:1,borderColor:an,padding:C.medium_16,paddingBottom:0},iframeContainer:{position:"relative",overflow:"hidden",width:"100%",paddingTop:"56.25%"},iframeResponsive:{borderWidth:0,position:"absolute",top:0,left:0,bottom:0,right:0,width:"100%",height:"100%"}}),ko={name:"phet-simulation",displayName:"PhET Simulation",widget:fe,isLintable:!0};fe.__docgenInfo={description:"",methods:[{name:"getUserInput",docblock:null,modifiers:[],params:[],returns:{type:{name:"null"}}},{name:"getPhetCompatibleLocale",docblock:null,modifiers:[],params:[{name:"kaLocale",optional:!1,type:null}],returns:null},{name:"displayLoadFailure",docblock:null,modifiers:[],params:[],returns:null},{name:"updateSimState",docblock:null,modifiers:["async"],params:[{name:"urlString",optional:!1,type:{name:"string"}}],returns:null},{name:"showLocaleWarning",docblock:null,modifiers:["async"],params:[{name:"url",optional:!1,type:{name:"URL",alias:"URL"}}],returns:{type:{name:"Promise",elements:[{name:"boolean"}],raw:"Promise"}}}],displayName:"PhetSimulation"};export{nn as B,fe as P,vo as a,bo as b,po as c,yo as d,xo as e,ko as f,wo as h,go as k,So as l,jn as m,mo as z}; diff --git a/assets/phet-simulation-editor-h1woLwi3.js b/assets/phet-simulation-editor-8cXa9agX.js similarity index 77% rename from assets/phet-simulation-editor-h1woLwi3.js rename to assets/phet-simulation-editor-8cXa9agX.js index 66c6894006..fc7c376efb 100644 --- a/assets/phet-simulation-editor-h1woLwi3.js +++ b/assets/phet-simulation-editor-8cXa9agX.js @@ -1,4 +1,4 @@ -import{a as o,j as t}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import{m as p}from"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{l as s}from"./index-QCAhLhLD.js";import{s as n}from"./index-deFLJwr4.js";import{r as a}from"./index-TT1qJ6UJ.js";const r=class r extends a.Component{constructor(){super(...arguments),this.getSaveWarnings=()=>p(this.props.url,"en")===null?["Please enter a URL from the PhET domain."]:[]}serialize(){return{url:this.props.url,description:this.props.description}}render(){return o("div",{children:[t(s,{label:"URL",value:this.props.url,onChange:e=>this.props.onChange({url:e}),style:{marginBottom:n.large_24}}),t(s,{label:"Description",value:this.props.description,onChange:e=>this.props.onChange({description:e})})]})}};r.defaultProps={url:"",description:""},r.widgetName="phet-simulation";let i=r;i.__docgenInfo={description:"",methods:[{name:"serialize",docblock:null,modifiers:[],params:[],returns:{type:{name:"PerseusPhetSimulationWidgetOptions"}}},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PhetSimulationEditor",props:{url:{required:!1,tsType:{name:'PerseusPhetSimulationWidgetOptions["url"]',raw:'PerseusPhetSimulationWidgetOptions["url"]'},description:"",defaultValue:{value:'""',computed:!1}},description:{required:!1,tsType:{name:'PerseusPhetSimulationWidgetOptions["description"]',raw:'PerseusPhetSimulationWidgetOptions["description"]'},description:"",defaultValue:{value:'""',computed:!1}},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`(arg1: { +import{a as o,j as t}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import{m as p}from"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{l as s}from"./index-QCAhLhLD.js";import{s as n}from"./index-deFLJwr4.js";import{r as a}from"./index-TT1qJ6UJ.js";const r=class r extends a.Component{constructor(){super(...arguments),this.getSaveWarnings=()=>p(this.props.url,"en")===null?["Please enter a URL from the PhET domain."]:[]}serialize(){return{url:this.props.url,description:this.props.description}}render(){return o("div",{children:[t(s,{label:"URL",value:this.props.url,onChange:e=>this.props.onChange({url:e}),style:{marginBottom:n.large_24}}),t(s,{label:"Description",value:this.props.description,onChange:e=>this.props.onChange({description:e})})]})}};r.defaultProps={url:"",description:""},r.widgetName="phet-simulation";let i=r;i.__docgenInfo={description:"",methods:[{name:"serialize",docblock:null,modifiers:[],params:[],returns:{type:{name:"PerseusPhetSimulationWidgetOptions"}}},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PhetSimulationEditor",props:{url:{required:!1,tsType:{name:'PerseusPhetSimulationWidgetOptions["url"]',raw:'PerseusPhetSimulationWidgetOptions["url"]'},description:"",defaultValue:{value:'""',computed:!1}},description:{required:!1,tsType:{name:'PerseusPhetSimulationWidgetOptions["description"]',raw:'PerseusPhetSimulationWidgetOptions["description"]'},description:"",defaultValue:{value:'""',computed:!1}},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:`(arg1: { url?: Props["url"]; description?: Props["description"]; }) => void`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ diff --git a/assets/phet-simulation-editor.stories-HA2gTg8K.js b/assets/phet-simulation-editor.stories-82lEfkft.js similarity index 66% rename from assets/phet-simulation-editor.stories-HA2gTg8K.js rename to assets/phet-simulation-editor.stories-82lEfkft.js index b9446215f8..b1fbafd4c3 100644 --- a/assets/phet-simulation-editor.stories-HA2gTg8K.js +++ b/assets/phet-simulation-editor.stories-82lEfkft.js @@ -1,4 +1,4 @@ -import{a as m}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{P as p}from"./phet-simulation-editor-h1woLwi3.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./jsx-runtime-FVsy8kgq.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";const Xr={component:p,title:"PerseusEditor/Widgets/PhET Simulation Editor"},r={args:{onChange:m("onChange")}};var o,t,i;r.parameters={...r.parameters,docs:{...(o=r.parameters)==null?void 0:o.docs,source:{originalSource:`{ +import{a as m}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{P as p}from"./phet-simulation-editor-8cXa9agX.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./jsx-runtime-FVsy8kgq.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";const Xr={component:p,title:"PerseusEditor/Widgets/PhET Simulation Editor"},r={args:{onChange:m("onChange")}};var o,t,i;r.parameters={...r.parameters,docs:{...(o=r.parameters)==null?void 0:o.docs,source:{originalSource:`{ args: { onChange: action("onChange") } diff --git a/assets/phet-simulation.stories-mBHmgFdo.js b/assets/phet-simulation.stories-rQbjCa5x.js similarity index 94% rename from assets/phet-simulation.stories-mBHmgFdo.js rename to assets/phet-simulation.stories-rQbjCa5x.js index 3d6c7765f2..c38c97212c 100644 --- a/assets/phet-simulation.stories-mBHmgFdo.js +++ b/assets/phet-simulation.stories-rQbjCa5x.js @@ -1,4 +1,4 @@ -import{P as e}from"./phet-simulation-fZpYIOCA.js";import"./jsx-runtime-FVsy8kgq.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./index-rfN0X25E.js";import"./index-6h5t6F0w.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-ngddCaVG.js";import"./index-xuPsLuPk.js";import"./arrow-square-out-bold-090vdhrx.js";import"./index-h_CiYGGb.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./dependencies-8XILypbq.js";import"./constants-I_nlPaPx.js";const D={component:e,title:"Perseus/Widgets/PhET Simulation"},t={args:{url:"https://phet.colorado.edu/sims/html/projectile-data-lab/latest/projectile-data-lab_all.html",description:"Projectile Data Lab"}};var r,o,a;t.parameters={...t.parameters,docs:{...(r=t.parameters)==null?void 0:r.docs,source:{originalSource:`{ +import{P as e}from"./phet-simulation-4u5-UljK.js";import"./jsx-runtime-FVsy8kgq.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./index-rfN0X25E.js";import"./index-6h5t6F0w.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-ngddCaVG.js";import"./index-xuPsLuPk.js";import"./arrow-square-out-bold-090vdhrx.js";import"./index-h_CiYGGb.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./dependencies-8XILypbq.js";import"./constants-I_nlPaPx.js";const D={component:e,title:"Perseus/Widgets/PhET Simulation"},t={args:{url:"https://phet.colorado.edu/sims/html/projectile-data-lab/latest/projectile-data-lab_all.html",description:"Projectile Data Lab"}};var r,o,a;t.parameters={...t.parameters,docs:{...(r=t.parameters)==null?void 0:r.docs,source:{originalSource:`{ args: { url: "https://phet.colorado.edu/sims/html/projectile-data-lab/latest/projectile-data-lab_all.html", description: "Projectile Data Lab" diff --git a/assets/plotter.stories-dU2cwLGA.js b/assets/plotter.stories-3YRrs4Mk.js similarity index 77% rename from assets/plotter.stories-dU2cwLGA.js rename to assets/plotter.stories-3YRrs4Mk.js index 11a107c244..0b9ad25a27 100644 --- a/assets/plotter.stories-dU2cwLGA.js +++ b/assets/plotter.stories-3YRrs4Mk.js @@ -1,4 +1,4 @@ -import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{V as m}from"./index-6h5t6F0w.js";import{R as s}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const a={content:`The elementary school principal asked teachers to report the number of students absent in each grade during the past week. +import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{V as m}from"./index-6h5t6F0w.js";import{R as s}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./choice-E4eyMygy.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const a={content:`The elementary school principal asked teachers to report the number of students absent in each grade during the past week. **Create a bar graph to show how many students were absent in each grade.** diff --git a/assets/preview-XBooDLpI.js b/assets/preview-Bpfz4q6G.js similarity index 62% rename from assets/preview-XBooDLpI.js rename to assets/preview-Bpfz4q6G.js index 0ee1794519..46a581683e 100644 --- a/assets/preview-XBooDLpI.js +++ b/assets/preview-Bpfz4q6G.js @@ -1 +1 @@ -import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{c as i}from"./index-deFLJwr4.js";import{R as p}from"./index-6h5t6F0w.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import{D as m,s as e}from"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{s,a}from"./test-dependencies-UUeUFXqw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-h_CiYGGb.js";import"./index-dnMhQZ-1.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./icon-paths-AuJwhOz7.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./shared-3pf9YZIg.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./answer-choices-uB4giKvU.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-tmJoP6pY.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./strings-OAjNfY6D.js";import"./bundle.esm-7jAAHVxW.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";e(a);const Yo={decorators:[o=>r(p,{children:r(m.Provider,{value:s,children:r(o,{})})})],parameters:{options:{storySort:{order:["Perseus","PerseusEditor","Math-Input","*"],includeNames:!0}},actions:{argTypesRegex:"^on[A-Z].*"},controls:{matchers:{color:/(background|color)$/i,date:/Date$/}},backgrounds:{values:Object.entries(i).map(([o,t])=>({name:o,value:t}))}}};export{Yo as default}; +import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{c as i}from"./index-deFLJwr4.js";import{R as p}from"./index-6h5t6F0w.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import{D as m,s as e}from"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{s,a}from"./test-dependencies-OZugV_HD.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-awljIyHI.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-h_CiYGGb.js";import"./index-dnMhQZ-1.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./icon-paths-AuJwhOz7.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./shared-3pf9YZIg.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./answer-choices-xSqM961S.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-HXEAXx7K.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./strings-OAjNfY6D.js";import"./bundle.esm-7jAAHVxW.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";e(a);const Yo={decorators:[o=>r(p,{children:r(m.Provider,{value:s,children:r(o,{})})})],parameters:{options:{storySort:{order:["Perseus","PerseusEditor","Math-Input","*"],includeNames:!0}},actions:{argTypesRegex:"^on[A-Z].*"},controls:{matchers:{color:/(background|color)$/i,date:/Date$/}},backgrounds:{values:Object.entries(i).map(([o,t])=>({name:o,value:t}))}}};export{Yo as default}; diff --git a/assets/preview--4xedfSa.js b/assets/preview-f50LEd9Z.js similarity index 68% rename from assets/preview--4xedfSa.js rename to assets/preview-f50LEd9Z.js index 09cb30b1c9..63aaadc7b5 100644 --- a/assets/preview--4xedfSa.js +++ b/assets/preview-f50LEd9Z.js @@ -1,7 +1,7 @@ -import{_ as t}from"./iframe-sjDFBNDn.js";import"../sb-preview/runtime.js";var _={docs:{renderer:async()=>{let{DocsRenderer:r}=await t(()=>import("./DocsRenderer-NNNQARDV-ONpjav1a.js").then(e=>e.D),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url);return new r}}};export{_ as parameters}; +import{_ as t}from"./iframe-uulHRm1N.js";import"../sb-preview/runtime.js";var _={docs:{renderer:async()=>{let{DocsRenderer:r}=await t(()=>import("./DocsRenderer-NNNQARDV-AKp_79_j.js").then(e=>e.D),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url);return new r}}};export{_ as parameters}; function __vite__mapDeps(indexes) { if (!__vite__mapDeps.viteFileDeps) { - __vite__mapDeps.viteFileDeps = ["./DocsRenderer-NNNQARDV-ONpjav1a.js","./iframe-sjDFBNDn.js","./index-TT1qJ6UJ.js","./_commonjsHelpers-4gQjN7DL.js","./react-18-N0svEjlN.js","./client-rbWgHzHN.js","./index-7vsPyIck.js","./_commonjs-dynamic-modules-h-SxKiO4.js","./bundle.esm-7jAAHVxW.js","./index-ogXoivrg.js","./_getPrototype-bjD8Yebc.js","./index-PPLHz8o0.js"] + __vite__mapDeps.viteFileDeps = ["./DocsRenderer-NNNQARDV-AKp_79_j.js","./iframe-uulHRm1N.js","./index-TT1qJ6UJ.js","./_commonjsHelpers-4gQjN7DL.js","./react-18-N0svEjlN.js","./client-rbWgHzHN.js","./index-7vsPyIck.js","./_commonjs-dynamic-modules-h-SxKiO4.js","./bundle.esm-7jAAHVxW.js","./index-ogXoivrg.js","./_getPrototype-bjD8Yebc.js","./index-PPLHz8o0.js"] } return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) } diff --git a/assets/preview-Rg3KxM6d.js b/assets/preview-fc09KXs9.js similarity index 94% rename from assets/preview-Rg3KxM6d.js rename to assets/preview-fc09KXs9.js index acbf11f367..634c68be0c 100644 --- a/assets/preview-Rg3KxM6d.js +++ b/assets/preview-fc09KXs9.js @@ -1,4 +1,4 @@ -import{_ as N}from"./iframe-sjDFBNDn.js";import"../sb-preview/runtime.js";const{global:T}=__STORYBOOK_MODULE_GLOBAL__,{addons:y}=__STORYBOOK_MODULE_PREVIEW_API__;var n="storybook/a11y",U=`${n}/result`,f=`${n}/request`,g=`${n}/running`,p=`${n}/error`,w=`${n}/manual`,a={RESULT:U,REQUEST:f,RUNNING:g,ERROR:p,MANUAL:w},{document:L,window:d}=T,r=y.getChannel(),o=!1,_,A=async t=>{let{manual:e}=await s(t);e||await l(t)},l=async t=>{_=t;try{let e=await s(t);if(!o){o=!0,r.emit(a.RUNNING);let i=(await N(()=>import("./axe-5GIt4bd5.js").then(S=>S.a),__vite__mapDeps([0,1]),import.meta.url)).default,{element:u="#storybook-root",config:O,options:E={}}=e,R=L.querySelector(u);if(!R)return;i.reset(),O&&i.configure(O);let m=await i.run(R,E),c=JSON.parse(JSON.stringify(m));_===t?r.emit(a.RESULT,c):(o=!1,l(_))}}catch(e){r.emit(a.ERROR,e)}finally{o=!1}},s=async t=>{let{parameters:e}=await d.__STORYBOOK_STORY_STORE__.loadStory({storyId:t})||{};return e.a11y||{config:{},options:{}}};r.on(a.REQUEST,A);r.on(a.MANUAL,l); +import{_ as N}from"./iframe-uulHRm1N.js";import"../sb-preview/runtime.js";const{global:T}=__STORYBOOK_MODULE_GLOBAL__,{addons:y}=__STORYBOOK_MODULE_PREVIEW_API__;var n="storybook/a11y",U=`${n}/result`,f=`${n}/request`,g=`${n}/running`,p=`${n}/error`,w=`${n}/manual`,a={RESULT:U,REQUEST:f,RUNNING:g,ERROR:p,MANUAL:w},{document:L,window:d}=T,r=y.getChannel(),o=!1,_,A=async t=>{let{manual:e}=await s(t);e||await l(t)},l=async t=>{_=t;try{let e=await s(t);if(!o){o=!0,r.emit(a.RUNNING);let i=(await N(()=>import("./axe-5GIt4bd5.js").then(S=>S.a),__vite__mapDeps([0,1]),import.meta.url)).default,{element:u="#storybook-root",config:O,options:E={}}=e,R=L.querySelector(u);if(!R)return;i.reset(),O&&i.configure(O);let m=await i.run(R,E),c=JSON.parse(JSON.stringify(m));_===t?r.emit(a.RESULT,c):(o=!1,l(_))}}catch(e){r.emit(a.ERROR,e)}finally{o=!1}},s=async t=>{let{parameters:e}=await d.__STORYBOOK_STORY_STORE__.loadStory({storyId:t})||{};return e.a11y||{config:{},options:{}}};r.on(a.REQUEST,A);r.on(a.MANUAL,l); function __vite__mapDeps(indexes) { if (!__vite__mapDeps.viteFileDeps) { __vite__mapDeps.viteFileDeps = ["./axe-5GIt4bd5.js","./_commonjsHelpers-4gQjN7DL.js"] diff --git a/assets/python-program-editor-2Q8IzVky.js b/assets/python-program-editor-KSnFH92m.js similarity index 78% rename from assets/python-program-editor-2Q8IzVky.js rename to assets/python-program-editor-KSnFH92m.js index efd5362a1b..d00f8f718b 100644 --- a/assets/python-program-editor-2Q8IzVky.js +++ b/assets/python-program-editor-KSnFH92m.js @@ -1 +1 @@ -import{a as i,j as s}from"./jsx-runtime-FVsy8kgq.js";import{c as p}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as n}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{r as m}from"./index-TT1qJ6UJ.js";const{NumberInput:h,TextInput:l}=n;function u(a,r){const t=[];return r===""&&t.push("The program ID is required."),(!Number.isInteger(a)||a<1)&&t.push("The height must be a positive integer."),t}const e=class e extends m.Component{constructor(){super(...arguments),this.change=(...r)=>p.apply(this,r),this.getSaveWarnings=()=>u(this.props.height,this.props.programID)}serialize(){return{programID:this.props.programID,height:this.props.height}}render(){return i("div",{children:[i("label",{children:["User Program ID:"," ",s(l,{value:this.props.programID,onChange:this.change("programID"),placeholder:"123"})]}),s("br",{}),i("label",{children:["Height:"," ",s(h,{value:this.props.height,onChange:this.change("height"),placeholder:"400"})]})]})}};e.widgetName="python-program",e.defaultProps={programID:"",height:400};let o=e;o.__docgenInfo={description:"This is the main editor for this widget, to specify all the options.",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:{type:{name:"PerseusPythonProgramWidgetOptions"}}},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PythonProgramEditor",props:{programID:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},height:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"400",computed:!1}}}};export{o as P}; +import{a as i,j as s}from"./jsx-runtime-FVsy8kgq.js";import{c as p}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as n}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{r as m}from"./index-TT1qJ6UJ.js";const{NumberInput:h,TextInput:l}=n;function u(a,r){const t=[];return r===""&&t.push("The program ID is required."),(!Number.isInteger(a)||a<1)&&t.push("The height must be a positive integer."),t}const e=class e extends m.Component{constructor(){super(...arguments),this.change=(...r)=>p.apply(this,r),this.getSaveWarnings=()=>u(this.props.height,this.props.programID)}serialize(){return{programID:this.props.programID,height:this.props.height}}render(){return i("div",{children:[i("label",{children:["User Program ID:"," ",s(l,{value:this.props.programID,onChange:this.change("programID"),placeholder:"123"})]}),s("br",{}),i("label",{children:["Height:"," ",s(h,{value:this.props.height,onChange:this.change("height"),placeholder:"400"})]})]})}};e.widgetName="python-program",e.defaultProps={programID:"",height:400};let o=e;o.__docgenInfo={description:"This is the main editor for this widget, to specify all the options.",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:{type:{name:"PerseusPythonProgramWidgetOptions"}}},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PythonProgramEditor",props:{programID:{required:!1,tsType:{name:"string"},description:"",defaultValue:{value:'""',computed:!1}},height:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"400",computed:!1}}}};export{o as P}; diff --git a/assets/python-program-editor.stories-Hi5tomDI.js b/assets/python-program-editor.stories-2vnEEV8K.js similarity index 66% rename from assets/python-program-editor.stories-Hi5tomDI.js rename to assets/python-program-editor.stories-2vnEEV8K.js index c0db2f70f1..f1ec857f27 100644 --- a/assets/python-program-editor.stories-Hi5tomDI.js +++ b/assets/python-program-editor.stories-2vnEEV8K.js @@ -1,3 +1,3 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{P as e}from"./python-program-editor-2Q8IzVky.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";const $r={title:"PerseusEditor/Widgets/Python Program Editor"},r=a=>m(e,{onChange:p("onChange")});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var o,t,i;r.parameters={...r.parameters,docs:{...(o=r.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{P as e}from"./python-program-editor-KSnFH92m.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";const $r={title:"PerseusEditor/Widgets/Python Program Editor"},r=a=>m(e,{onChange:p("onChange")});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var o,t,i;r.parameters={...r.parameters,docs:{...(o=r.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(i=(t=r.parameters)==null?void 0:t.docs)==null?void 0:i.source}}};const ro=["Default"];export{r as Default,ro as __namedExportsOrder,$r as default}; diff --git a/assets/python-program.stories-rIntdjhO.js b/assets/python-program.stories-uDM4zaBd.js similarity index 65% rename from assets/python-program.stories-rIntdjhO.js rename to assets/python-program.stories-uDM4zaBd.js index f2e2e2b9cf..00cbea91a9 100644 --- a/assets/python-program.stories-rIntdjhO.js +++ b/assets/python-program.stories-uDM4zaBd.js @@ -1,4 +1,4 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{R as p}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const e={content:`[[☃ python-program 1]] +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{R as p}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const e={content:`[[☃ python-program 1]] `,images:{},widgets:{"python-program 1":{version:{major:0,minor:0},static:!1,type:"python-program",options:{height:400,programID:"5207287069147136"},alignment:"block"}}},Yr={title:"Perseus/Widgets/Python Program"},r=s=>m(p,{question:e});r.__docgenInfo={description:"",methods:[],displayName:"Question1"};var o,t,i;r.parameters={...r.parameters,docs:{...(o=r.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/question-markers-WvVDMwno.js b/assets/question-markers-h3QT0QS4.js similarity index 84% rename from assets/question-markers-WvVDMwno.js rename to assets/question-markers-h3QT0QS4.js index eafb4656ea..bb3ae03f7d 100644 --- a/assets/question-markers-WvVDMwno.js +++ b/assets/question-markers-h3QT0QS4.js @@ -1 +1 @@ -import{a as d,j as s}from"./jsx-runtime-FVsy8kgq.js";import{r as y}from"./index-TT1qJ6UJ.js";import{g as k}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import{U as b}from"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import{g as f}from"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{l as i}from"./index-awljIyHI.js";import{M}from"./marker-ika3cQ1R.js";const{colors:u,typography:g}=k;class R extends y.Component{constructor(){super(...arguments),this._markers=[],this.handleImageDoubleClick=r=>{r.preventDefault();const e=r.currentTarget.getBoundingClientRect(),t=Math.round((r.clientX-e.left)/e.width*1e3)/10,l=Math.round((r.clientY-e.top)/e.height*1e3)/10,{markers:a,onChange:n}=this.props;n([...a,{answers:[],label:"",x:t,y:l}])}}openDropdownForMarkerIndices(r){r.forEach(e=>{var t;this._markers[e]&&((t=this._markers[e])==null||t.openDropdown())})}render(){const{choices:r,imageUrl:e,imageWidth:t,imageHeight:l,markers:a,onChange:n}=this.props,h=f().staticUrl;return d("div",{children:[s("div",{className:i.css(m.title),children:"Markers"}),s("div",{className:i.css(m.subtitle),children:e?d("span",{children:["Double-click on the image to add a marker.",s("br",{}),s("br",{}),"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."}),e&&d("div",{className:i.css(m.markersCanvas),style:{maxWidth:t,maxHeight:l},children:[s("img",{alt:"",className:i.css(m.image),src:h(b.getRealImageUrl(e)),onDoubleClick:this.handleImageDoubleClick}),a.map((p,o)=>y.createElement(M,{...p,choices:r,key:`${p.x}.${p.y}`,onChange:c=>n([...a.slice(0,o),c,...a.slice(o+1)]),onRemove:()=>n([...a.slice(0,o),...a.slice(o+1)]),ref:c=>this._markers[o]=c}))]})]})}}const m=i.StyleSheet.create({title:{...g.bodyXsmallBold,marginBottom:6,color:u.gray17},subtitle:{...g.labelSmall,marginBottom:12,color:u.gray68},markersCanvas:{position:"relative",border:"solid 1px rgba(33, 36, 44, 0.16)"},image:{display:"block",maxWidth:"100%"}});R.__docgenInfo={description:"",methods:[{name:"openDropdownForMarkerIndices",docblock:null,modifiers:[],params:[{name:"indices",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}}],returns:null},{name:"handleImageDoubleClick",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"ReactMouseEvent",raw:"React.MouseEvent",alias:"React.MouseEvent"}}],returns:null}],displayName:"QuestionMarkers",props:{choices:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:""},imageUrl:{required:!0,tsType:{name:"string"},description:""},imageWidth:{required:!0,tsType:{name:"number"},description:""},imageHeight:{required:!0,tsType:{name:"number"},description:""},markers:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"MarkerType"}],raw:"ReadonlyArray"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(markers: ReadonlyArray) => void",signature:{arguments:[{type:{name:"ReadonlyArray",elements:[{name:"MarkerType"}],raw:"ReadonlyArray"},name:"markers"}],return:{name:"void"}}},description:""}}};export{R as Q}; +import{a as d,j as s}from"./jsx-runtime-FVsy8kgq.js";import{r as y}from"./index-TT1qJ6UJ.js";import{g as k}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import{U as b}from"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import{g as f}from"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{l as i}from"./index-awljIyHI.js";import{M}from"./marker-o8uSzdrK.js";const{colors:u,typography:g}=k;class R extends y.Component{constructor(){super(...arguments),this._markers=[],this.handleImageDoubleClick=r=>{r.preventDefault();const e=r.currentTarget.getBoundingClientRect(),t=Math.round((r.clientX-e.left)/e.width*1e3)/10,l=Math.round((r.clientY-e.top)/e.height*1e3)/10,{markers:a,onChange:n}=this.props;n([...a,{answers:[],label:"",x:t,y:l}])}}openDropdownForMarkerIndices(r){r.forEach(e=>{var t;this._markers[e]&&((t=this._markers[e])==null||t.openDropdown())})}render(){const{choices:r,imageUrl:e,imageWidth:t,imageHeight:l,markers:a,onChange:n}=this.props,h=f().staticUrl;return d("div",{children:[s("div",{className:i.css(m.title),children:"Markers"}),s("div",{className:i.css(m.subtitle),children:e?d("span",{children:["Double-click on the image to add a marker.",s("br",{}),s("br",{}),"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."}),e&&d("div",{className:i.css(m.markersCanvas),style:{maxWidth:t,maxHeight:l},children:[s("img",{alt:"",className:i.css(m.image),src:h(b.getRealImageUrl(e)),onDoubleClick:this.handleImageDoubleClick}),a.map((p,o)=>y.createElement(M,{...p,choices:r,key:`${p.x}.${p.y}`,onChange:c=>n([...a.slice(0,o),c,...a.slice(o+1)]),onRemove:()=>n([...a.slice(0,o),...a.slice(o+1)]),ref:c=>this._markers[o]=c}))]})]})}}const m=i.StyleSheet.create({title:{...g.bodyXsmallBold,marginBottom:6,color:u.gray17},subtitle:{...g.labelSmall,marginBottom:12,color:u.gray68},markersCanvas:{position:"relative",border:"solid 1px rgba(33, 36, 44, 0.16)"},image:{display:"block",maxWidth:"100%"}});R.__docgenInfo={description:"",methods:[{name:"openDropdownForMarkerIndices",docblock:null,modifiers:[],params:[{name:"indices",optional:!1,type:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",alias:"ReadonlyArray"}}],returns:null},{name:"handleImageDoubleClick",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:{name:"ReactMouseEvent",raw:"React.MouseEvent",alias:"React.MouseEvent"}}],returns:null}],displayName:"QuestionMarkers",props:{choices:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},description:""},imageUrl:{required:!0,tsType:{name:"string"},description:""},imageWidth:{required:!0,tsType:{name:"number"},description:""},imageHeight:{required:!0,tsType:{name:"number"},description:""},markers:{required:!0,tsType:{name:"ReadonlyArray",elements:[{name:"MarkerType"}],raw:"ReadonlyArray"},description:""},onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(markers: ReadonlyArray) => void",signature:{arguments:[{type:{name:"ReadonlyArray",elements:[{name:"MarkerType"}],raw:"ReadonlyArray"},name:"markers"}],return:{name:"void"}}},description:""}}};export{R as Q}; diff --git a/assets/question-markers.stories-eRXo7rrw.js b/assets/question-markers.stories-ho5wNmN2.js similarity index 76% rename from assets/question-markers.stories-eRXo7rrw.js rename to assets/question-markers.stories-ho5wNmN2.js index ea295ee186..d1f715b084 100644 --- a/assets/question-markers.stories-eRXo7rrw.js +++ b/assets/question-markers.stories-ho5wNmN2.js @@ -1,4 +1,4 @@ -import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{l as p}from"./index-awljIyHI.js";import{r as W}from"./index-TT1qJ6UJ.js";import{Q as b}from"./question-markers-WvVDMwno.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./marker-ika3cQ1R.js";import"./components-GHvuFaIn.js";import"./util-qk2aeK8X.js";import"./form-wrapped-text-field-DtGz9PJ5.js";const lt={title:"PerseusEditor/Widgets/Label Image/Question Markers"},f=p.StyleSheet.create({wrapper:{width:338}}),k=t=>r("div",{className:p.css(f.wrapper),children:r(b,{...t})});class w extends W.Component{constructor(){super(...arguments),this.state={markers:[{answers:[],label:"",x:50,y:50}]}}render(){const{markers:m}=this.state;return r("div",{className:p.css(f.wrapper),children:r(b,{choices:["Lamborghini","BMW","Volkswagen","Fiat","Porsche","Ferrari"],imageUrl:"https://ka-perseus-images.s3.amazonaws.com/2ee5fc32e35c5178373b39fd304b325b2994c913.png",imageWidth:1280,imageHeight:1024,markers:m,onChange:y=>this.setState({markers:y})})})}}const o=t=>r(k,{...{choices:[],imageUrl:"",imageWidth:0,imageHeight:0,markers:[],onChange:()=>{}}}),e=t=>r(k,{...{choices:[],imageUrl:"https://ka-perseus-images.s3.amazonaws.com/2ee5fc32e35c5178373b39fd304b325b2994c913.png",imageWidth:1280,imageHeight:1024,markers:[{answers:[],label:"",x:50,y:50}],onChange:()=>{}}}),i=t=>r(w,{});o.__docgenInfo={description:"",methods:[],displayName:"Empty"};e.__docgenInfo={description:"",methods:[],displayName:"Filled"};i.__docgenInfo={description:"",methods:[],displayName:"Interactive"};var s,a,n;o.parameters={...o.parameters,docs:{...(s=o.parameters)==null?void 0:s.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{l as p}from"./index-awljIyHI.js";import{r as W}from"./index-TT1qJ6UJ.js";import{Q as b}from"./question-markers-h3QT0QS4.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./marker-o8uSzdrK.js";import"./components-h6HHhmoA.js";import"./util-qk2aeK8X.js";import"./form-wrapped-text-field-BopYavUW.js";const lt={title:"PerseusEditor/Widgets/Label Image/Question Markers"},f=p.StyleSheet.create({wrapper:{width:338}}),k=t=>r("div",{className:p.css(f.wrapper),children:r(b,{...t})});class w extends W.Component{constructor(){super(...arguments),this.state={markers:[{answers:[],label:"",x:50,y:50}]}}render(){const{markers:m}=this.state;return r("div",{className:p.css(f.wrapper),children:r(b,{choices:["Lamborghini","BMW","Volkswagen","Fiat","Porsche","Ferrari"],imageUrl:"https://ka-perseus-images.s3.amazonaws.com/2ee5fc32e35c5178373b39fd304b325b2994c913.png",imageWidth:1280,imageHeight:1024,markers:m,onChange:y=>this.setState({markers:y})})})}}const o=t=>r(k,{...{choices:[],imageUrl:"",imageWidth:0,imageHeight:0,markers:[],onChange:()=>{}}}),e=t=>r(k,{...{choices:[],imageUrl:"https://ka-perseus-images.s3.amazonaws.com/2ee5fc32e35c5178373b39fd304b325b2994c913.png",imageWidth:1280,imageHeight:1024,markers:[{answers:[],label:"",x:50,y:50}],onChange:()=>{}}}),i=t=>r(w,{});o.__docgenInfo={description:"",methods:[],displayName:"Empty"};e.__docgenInfo={description:"",methods:[],displayName:"Filled"};i.__docgenInfo={description:"",methods:[],displayName:"Interactive"};var s,a,n;o.parameters={...o.parameters,docs:{...(s=o.parameters)==null?void 0:s.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const props = ({ choices: [], imageUrl: "", diff --git a/assets/radio-editor.stories-fbsTIdy5.js b/assets/radio-editor.stories-08i5Mm_7.js similarity index 66% rename from assets/radio-editor.stories-fbsTIdy5.js rename to assets/radio-editor.stories-08i5Mm_7.js index 5753560a89..44ca6e40b4 100644 --- a/assets/radio-editor.stories-fbsTIdy5.js +++ b/assets/radio-editor.stories-08i5Mm_7.js @@ -1,7 +1,7 @@ -import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{l as m}from"./index-awljIyHI.js";import{r as a}from"./index-TT1qJ6UJ.js";import{R as n}from"./editor-bnXHS4_2.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./index-0C4KXdeC.js";import"./editor-HVcPyY4Q.js";import"./index-SM3muJE2.js";import"./section-control-button-c-G3Veu9.js";import"./index-tFzzSRL2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";const ao={title:"PerseusEditor/Widgets/Radio Editor"},l=m.StyleSheet.create({wrapper:{width:338}}),c={content:`Which of the following values of $x$ satisfies the equation $\\sqrt{64}=x$ ? +import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{l as m}from"./index-awljIyHI.js";import{r as a}from"./index-TT1qJ6UJ.js";import{R as n}from"./editor-0vKo6Oc_.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./index-k-0mNqHS.js";import"./editor-I-vnrXtz.js";import"./index-fuycm_QE.js";import"./index-SM3muJE2.js";import"./section-control-button-J8oVp9bZ.js";import"./index-tFzzSRL2.js";import"./tex-error-view-Y2BSLjwB.js";import"./toggleable-caret-lFiCktzo.js";const no={title:"PerseusEditor/Widgets/Radio Editor"},l=m.StyleSheet.create({wrapper:{width:338}}),c={content:`Which of the following values of $x$ satisfies the equation $\\sqrt{64}=x$ ? [[☃ radio 1]] `,images:{},widgets:{"radio 1":{graded:!0,version:{major:1,minor:0},static:!1,type:"radio",options:{displayCount:null,onePerLine:!1,choices:[{content:"$-8$ and $8$",correct:!1,clue:"The square root operation ($\\sqrt{\\phantom{x}}$) calculates *only* the positive square root when performed on a number, so $x$ is equal to *only* $8$."},{content:"$-8$",correct:!1,clue:"While $(-8)^2=64$, the square root operation ($\\sqrt{\\phantom{x}}$) calculates *only* the positive square root when performed on a number."},{content:"$8$",correct:!0,isNoneOfTheAbove:!1,clue:"$8$ is the positive square root of $64$."},{content:"No value of $x$ satisfies the equation.",correct:!1,isNoneOfTheAbove:!1,clue:"$8$ satisfies the equation."}],countChoices:!1,hasNoneOfTheAbove:!1,multipleSelect:!1,randomize:!1,deselectEnabled:!1},alignment:"default"}}};class d extends a.Component{constructor(){super(...arguments),this.state=c.widgets["radio 1"],this.apiOptions=Object.freeze({})}render(){return r("div",{className:m.css(l.wrapper),children:r(n,{...this.state,apiOptions:this.apiOptions,onChange:o=>{this.setState({...this._widget.serialize(),...o})},ref:o=>this._widget=o})})}}const t=s=>r(d,{});t.__docgenInfo={description:"",methods:[],displayName:"Default"};var i,e,p;t.parameters={...t.parameters,docs:{...(i=t.parameters)==null?void 0:i.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; -}`,...(p=(e=t.parameters)==null?void 0:e.docs)==null?void 0:p.source}}};const no=["Default"];export{t as Default,no as __namedExportsOrder,ao as default}; +}`,...(p=(e=t.parameters)==null?void 0:e.docs)==null?void 0:p.source}}};const lo=["Default"];export{t as Default,lo as __namedExportsOrder,no as default}; diff --git a/assets/radio.stories-4ItdbQNa.js b/assets/radio.stories-C0nIdyBM.js similarity index 71% rename from assets/radio.stories-4ItdbQNa.js rename to assets/radio.stories-C0nIdyBM.js index 78d1ff2ffb..7aed4bf280 100644 --- a/assets/radio.stories-4ItdbQNa.js +++ b/assets/radio.stories-C0nIdyBM.js @@ -1,4 +1,4 @@ -import{j as M}from"./jsx-runtime-FVsy8kgq.js";import{R as O}from"./renderer-with-debug-ui-fbym8U_I.js";import{q as w,c as b,m as I,a as y}from"./radio.testdata-sITJ8lxE.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const fo={title:"Perseus/Widgets/Radio",args:{static:!1,crossOutEnabled:!1,reviewMode:!1,showSolutions:"none",question:w},argTypes:{showSolutions:{options:["none","all","selected"],control:{type:"select"}}},render:t=>M(O,{question:C(t),apiOptions:E(t),reviewMode:t.reviewMode,showSolutions:t.showSolutions})},C=t=>{const m={...t.question,widgets:{}};for(const[f,W]of Object.entries(t.question.widgets))m.widgets[f]={...W,static:t.static};return m},E=t=>({crossOutEnabled:t.crossOutEnabled}),o={args:{question:w}},i={args:{question:b}},r={args:{question:I}},e={args:{question:y}};var p,s,a;o.parameters={...o.parameters,docs:{...(p=o.parameters)==null?void 0:p.docs,source:{originalSource:`{ +import{j as M}from"./jsx-runtime-FVsy8kgq.js";import{R as O}from"./renderer-with-debug-ui-YzY7YHzw.js";import{q as w,c as b,m as I,a as y}from"./radio.testdata-sITJ8lxE.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const fo={title:"Perseus/Widgets/Radio",args:{static:!1,crossOutEnabled:!1,reviewMode:!1,showSolutions:"none",question:w},argTypes:{showSolutions:{options:["none","all","selected"],control:{type:"select"}}},render:t=>M(O,{question:C(t),apiOptions:E(t),reviewMode:t.reviewMode,showSolutions:t.showSolutions})},C=t=>{const m={...t.question,widgets:{}};for(const[f,W]of Object.entries(t.question.widgets))m.widgets[f]={...W,static:t.static};return m},E=t=>({crossOutEnabled:t.crossOutEnabled}),o={args:{question:w}},i={args:{question:b}},r={args:{question:I}},e={args:{question:y}};var p,s,a;o.parameters={...o.parameters,docs:{...(p=o.parameters)==null?void 0:p.docs,source:{originalSource:`{ args: { question: questionWithPassage } diff --git a/assets/range-input-R0Q6JH86.js b/assets/range-input-kzyKWO0E.js similarity index 91% rename from assets/range-input-R0Q6JH86.js rename to assets/range-input-kzyKWO0E.js index c0421cb90e..3a02b8bb51 100644 --- a/assets/range-input-R0Q6JH86.js +++ b/assets/range-input-kzyKWO0E.js @@ -1 +1 @@ -import{a as l,j as o}from"./jsx-runtime-FVsy8kgq.js";import{P as s}from"./index-k-0mNqHS.js";import{r as p}from"./index-TT1qJ6UJ.js";import{N as n}from"./number-input-dpusjjfa.js";const c=()=>!0,t=class t extends p.Component{constructor(){super(...arguments),this.onChange=(e,r)=>{const a=this.props.value;e===0?this.props.onChange([r,a[1]]):this.props.onChange([a[0],r])}}render(){const e=this.props.value,r=this.props.checkValidity||c;return l("div",{className:"range-input",children:[o(n,{...this.props,value:e[0],checkValidity:a=>r([a,e[1]]),onChange:this.onChange.bind(this,0),placeholder:this.props.placeholder[0]}),o(n,{...this.props,value:e[1],checkValidity:a=>r([e[0],a]),onChange:this.onChange.bind(this,1),placeholder:this.props.placeholder[1]})]})}};t.propTypes={value:s.array.isRequired,onChange:s.func.isRequired,placeholder:s.array,checkValidity:s.func},t.defaultProps={placeholder:[null,null]};let i=t;i.__docgenInfo={description:"",methods:[{name:"onChange",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"newVal",optional:!1,type:null}],returns:null}],displayName:"RangeInput",props:{placeholder:{defaultValue:{value:"[null, null]",computed:!1},description:"",type:{name:"array"},required:!1},value:{description:"",type:{name:"array"},required:!0},onChange:{description:"",type:{name:"func"},required:!0},checkValidity:{description:"",type:{name:"func"},required:!1}}};export{i as R}; +import{a as l,j as o}from"./jsx-runtime-FVsy8kgq.js";import{P as s}from"./index-0C4KXdeC.js";import{r as p}from"./index-TT1qJ6UJ.js";import{N as n}from"./number-input-ZhezuDVT.js";const c=()=>!0,t=class t extends p.Component{constructor(){super(...arguments),this.onChange=(e,r)=>{const a=this.props.value;e===0?this.props.onChange([r,a[1]]):this.props.onChange([a[0],r])}}render(){const e=this.props.value,r=this.props.checkValidity||c;return l("div",{className:"range-input",children:[o(n,{...this.props,value:e[0],checkValidity:a=>r([a,e[1]]),onChange:this.onChange.bind(this,0),placeholder:this.props.placeholder[0]}),o(n,{...this.props,value:e[1],checkValidity:a=>r([e[0],a]),onChange:this.onChange.bind(this,1),placeholder:this.props.placeholder[1]})]})}};t.propTypes={value:s.array.isRequired,onChange:s.func.isRequired,placeholder:s.array,checkValidity:s.func},t.defaultProps={placeholder:[null,null]};let i=t;i.__docgenInfo={description:"",methods:[{name:"onChange",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"newVal",optional:!1,type:null}],returns:null}],displayName:"RangeInput",props:{placeholder:{defaultValue:{value:"[null, null]",computed:!1},description:"",type:{name:"array"},required:!1},value:{description:"",type:{name:"array"},required:!0},onChange:{description:"",type:{name:"func"},required:!0},checkValidity:{description:"",type:{name:"func"},required:!1}}};export{i as R}; diff --git a/assets/range-input.stories-LiUT95hU.js b/assets/range-input.stories-V17nbn5_.js similarity index 86% rename from assets/range-input.stories-LiUT95hU.js rename to assets/range-input.stories-V17nbn5_.js index ee5f712edd..658cc4b082 100644 --- a/assets/range-input.stories-LiUT95hU.js +++ b/assets/range-input.stories-V17nbn5_.js @@ -1,4 +1,4 @@ -import{j as t}from"./jsx-runtime-FVsy8kgq.js";import{R as o}from"./range-input-R0Q6JH86.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./number-input-dpusjjfa.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";const N={title:"Perseus/Components/Range Input"},e=s=>t(o,{onChange:()=>{},value:[]}),r=s=>t(o,{onChange:()=>{},value:[-10,10]}),a=s=>t(o,{onChange:()=>{},placeholder:["?","!"],value:[]});e.__docgenInfo={description:"",methods:[],displayName:"EmptyValueArray"};r.__docgenInfo={description:"",methods:[],displayName:"SimpleWithSmallValueRanges"};a.__docgenInfo={description:"",methods:[],displayName:"Placeholders"};var n,p,m;e.parameters={...e.parameters,docs:{...(n=e.parameters)==null?void 0:n.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as t}from"./jsx-runtime-FVsy8kgq.js";import{R as o}from"./range-input-kzyKWO0E.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./number-input-ZhezuDVT.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";const N={title:"Perseus/Components/Range Input"},e=s=>t(o,{onChange:()=>{},value:[]}),r=s=>t(o,{onChange:()=>{},value:[-10,10]}),a=s=>t(o,{onChange:()=>{},placeholder:["?","!"],value:[]});e.__docgenInfo={description:"",methods:[],displayName:"EmptyValueArray"};r.__docgenInfo={description:"",methods:[],displayName:"SimpleWithSmallValueRanges"};a.__docgenInfo={description:"",methods:[],displayName:"Placeholders"};var n,p,m;e.parameters={...e.parameters,docs:{...(n=e.parameters)==null?void 0:n.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return {}} value={[]} />; }`,...(m=(p=e.parameters)==null?void 0:p.docs)==null?void 0:m.source}}};var l,c,i;r.parameters={...r.parameters,docs:{...(l=r.parameters)==null?void 0:l.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return {}} value={[-10, 10]} />; diff --git a/assets/register-all-widgets-and-editors-for-testing-Duh1ZXvu.js b/assets/register-all-widgets-and-editors-for-testing-Duh1ZXvu.js new file mode 100644 index 0000000000..f555c51dc8 --- /dev/null +++ b/assets/register-all-widgets-and-editors-for-testing-Duh1ZXvu.js @@ -0,0 +1 @@ +import{j as t,a}from"./jsx-runtime-FVsy8kgq.js";import{c as $e}from"./index-fuycm_QE.js";import{_ as l,$ as Fe}from"./jquery-yG1GhClm.js";import{c as h,p as c,G as Be,u as He,M as je,v as Ke,x as Ye,T as Ge,w as Je}from"./article-renderer-TMdCDA85.js";import{E as Xe,U as de,r as Ze}from"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import{L as Ee}from"./svg-image-RL9NlJEY.js";import{A as we}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import{S as Qe,r as et,b as tt,a as st,c as at}from"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{g as We}from"./dependencies-8XILypbq.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{r as u}from"./index-TT1qJ6UJ.js";import{C as rt}from"./categorizer-editor-B70XrHDb.js";import{c as f}from"./components-h6HHhmoA.js";import{E as g}from"./editor-jsonify-SX5E4P_Y.js";import{C as w}from"./index-QCAhLhLD.js";import{P as n}from"./index-k-0mNqHS.js";import{B as y}from"./blur-input-hjJsfoK9.js";import{D as nt}from"./definition-editor-dEifSd-2.js";import{D as it}from"./dropdown-editor-z4XV_Nz9.js";import{E as lt}from"./explanation-editor-7TAFL4nE.js";import{E as ot}from"./expression-editor-iqoCc9gS.js";import{I as pt}from"./icon-paths-AuJwhOz7.js";import{l as $}from"./index-awljIyHI.js";import{E as b}from"./editor-I-vnrXtz.js";import{G as ut}from"./graph-settings-_umr9_il.js";import{I as ht}from"./image-editor-AZ-dC4_D.js";import{I as ct}from"./input-number-editor-TkxXdBqK.js";import{I as dt}from"./index-Jny9tT-6.js";import{I as mt}from"./interactive-graph-editor-1ZmjvlNv.js";import{L as gt}from"./label-image-editor-cReH8dJ4.js";import{M as ft}from"./matcher-editor-roy8eQL9.js";import{N as yt}from"./number-line-editor-5mXaeixJ.js";import{N as bt}from"./numeric-input-editor-HZCTKW32.js";import{P as vt}from"./phet-simulation-editor-8cXa9agX.js";import{R as oe}from"./index-7vsPyIck.js";import{P as wt}from"./python-program-editor-KSnFH92m.js";import{R as Ct}from"./editor-0vKo6Oc_.js";import{S as Tt}from"./sorter-editor-rLrUJXLc.js";const ha=$e({displayName:"JsonEditor",getInitialState:function(){return{currentValue:JSON.stringify(this.props.value,null,4),valid:!0}},UNSAFE_componentWillReceiveProps:function(o){(!this.state.valid||!l.isEqual(o.value,JSON.parse(this.state.currentValue)))&&this.setState(this.getInitialState())},handleKeyDown:function(o){if(o.key==="Tab"){const e=o.target.selectionStart,s=o.target.value,r=s.substring(0,e),i=s.substring(e,s.length);o.target.value=r+" "+i,o.target.selectionStart=r.length+4,o.target.selectionEnd=r.length+4,o.preventDefault(),this.handleChange(o)}},handleChange:function(o){const e=o.target.value;try{let s=JSON.parse(e);l.isString(s)&&(s=JSON.parse(s)),this.setState({currentValue:e,valid:!0},function(){this.props.onChange(s)})}catch{this.setState({currentValue:e,valid:!1})}},handleBlur:function(o){const e=o.target.value;try{let s=JSON.parse(e);l.isString(s)&&(s=JSON.parse(s)),this.setState({currentValue:JSON.stringify(s,null,4),valid:!0},function(){this.props.onChange(s)})}catch{this.setState({currentValue:JSON.stringify(this.props.value,null,4),valid:!0})}},render:function(){const o="perseus-json-editor "+(this.state.valid?"valid":"invalid");return t("textarea",{className:o,value:this.state.currentValue,onChange:this.handleChange,onKeyDown:this.handleKeyDown,onBlur:this.handleBlur})}});let Ne=0;const me={},ge={};window.iframeDataStore={};window.addEventListener("message",o=>{if(typeof o.data=="string"){const e=me[o.data];e&&e()}else o.data.id&&(o.data.height!==void 0?ge[o.data.id](o.data.height):o.data.lintWarnings&&Ee.log("LINTER REPORT",{lintWarnings:JSON.stringify(o.data.lintWarnings)}))});class xt extends u.Component{constructor(){super(...arguments),this.container=u.createRef()}componentDidMount(){this._isMounted=!0,this.iframeID=Ne,Ne++,this._prepareFrame(),me[this.iframeID]=()=>{this.sendNewData(this._lastData)},ge[this.iframeID]=e=>{this._lastHeight=e,this._isMounted&&this.props.seamless&&this.container.current&&(this.container.current.style.height=e+"px")}}shouldComponentUpdate(e){return e.datasetValue!==this.props.datasetValue||e.seamless!==this.props.seamless}componentDidUpdate(e){this.container.current&&(this.props.seamless?this.container.current.style.height=this._lastHeight+"px":this.container.current.style.height="100%"),e.datasetValue!==this.props.datasetValue&&this._prepareFrame()}componentWillUnmount(){me[this.iframeID]=null,ge[this.iframeID]=null,this._isMounted=!1}_prepareFrame(){var s,r;this._frame&&((s=this.container.current)==null||s.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"),(r=this.container.current)==null||r.appendChild(e),this._frame=e}sendNewData(e){const s=this._frame;this._isMounted&&e&&(s!=null&&s.contentWindow)&&(this._lastData=e,window.iframeDataStore[this.iframeID]=e,s.contentWindow.postMessage(this.iframeID,"*"))}render(){return t("div",{ref:this.container,style:{width:"100%",height:"100%"}})}}xt.__docgenInfo={description:"",methods:[{name:"_prepareFrame",docblock:null,modifiers:[],params:[],returns:null},{name:"sendNewData",docblock:null,modifiers:[],params:[{name:"data",optional:!1,type:{name:"any"}}],returns:null}],displayName:"IframeContentRenderer",props:{url:{required:!0,tsType:{name:"string"},description:""},datasetKey:{required:!0,tsType:{name:"string"},description:""},datasetValue:{required:!0,tsType:{name:"any"},description:""},seamless:{required:!0,tsType:{name:"boolean"},description:""}}};const{InfoTip:Se}=f,Ie=400,Oe=400;var T;let kt=(T=class extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.serialize=()=>g.serialize.call(this)}render(){return a("fieldset",{className:"pair-editor",children:[a("label",{children:["Name:"," ",t(y,{value:this.props.name,onChange:this.change("name")})]}),a("label",{children:[" ","Value:"," ",t(y,{value:this.props.value,onChange:this.change("value")})]})]})}},T.propTypes={...c,name:n.string,value:n.string},T.defaultProps={name:"",value:""},T);var M;let Nt=(M=class extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.handlePairChange=(e,s)=>{const r=this.props.pairs.slice();r[e]=s;const i=r[r.length-1];i.name&&i.value&&r.push({name:"",value:""}),this.change("pairs",r)},this.serialize=()=>g.serialize.call(this)}render(){const e=l.map(this.props.pairs,(s,r)=>t(kt,{name:s.name,value:s.value,onChange:this.handlePairChange.bind(this,r)},r));return t("div",{children:e})}},M.propTypes={...c,pairs:n.arrayOf(n.shape({name:n.string,value:n.string})).isRequired},M);const St=/khanacademy\.org\/computer-programming\/[^\/]+\/(\d+)/;function It(o){const e=St.exec(o);return e&&(o=e[1]),o}const k=class k extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this._handleSettingsChange=e=>{this.change({settings:e.pairs})},this._handleProgramIDChange=e=>{e=It(e);const{isDevServer:s,InitialRequestUrl:r}=We(),p=`${s?r.origin:"https://www.khanacademy.org"}/api/internal/scratchpads/${e}`;Fe.getJSON(p).done(m=>{const d=m.userAuthoredContentType;this.change({width:m.width,height:m.height,programID:e,programType:d})}).fail((m,d,v)=>{Ee.error("Error retrieving scratchpad info for program ID ",Xe.TransientService,{cause:v,loggedMetadata:{textStatus:d,programID:e}}),this.change({width:Ie,height:Oe,programID:e,programType:null})})},this.serialize=()=>g.serialize.call(this)}render(){return a("div",{children:[a("label",{children:["Url or Program ID:"," ",t(y,{value:this.props.programID,onChange:this._handleProgramIDChange})]}),t("br",{}),t(w,{label:"Show Editor",checked:this.props.showEditor,onChange:e=>{this.props.onChange({showEditor:e})}}),t(Se,{children:'If you show the editor, you should use the "full-width" alignment to make room for the width of the editor.'}),t("br",{}),t(w,{label:"Show Buttons",checked:this.props.showButtons,onChange:e=>{this.props.onChange({showButtons:e})}}),t("br",{}),a("label",{children:["Settings:",t(Nt,{name:"settings",pairs:this.props.settings,onChange:this._handleSettingsChange}),a(Se,{children:["Settings that you add here are available to the program as an object returned by ",t("code",{children:"Program.settings()"})]})]})]})}};k.propTypes={...c},k.widgetName="cs-program",k.defaultProps={programID:"",programType:null,settings:[{name:"",value:""}],showEditor:!1,showButtons:!1,width:Ie,height:Oe};let F=k;F.__docgenInfo={description:"This is the main editor for this widget, to specify all the options.",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"_handleSettingsChange",docblock:null,modifiers:[],params:[{name:"settings",optional:!1,type:null}],returns:null},{name:"_handleProgramIDChange",docblock:null,modifiers:[],params:[{name:"programID",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"CSProgramEditor",props:{programID:{defaultValue:{value:'""',computed:!1},required:!1},programType:{defaultValue:{value:"null",computed:!1},required:!1},settings:{defaultValue:{value:'[{name: "", value: ""}]',computed:!1},required:!1},showEditor:{defaultValue:{value:"false",computed:!1},required:!1},showButtons:{defaultValue:{value:"false",computed:!1},required:!1},width:{defaultValue:{value:"400",computed:!1},required:!1},height:{defaultValue:{value:"400",computed:!1},required:!1}},composes:["@khanacademy/perseus"]};const Ce=class Ce extends u.Component{serialize(){return g.serialize.call(this)}render(){return a("div",{children:[t("p",{children:"This widget has been deprecated and removed"}),t("p",{children:"Learners will see a message and they will not be graded on this part. Please replace this widget with a supported one."})]})}};Ce.widgetName="deprecated-standin";let B=Ce;B.__docgenInfo={description:"",methods:[{name:"serialize",docblock:null,modifiers:[],params:[],returns:{type:{name:"any"}}}],displayName:"DeprecatedStandinEditor",props:{onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(options: any) => void",signature:{arguments:[{type:{name:"any"},name:"options"}],return:{name:"void"}}},description:""}}};const{InlineIcon:qe,TextInput:Ot}=f,{iconPlus:qt,iconTrash:zt}=pt,N=class N extends u.Component{constructor(){super(...arguments),this.editor=u.createRef(),this.hintEditor=u.createRef(),this.change=(...e)=>h.apply(this,e),this.handleAddHint=()=>{const e={content:""};this.props.onChange({hint:e},()=>{var s;(s=this.hintEditor.current)==null||s.focus()})},this.handleRemoveHint=e=>{this.props.onChange({hint:null})},this.getSaveWarnings=()=>{var e;return(e=this.editor.current)==null?void 0:e.getSaveWarnings()},this.serialize=()=>{var e,s;return{title:this.props.title,...(e=this.editor.current)==null?void 0:e.serialize(),hint:(s=this.hintEditor.current)==null?void 0:s.serialize()}}}render(){return a("div",{className:"perseus-group-editor",children:[t("div",{className:"perseus-widget-row",children:a("label",{className:$.css(pe.title),children:["Title:"," ",t(Ot,{value:this.props.title,className:$.css(pe.input),onChange:this.change("title")})]})}),t(b,{ref:this.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&&a("button",{type:"button",style:{marginTop:10},className:"add-hint simple-button orange",onClick:this.handleAddHint,children:[t(qe,{...qt})," Add a hint"]}),this.props.hint&&a("div",{className:"perseus-hint-editor",children:[t("div",{className:$.css(pe.hintsTitle),children:"Hint"}),t(b,{ref:this.hintEditor,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))}}),a("button",{type:"button",className:"remove-hint simple-button orange",onClick:this.handleRemoveHint,children:[t(qe,{...zt})," Remove this hint"]})]})]})}};N.propTypes={...c,title:n.string,content:n.string,widgets:n.object,images:n.object,apiOptions:we.propTypes},N.widgetName="graded-group",N.defaultProps={title:"",content:"",widgets:{},images:{},hint:null};let C=N;const pe=$.StyleSheet.create({title:{fontSize:18,fontWeight:"bold"},input:{fontSize:18},hintsTitle:{marginTop:10,fontSize:"110%",fontWeight:"bold"}});C.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"handleAddHint",docblock:null,modifiers:[],params:[],returns:null},{name:"handleRemoveHint",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"GradedGroupEditor",props:{title:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},content:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},widgets:{defaultValue:{value:"{}",computed:!1},description:"",type:{name:"object"},required:!1},images:{defaultValue:{value:"{}",computed:!1},description:"",type:{name:"object"},required:!1},hint:{defaultValue:{value:"null",computed:!1},required:!1},apiOptions:{description:"",type:{name:"custom",raw:"ApiOptions.propTypes"},required:!1}},composes:["@khanacademy/perseus"]};const S=class S extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.getSaveWarnings=()=>[].concat(...this._editors.map(e=>e?e.getSaveWarnings():[])),this.serialize=()=>({gradedGroups:this.props.gradedGroups}),this.renderGroups=()=>this.props.gradedGroups?this.props.gradedGroups.map((e,s)=>t(C,{ref:r=>this._editors[s]=r,...e,apiOptions:this.props.apiOptions,widgetEnabled:!0,immutableWidgets:!1,onChange:r=>this.change("gradedGroups",Rt(this.props.gradedGroups,s,{...this.props.gradedGroups[s],...r}))},s)):null,this.addGroup=()=>{const e=this.props.gradedGroups||[];this.change("gradedGroups",e.concat([C.defaultProps]))}}UNSAFE_componentWillMount(){this._editors=[]}render(){return a("div",{className:"perseus-group-editor",children:[this.renderGroups(),t("button",{onClick:this.addGroup,children:"Add group"})]})}};S.propTypes={...c,apiOptions:we.propTypes,gradedGroups:n.array,onChange:n.func.isRequired},S.widgetName="graded-group-set",S.defaultProps={gradedGroups:[]};let H=S;const Rt=(o,e,s)=>[...o.slice(0,e),s,...o.slice(e+1)];H.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null},{name:"renderGroups",docblock:null,modifiers:[],params:[],returns:null},{name:"addGroup",docblock:null,modifiers:[],params:[],returns:null}],displayName:"GradedGroupSetEditor",props:{gradedGroups:{defaultValue:{value:"[]",computed:!1},description:"",type:{name:"array"},required:!1},apiOptions:{description:"",type:{name:"custom",raw:"ApiOptions.propTypes"},required:!1},onChange:{description:"",type:{name:"func"},required:!0}},composes:["@khanacademy/perseus"]};const{InfoTip:Vt,MultiButtonGroup:At}=f,{containerSizeClass:Pt,getInteractiveBoxFromSizeClass:Lt}=Qe,Ut=Be.widget,{DEFAULT_GRAPHER_PROPS:ue,allTypes:Dt,chooseType:Mt,defaultPlotProps:_t,getEquationString:Et,typeToButton:Wt}=He,I=class I extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.handleAvailableTypesChange=e=>{let s=this.props.correct;if(!l.contains(e,this.props.correct.type)){const r=this.props.graph,i=Mt(e);s=_t(i,r)}this.props.onChange({availableTypes:e,correct:s})},this.serialize=()=>l.chain(this.props).pick("correct","availableTypes").extend({graph:l.omit(this.props.graph,"box")}).value()}render(){const e=Pt.SMALL;let s,r;if(this.props.graph.valid===!0){const i={graph:this.props.graph,plot:this.props.correct,availableTypes:this.props.availableTypes,onChange:(p,m)=>{var v;let d=this.props.correct;d.type===((v=p.plot)==null?void 0:v.type)?d=l.extend({},d,p.plot):d=p.plot,this.props.onChange({correct:d},m)},trackInteraction:function(){}};r=t(Ut,{...i,apiOptions:this.props.apiOptions,containerSizeClass:e}),s=Et(i)}else r=t("div",{className:"perseus-error",children:this.props.graph.valid});return a("div",{children:[a("div",{children:["Correct answer"," ",t(Vt,{children:t("p",{children:"Graph the correct answer in the graph below and ensure the equation or point coordinates displayed represent the correct answer."})})," ",": ",s]}),t(ut,{editableSettings:["graph","snap","image"],box:Lt(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")}),a("div",{className:"perseus-widget-row",children:[t("label",{children:"Available functions: "}),t(At,{allowEmpty:!1,values:this.props.availableTypes,buttons:l.map(Dt,Wt),onChange:this.handleAvailableTypesChange})]}),r]})}};I.propTypes={...c},I.widgetName="grapher",I.defaultProps={correct:ue.plot,graph:ue.graph,availableTypes:ue.availableTypes};let j=I;j.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"handleAvailableTypesChange",docblock:null,modifiers:[],params:[{name:"newAvailableTypes",optional:!1,type:{name:"Array",elements:[{name:"any"}],raw:"Array",alias:"Array"}}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"GrapherEditor",props:{correct:{defaultValue:{value:"DEFAULT_GRAPHER_PROPS.plot",computed:!0},required:!1},graph:{defaultValue:{value:"DEFAULT_GRAPHER_PROPS.graph",computed:!0},required:!1},availableTypes:{defaultValue:{value:"DEFAULT_GRAPHER_PROPS.availableTypes",computed:!0},required:!1}},composes:["@khanacademy/perseus"]};const O=class O extends u.Component{constructor(){super(...arguments),this.editor=u.createRef(),this._renderMetadataEditor=()=>{const e=this.props.apiOptions.GroupMetadataEditor;return t(e,{value:this.props.metadata,onChange:this.change("metadata")})},this.change=(...e)=>h.apply(this,e),this.getSaveWarnings=()=>{var e;return(e=this.editor.current)==null?void 0:e.getSaveWarnings()},this.serialize=()=>{var e;return l.extend({},(e=this.editor.current)==null?void 0:e.serialize(),{metadata:this.props.metadata})}}render(){return a("div",{className:"perseus-group-editor",children:[t("div",{children:this._renderMetadataEditor()}),t(b,{ref:this.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})]})}};O.propTypes={...c,content:n.string,widgets:n.object,images:n.object,metadata:n.any,apiOptions:we.propTypes},O.widgetName="group",O.defaultProps={content:"",widgets:{},images:{},metadata:void 0};let K=O;K.__docgenInfo={description:"",methods:[{name:"_renderMetadataEditor",docblock:null,modifiers:[],params:[],returns:null},{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"GroupEditor",props:{content:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},widgets:{defaultValue:{value:"{}",computed:!1},description:"",type:{name:"object"},required:!1},images:{defaultValue:{value:"{}",computed:!1},description:"",type:{name:"object"},required:!1},metadata:{defaultValue:{value:"undefined",computed:!0},description:"",type:{name:"any"},required:!1},apiOptions:{description:"",type:{name:"custom",raw:"ApiOptions.propTypes"},required:!1}},composes:["@khanacademy/perseus"]};const ne=class ne extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.serialize=()=>g.serialize.call(this)}render(){return a("fieldset",{children:[a("label",{children:["Name:",t(y,{value:this.props.name,onChange:this.change("name")})]}),a("label",{children:["Value:",t(y,{value:this.props.value,onChange:this.change("value")})]})]})}};ne.propTypes={...c,name:n.string,value:n.string},ne.defaultProps={name:"",value:""};let fe=ne;const Te=class Te extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.handlePairChange=(e,s)=>{const r=this.props.pairs.slice();r[e]=s;const i=r[r.length-1];i.name&&i.value&&r.push({name:"",value:""}),this.change("pairs",r)},this.serialize=()=>g.serialize.call(this)}render(){const e=l.map(this.props.pairs,(s,r)=>t(fe,{name:s.name,value:s.value,onChange:this.handlePairChange.bind(this,r)},r));return t("div",{children:e})}};Te.propTypes={...c,pairs:n.arrayOf(n.shape({name:n.string,value:n.string})).isRequired};let ye=Te;const q=class q extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.handleSettingsChange=e=>{this.change({settings:e.pairs})},this.serialize=()=>g.serialize.call(this)}render(){return a("div",{children:[a("div",{style:{fontWeight:"bold",textAlign:"center"},children:["This widget is deprecated! ",t("br",{}),"Try using the Video or CS Program widgets instead."]}),a("label",{children:["Url or Program ID:",t(y,{value:this.props.url,onChange:this.change("url")})]}),t("br",{}),a("label",{children:["Settings:",t(ye,{name:"settings",pairs:this.props.settings,onChange:this.handleSettingsChange})]}),t("br",{}),a("label",{children:["Width:",t(y,{value:this.props.width,onChange:this.change("width")})]}),a("label",{children:["Height:",t(y,{value:this.props.height,onChange:this.change("height")})]}),t(w,{label:"Allow full screen",checked:this.props.allowFullScreen,onChange:e=>{this.props.onChange({allowFullScreen:e})}}),t("br",{}),t(w,{label:"Allow iframe content to redirect the page",checked:this.props.allowTopNavigation,onChange:e=>{this.props.onChange({allowTopNavigation:e})}})]})}};q.propTypes={...c},q.widgetName="iframe",q.defaultProps={url:"",settings:[{name:"",value:""}],width:"400",height:"400",allowFullScreen:!1,allowTopNavigation:!1};let Y=q;Y.__docgenInfo={description:"This is the main editor for this widget, to specify all the options.",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"handleSettingsChange",docblock:null,modifiers:[],params:[{name:"settings",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"IframeEditor",props:{url:{defaultValue:{value:'""',computed:!1},required:!1},settings:{defaultValue:{value:'[{name: "", value: ""}]',computed:!1},required:!1},width:{defaultValue:{value:'"400"',computed:!1},required:!1},height:{defaultValue:{value:'"400"',computed:!1},required:!1},allowFullScreen:{defaultValue:{value:"false",computed:!1},required:!1},allowTopNavigation:{defaultValue:{value:"false",computed:!1},required:!1}},composes:["@khanacademy/perseus"]};const{RangeInput:$t}=f,Ft=je.widget,ze=6,Bt=function(o){const e=[1,1];return l(o).each((s,r)=>{let i=0;l(s).each((p,m)=>{p!=null&&p.toString().length&&(i=m+1)}),e[1]=Math.max(e[1],i),i>0&&(e[0]=Math.max(e[0],r+1))}),e},z=class z extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.onMatrixBoardSizeChange=e=>{const s=Bt(this.props.answers);if(e[0]!==null&&e[1]!==null){e=[Math.round(Math.min(Math.max(e[0],1),ze)),Math.round(Math.min(Math.max(e[1],1),ze))];const r=l(Math.min(e[0],s[0])).times(i=>l(Math.min(e[1],s[1])).times(p=>this.props.answers[i][p]));this.props.onChange({matrixBoardSize:e,answers:r})}},this.serialize=()=>g.serialize.call(this)}render(){const e=l.extend({numericInput:!0,onBlur:()=>{},onFocus:()=>{},trackInteraction:()=>{}},this.props);return a("div",{className:"perseus-matrix-editor",children:[a("div",{className:"perseus-widget-row",children:[" ","Max matrix size:"," ",t($t,{value:this.props.matrixBoardSize,onChange:this.onMatrixBoardSizeChange,format:this.props.labelStyle,useArrowKeys:!0})]}),t("div",{className:"perseus-widget-row",children:t(Ft,{...e})}),a("div",{className:"perseus-widget-row",children:[" ","Matrix prefix:"," ",t(b,{ref:"prefix",apiOptions:this.props.apiOptions,content:this.props.prefix,widgetEnabled:!1,onChange:s=>{this.change({prefix:s.content})}})]}),a("div",{className:"perseus-widget-row",children:[" ","Matrix suffix:"," ",t(b,{ref:"suffix",apiOptions:this.props.apiOptions,content:this.props.suffix,widgetEnabled:!1,onChange:s=>{this.change({suffix:s.content})}})]})]})}};z.propTypes={...c,matrixBoardSize:n.arrayOf(n.number).isRequired,answers:n.arrayOf(n.arrayOf(n.number)),prefix:n.string,suffix:n.string,cursorPosition:n.arrayOf(n.number)},z.widgetName="matrix",z.defaultProps={matrixBoardSize:[3,3],answers:[[]],prefix:"",suffix:"",cursorPosition:[0,0]};let G=z;G.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"onMatrixBoardSizeChange",docblock:null,modifiers:[],params:[{name:"range",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"MatrixEditor",props:{matrixBoardSize:{defaultValue:{value:"[3, 3]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1},answers:{defaultValue:{value:"[[]]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"arrayOf",value:{name:"number"}}},required:!1},prefix:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},suffix:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},cursorPosition:{defaultValue:{value:"[0, 0]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1}},composes:["@khanacademy/perseus"]};const{InfoTip:Ht,NumberInput:_,RangeInput:jt}=f,Kt={url:null,top:0,left:0},R=class R extends u.Component{constructor(){super(...arguments),this.className="perseus-widget-measurer",this.change=(...e)=>h.apply(this,e),this._changeUrl=e=>{this._changeImage("url",e.target.value)},this._changeTop=e=>{this._changeImage("top",e)},this._changeLeft=e=>{this._changeImage("left",e)},this._changeImage=(e,s)=>{const r=l.clone(this.props.image);r[e]=s,this.change("image",r)},this.renderLabelChoices=e=>l.map(e,function(s){const[r,i]=s;return t("option",{value:i,children:r},i)}),this.serialize=()=>g.serialize.call(this)}render(){const e=l.extend({},Kt,this.props.image);return a("div",{className:"perseus-widget-measurer",children:[t("div",{children:"Image displayed under protractor and/or ruler:"}),a("div",{children:["URL:"," ",t("input",{type:"text",className:"perseus-widget-measurer-url",ref:"image-url",defaultValue:e.url,onChange:this._changeUrl}),t(Ht,{children:t("p",{children:'Create an image in graphie, or use the "Add image" function to create a background.'})})]}),e.url&&a("div",{className:"perseus-widget-row",children:[a("label",{className:"perseus-widget-left-col",children:["Pixels from top:"," ",t(_,{placeholder:0,onChange:this._changeTop,value:e.top,useArrowKeys:!0})]}),a("label",{className:"perseus-widget-right-col",children:["Pixels from left:"," ",t(_,{placeholder:0,onChange:this._changeLeft,value:e.left,useArrowKeys:!0})]})]}),a("div",{children:["Containing area [width, height]:"," ",t(jt,{onChange:this.change("box"),value:this.props.box,useArrowKeys:!0})]}),a("div",{className:"perseus-widget-row",children:[t("div",{className:"perseus-widget-left-col",children:t(w,{label:"Show ruler",checked:this.props.showRuler,onChange:s=>{this.props.onChange({showRuler:s})}})}),t("div",{className:"perseus-widget-right-col",children:t(w,{label:"Show protractor",checked:this.props.showProtractor,onChange:s=>{this.props.onChange({showProtractor:s})}})})]}),this.props.showRuler&&a("div",{children:[t("div",{children:a("label",{children:[" ","Ruler label:"," ",a("select",{onChange:s=>this.change("rulerLabel",s.target.value),value:this.props.rulerLabel,children:[t("option",{value:"",children:"None"}),t("optgroup",{label:"Metric",children:this.renderLabelChoices([["milimeters","mm"],["centimeters","cm"],["meters","m"],["kilometers","km"]])}),t("optgroup",{label:"Imperial",children:this.renderLabelChoices([["inches","in"],["feet","ft"],["yards","yd"],["miles","mi"]])})]})]})}),t("div",{children:a("label",{children:[" ","Ruler ticks:"," ",t("select",{onChange:s=>this.change("rulerTicks",+s.target.value),value:this.props.rulerTicks,children:l.map([1,2,4,8,10,16],function(s){return t("option",{value:s,children:s},s)})})]})}),t("div",{children:a("label",{children:["Ruler pixels per unit:"," ",t(_,{placeholder:40,onChange:this.change("rulerPixels"),value:this.props.rulerPixels,useArrowKeys:!0})]})}),t("div",{children:a("label",{children:["Ruler length in units:"," ",t(_,{placeholder:10,onChange:this.change("rulerLength"),value:this.props.rulerLength,useArrowKeys:!0})]})})]})]})}};R.widgetName="measurer",R.propTypes={...c,box:n.arrayOf(n.number),image:n.shape({url:n.string,top:n.number,left:n.number}),showProtractor:n.bool,showRuler:n.bool,rulerLabel:n.string,rulerTicks:n.number,rulerPixels:n.number,rulerLength:n.number},R.defaultProps={box:[480,480],image:{},showProtractor:!0,showRuler:!1,rulerLabel:"",rulerTicks:10,rulerPixels:40,rulerLength:10};let J=R;J.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"_changeUrl",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"_changeTop",docblock:null,modifiers:[],params:[{name:"newTop",optional:!1,type:null}],returns:null},{name:"_changeLeft",docblock:null,modifiers:[],params:[{name:"newLeft",optional:!1,type:null}],returns:null},{name:"_changeImage",docblock:null,modifiers:[],params:[{name:"subProp",optional:!1,type:null},{name:"newValue",optional:!1,type:null}],returns:null},{name:"renderLabelChoices",docblock:null,modifiers:[],params:[{name:"choices",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"MeasurerEditor",props:{box:{defaultValue:{value:"[480, 480]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1},image:{defaultValue:{value:"{}",computed:!1},description:"",type:{name:"shape",value:{url:{name:"string",required:!1},top:{name:"number",required:!1},left:{name:"number",required:!1}}},required:!1},showProtractor:{defaultValue:{value:"true",computed:!1},description:"",type:{name:"bool"},required:!1},showRuler:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},rulerLabel:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},rulerTicks:{defaultValue:{value:"10",computed:!1},description:"",type:{name:"number"},required:!1},rulerPixels:{defaultValue:{value:"40",computed:!1},description:"",type:{name:"number"},required:!1},rulerLength:{defaultValue:{value:"10",computed:!1},description:"",type:{name:"number"},required:!1}},composes:["@khanacademy/perseus"]};const{NumberInput:Yt,TextInput:Gt}=f,ie=class ie extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.updateMolecule=e=>{this.change({smiles:e})},this.updateRotation=e=>{this.change({rotationAngle:e})},this.serialize=()=>g.serialize.call(this)}render(){return a("div",{children:[t("div",{children:a("label",{children:["SMILES: ",t(Gt,{onChange:this.updateMolecule,value:this.props.smiles})]})}),t("div",{children:a("label",{children:["Rotation (deg): ",t(Yt,{onChange:this.updateRotation,value:this.props.rotationAngle})]})})]})}};ie.propTypes={...c,rotationAngle:n.number,smiles:n.string},ie.widgetName="molecule-renderer";let X=ie;X.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"updateMolecule",docblock:null,modifiers:[],params:[{name:"newValue",optional:!1,type:null}],returns:null},{name:"updateRotation",docblock:null,modifiers:[],params:[{name:"newValue",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"MoleculeWidgetEditor",props:{rotationAngle:{description:"",type:{name:"number"},required:!1},smiles:{description:"",type:{name:"string"},required:!1}},composes:["@khanacademy/perseus"]};const{InfoTip:E,TextListEditor:Re}=f,he="normal",Ve="auto",ce="horizontal",Ae="vertical",V=class V extends u.Component{constructor(){super(...arguments),this.onOptionsChange=(e,s,r)=>{const i={};i[e]=l.map(s,function(p){return{content:p}}),this.props.onChange(i,r)},this.onLayoutChange=e=>{this.props.onChange({layout:e.target.value})},this.onHeightChange=e=>{this.props.onChange({height:e.target.value})},this.serialize=()=>({options:l.chain(l.pluck(this.props.correctOptions,"content")).union(l.pluck(this.props.otherOptions,"content")).uniq().reject(function(s){return s===""}).sort().sortBy(function(s){return/\d/.test(s)?0:/^\$?[a-zA-Z]+\$?$/.test(s)?2:1}).map(function(s){return{content:s}}).value(),correctOptions:this.props.correctOptions,otherOptions:this.props.otherOptions,height:this.props.height,layout:this.props.layout})}render(){return a("div",{className:"perseus-widget-orderer",children:[a("div",{children:[" ","Correct answer:"," ",t(E,{children:t("p",{children:"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."})})]}),t(Re,{options:l.pluck(this.props.correctOptions,"content"),onChange:this.onOptionsChange.bind(this,"correctOptions"),layout:this.props.layout}),a("div",{children:[" ","Other cards:"," ",t(E,{children:t("p",{children:"Create cards that are not part of the answer."})})]}),t(Re,{options:l.pluck(this.props.otherOptions,"content"),onChange:this.onOptionsChange.bind(this,"otherOptions"),layout:this.props.layout}),a("div",{children:[a("label",{children:[" ","Layout:"," ",a("select",{value:this.props.layout,onChange:this.onLayoutChange,children:[t("option",{value:ce,children:"Horizontal"}),t("option",{value:Ae,children:"Vertical"})]})]}),t(E,{children:t("p",{children:"Use the horizontal layout for short text and small images. The vertical layout is best for longer text (e.g. proofs)."})})]}),a("div",{children:[a("label",{children:[" ","Height:"," ",a("select",{value:this.props.height,onChange:this.onHeightChange,children:[t("option",{value:he,children:"Normal"}),t("option",{value:Ve,children:"Automatic"})]})]}),t(E,{children:t("p",{children:'Use "Normal" for text, "Automatic" for images.'})})]})]})}};V.propTypes={correctOptions:n.array,otherOptions:n.array,height:n.oneOf([he,Ve]),layout:n.oneOf([ce,Ae]),onChange:n.func.isRequired},V.widgetName="orderer",V.defaultProps={correctOptions:[{content:"$x$"}],otherOptions:[{content:"$y$"}],height:he,layout:ce};let Z=V;Z.__docgenInfo={description:"",methods:[{name:"onOptionsChange",docblock:null,modifiers:[],params:[{name:"whichOptions",optional:!1,type:null},{name:"options",optional:!1,type:null},{name:"cb",optional:!1,type:null}],returns:null},{name:"onLayoutChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"onHeightChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"OrdererEditor",props:{correctOptions:{defaultValue:{value:'[{content: "$x$"}]',computed:!1},description:"",type:{name:"array"},required:!1},otherOptions:{defaultValue:{value:'[{content: "$y$"}]',computed:!1},description:"",type:{name:"array"},required:!1},height:{defaultValue:{value:'"normal"',computed:!1},description:"",type:{name:"enum",value:[{value:'"normal"',computed:!1},{value:'"auto"',computed:!1}]},required:!1},layout:{defaultValue:{value:'"horizontal"',computed:!1},description:"",type:{name:"enum",value:[{value:'"horizontal"',computed:!1},{value:'"vertical"',computed:!1}]},required:!1},onChange:{description:"",type:{name:"func"},required:!0}}};const{InfoTip:Pe}=f,A=class A extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.serialize=()=>g.serialize.call(this)}render(){const e=t(b,{ref:"passage-editor",apiOptions:this.props.apiOptions,content:this.props.passageText,widgetEnabled:!1,placeholder:"Type passage here...",onChange:r=>{this.change({passageText:r.content})},showWordCount:!0}),s=t(b,{ref:"passage-footnotes-editor",apiOptions:this.props.apiOptions,content:this.props.footnotes,widgetEnabled:!1,placeholder:"Type footnotes here...",onChange:r=>{this.change({footnotes:r.content})}});return a("div",{className:"perseus-widget-passage-editor",children:[t("div",{className:"perseus-widget-row",children:t(w,{label:"Show line numbers",checked:this.props.showLineNumbers,onChange:r=>{this.props.onChange({showLineNumbers:r})}})}),a("div",{children:["Passage title:",t(Pe,{children:t("p",{children:"An optional title that will appear directly above the passage in the same font style. (E.g. Passage 1)"})}),t("div",{children:t("input",{type:"text",defaultValue:this.props.passageTitle,onChange:r=>{this.change({passageTitle:r.target.value})}})})]}),a("div",{children:["Passage Text:",e]}),a("div",{children:["Footnotes:",t(Pe,{children:t("p",{children:"To add footnotes, add ^ characters where they belong in the passage. Then, add ^ in the footnotes area to reference the footnotes in the passage."})}),s]})]})}};A.propTypes={...c,passageTitle:n.string,passageText:n.string,footnotes:n.string,showLineNumbers:n.bool},A.widgetName="passage",A.defaultProps={passageTitle:"",passageText:"",footnotes:"",showLineNumbers:!0};let Q=A;Q.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PassageEditor",props:{passageTitle:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},passageText:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},footnotes:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},showLineNumbers:{defaultValue:{value:"true",computed:!1},description:"",type:{name:"bool"},required:!1}},composes:["@khanacademy/perseus"]};const{InfoTip:Jt,NumberInput:Le,TextInput:Xt}=f,P=class P extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.serialize=()=>g.serialize.call(this)}render(){return a("div",{children:[t("div",{children:a("label",{children:["Passage Number: ",t(Le,{value:this.props.passageNumber,onChange:this.change("passageNumber")})]})}),t("div",{children:a("label",{children:["Reference Number: ",t(Le,{value:this.props.referenceNumber,onChange:this.change("referenceNumber")})]})}),t("div",{children:a("label",{children:["Summary Text: ",t(Xt,{value:this.props.summaryText,onChange:this.change("summaryText")}),a(Jt,{children:[t("p",{children:"Short summary of the referenced section. This will be included in parentheses and quotes automatically."}),t("p",{children:"Ex: The start ... the end"})]})]})})]})}};P.propTypes={...c,passageNumber:n.number,referenceNumber:n.number,summaryText:n.string},P.widgetName="passage-ref",P.defaultProps={passageNumber:1,referenceNumber:1,summaryText:""};let ee=P;ee.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PassageRefEditor",props:{passageNumber:{defaultValue:{value:"1",computed:!1},description:"",type:{name:"number"},required:!1},referenceNumber:{defaultValue:{value:"1",computed:!1},description:"",type:{name:"number"},required:!1},summaryText:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1}},composes:["@khanacademy/perseus"]};const L=class L extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.handleContentChange=e=>{this.change({content:e.target.value})},this.serialize=()=>g.serialize.call(this)}render(){return a("div",{children:["Content:",t("input",{type:"text",value:this.props.content,onChange:this.handleContentChange})]})}};L.propTypes={...c,content:n.string},L.widgetName="passage-ref-target",L.defaultProps={content:""};let te=L;te.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"handleContentChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PassageRefTargetEditor",props:{content:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1}},composes:["@khanacademy/perseus"]};const{InfoTip:x,NumberInput:Ue,RangeInput:Zt,TextListEditor:Qt}=f,es=Ke.widget,be="starting",ve="correct",ts=[be,ve];function De(o,e,s){const r=l.clone(o);r.length=e;for(let i=o.length;i"$"+Ze(o,2)+"$",le=class le extends u.Component{constructor(){super(...arguments),this.state={editing:this.props.static?be:ve,pic:null,loadedUrl:null,minX:null,maxX:null,tickStep:null},this.fetchPic=e=>{if(this.state.loadedUrl!==e){const s=new Image;s.src=e,s.onload=()=>{this.setState({pic:s,loadedUrl:e})}}},this.handleChangeTickStep=e=>{this.setState({tickStep:e})},this.handleChangeRange=e=>{this.setState({minX:e[0],maxX:e[1]})},this.changeLabelInterval=e=>{this.props.onChange({labelInterval:e})},this.handlePlotterChange=e=>{const s={};s[this.state.editing]=e.values,this.props.onChange(s)},this.changeType=e=>{let s;if(e==="histogram"?(s=[Me(0)].concat(this.props.categories),this.props.onChange({type:e,categories:s})):this.props.type==="histogram"?(s=this.props.categories.slice(1),this.props.onChange({type:e,categories:s})):this.props.onChange({type:e}),s){const r=oe.findDOMNode(this.refs.categories);r.value=s.join(", ")}},this.changeLabel=(e,s)=>{const r=l.clone(this.props.labels);r[e]=s.target.value,this.props.onChange({labels:r})},this.changePicUrl=e=>{const s=de.getRealImageUrl(e);this.props.onChange({picUrl:s})},this.changeCategories=e=>{let s=e.length;this.props.type==="histogram"&&s--;const r=this.props.scaleY;this.props.onChange({categories:e,correct:De(this.props.correct,s,r),starting:De(this.props.starting,s,r)})},this.changeScale=e=>{const s=this.props.scaleY,r=+e.target.value||W.scaleY,i=function(m){return m*r/s},p=i(this.props.maxY);this.props.onChange({scaleY:r,maxY:p,correct:l.map(this.props.correct,i),starting:l.map(this.props.starting,i)}),oe.findDOMNode(this.refs.maxY).value=p},this.changeMax=e=>{this.props.onChange({maxY:+e.target.value||W.maxY})},this.changeSnaps=e=>{this.props.onChange({snapsPerLine:+e.target.value||W.snapsPerLine})},this.changeEditing=e=>{this.setState({editing:e})},this.setCategoriesFromScale=()=>{const e=this.state.tickStep||1,s=this.state.minX||0,r=this.state.maxX||0,i=Math.floor((r-s)/e)*e;let p;this.props.type==="histogram"||this.props.type==="dotplot"?p=l.range(0,i+e,e):p=l.range(e,i+e,e),p=l.map(p,d=>d+s),p=l.map(p,Me),this.changeCategories(p);const m=oe.findDOMNode(this.refs.categories);m.value=p.join(", ")},this.serialize=()=>{const e=l.pick(this.props,"correct","starting","type","labels","categories","scaleY","maxY","snapsPerLine","labelInterval");return this.props.type==="pic"&&(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=l.contains(["line","histogram","dotplot"],this.props.type),s=!l.contains(["pic","dotplot"],this.props.type),r={trackInteraction:()=>{},...this.props};return a("div",{className:"perseus-widget-plotter-editor",children:[a("div",{children:["Chart type:"," ",Ye.map(i=>a("label",{children:[t("input",{type:"radio",name:"chart-type",checked:this.props.type===i,onChange:l.partial(this.changeType,i)}),i]},i),this)]}),a("div",{children:["Labels:"," ",["x","y"].map((i,p)=>a("label",{children:[i+":",t("input",{type:"text",onChange:l.partial(this.changeLabel,p),defaultValue:this.props.labels[p]})]},i),this)]}),e&&a("div",{className:"set-from-scale-box",children:[t("span",{className:"categories-title",children:"Set Categories From Scale"}),a("div",{children:[a("label",{children:["Tick Step:"," ",t(Ue,{placeholder:1,useArrowKeys:!0,value:this.state.tickStep,onChange:this.handleChangeTickStep})]}),t(x,{children:t("p",{children:"The difference between adjacent ticks."})})]}),t("div",{children:a("label",{children:["Range:"," ",t(Zt,{placeholder:[0,10],useArrowKeys:!0,value:[this.state.minX,this.state.maxX],onChange:this.handleChangeRange})]})}),t("div",{children:a("button",{onClick:this.setCategoriesFromScale,children:["Set Categories"," "]})})]}),a("div",{children:[a("label",{children:["Label Interval:"," ",t(Ue,{useArrowKeys:!0,value:this.props.labelInterval,onChange:this.changeLabelInterval})]}),t(x,{children:t("p",{children:'Which ticks to display the labels for. For instance, setting this to "4" will only show every 4th label (plus the last one)'})})]}),this.props.type==="pic"&&a("div",{children:[a("label",{children:["Picture:"," ",t(y,{className:"pic-url",value:this.props.picUrl,onChange:this.changePicUrl}),t(x,{children:t("p",{children:'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&&a("p",{className:"warning",children:[t("b",{children:"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."]})]}),t("div",{children:a("label",{children:["Categories:"," ",t(Qt,{ref:"categories",layout:"horizontal",options:this.props.categories,onChange:this.changeCategories})]})}),t("div",{children:a("label",{children:["Scale (y):"," ",t("input",{type:"text",onChange:this.changeScale,defaultValue:this.props.scaleY})]})}),t("div",{children:a("label",{children:["Max y:"," ",t("input",{type:"text",ref:"maxY",onChange:this.changeMax,defaultValue:this.props.maxY})]})}),s&&a("div",{children:[a("label",{children:["Snaps per line:"," ",t("input",{type:"text",onChange:this.changeSnaps,defaultValue:this.props.snapsPerLine})]}),t(x,{children:t("p",{children:"Creates the specified number of divisions between the horizontal lines. Fewer snaps between lines makes the graph easier for the student to create correctly."})})]}),a("div",{children:["Editing values:"," ",ts.map(i=>a("label",{children:[t("input",{type:"radio",disabled:i===ve&&this.props.static,checked:this.props.static?i===be:this.state.editing===i,onChange:p=>this.changeEditing(i)}),i]},i)),a(x,{children:[t("p",{children:"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."}),t("p",{children:"In static mode, the starting values are rendered out to the displayed widget."})]})]}),t(es,{...r,starting:this.props[this.state.editing],onChange:this.handlePlotterChange})]})}};le.widgetName="plotter",le.defaultProps={...W,correct:[1],starting:[1],type:"bar",labels:["",""],categories:[""],picSize:30,picBoxHeight:36,plotDimensions:[275,200],labelInterval:1,get picUrl(){const e=We().staticUrl;return e?e("/images/badges/earth-small.png"):null}};let se=le;se.__docgenInfo={description:"",methods:[{name:"fetchPic",docblock:null,modifiers:[],params:[{name:"url",optional:!1,type:null}],returns:null},{name:"handleChangeTickStep",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:null}],returns:null},{name:"handleChangeRange",docblock:null,modifiers:[],params:[{name:"newValue",optional:!1,type:null}],returns:null},{name:"changeLabelInterval",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:null}],returns:null},{name:"handlePlotterChange",docblock:null,modifiers:[],params:[{name:"newProps",optional:!1,type:null}],returns:null},{name:"changeType",docblock:null,modifiers:[],params:[{name:"type",optional:!1,type:null}],returns:null},{name:"changeLabel",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"changePicUrl",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:null}],returns:null},{name:"changeCategories",docblock:null,modifiers:[],params:[{name:"categories",optional:!1,type:null}],returns:null},{name:"changeScale",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"changeMax",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"changeSnaps",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"changeEditing",docblock:null,modifiers:[],params:[{name:"editing",optional:!1,type:null}],returns:null},{name:"setCategoriesFromScale",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PlotterEditor",props:{type:{required:!1,tsType:{name:'PerseusPlotterWidgetOptions["type"]',raw:'PerseusPlotterWidgetOptions["type"]'},description:"",defaultValue:{value:'"bar"',computed:!1}},labels:{required:!1,tsType:{name:"Array",elements:[{name:"string"}],raw:"Array"},description:"",defaultValue:{value:'["", ""]',computed:!1}},categories:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"union",raw:"string | number",elements:[{name:"string"},{name:"number"}]}],raw:"ReadonlyArray"},description:"",defaultValue:{value:'[""]',computed:!1}},scaleY:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"1",computed:!1}},maxY:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"10",computed:!1}},snapsPerLine:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"2",computed:!1}},picSize:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"30",computed:!1}},picBoxHeight:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"36",computed:!1}},picUrl:{required:!0,tsType:{name:"string"},description:""},plotDimensions:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[275, 200]",computed:!1}},labelInterval:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"1",computed:!1}},starting:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[1]",computed:!1}},correct:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[1]",computed:!1}},static:{required:!0,tsType:{name:"boolean"},description:""},onChange:{required:!0,tsType:{name:"any"},description:""}}};const{InfoTip:ss,NumberInput:_e}=f,as=Ge.widget,U=class U extends u.Component{constructor(){super(...arguments),this.numberOfColumns=u.createRef(),this.focus=()=>{var e;(e=this.numberOfColumns.current)==null||e.focus()},this.onSizeInput=(e,s)=>{let r=+e||0,i=+s||0;r=Math.min(Math.max(1,r),30),i=Math.min(Math.max(1,i),6);const p=this.props.columns,m=this.props.rows,d=this.props.answers;r<=m?d.length=r:l(r-m).times(function(){d.push(de.stringArrayOfSize(p))});function v(ke){i<=p?ke.length=i:l(i-p).times(function(){ke.push("")})}const xe=this.props.headers;v(xe),l.each(d,v),this.props.onChange({rows:r,columns:i,answers:d,headers:xe})},this.serialize=()=>{const e=l.pick(this.props,"headers","rows","columns");return l.extend({},e,{answers:l.map(this.props.answers,l.clone)})}}render(){return a("div",{children:[t("div",{className:"perseus-widget-row",children:a("label",{children:["Number of columns:"," ",t(_e,{ref:this.numberOfColumns,value:this.props.columns,onChange:e=>{e&&this.onSizeInput(this.props.rows,e)},useArrowKeys:!0})]})}),t("div",{className:"perseus-widget-row",children:a("label",{children:["Number of rows:"," ",t(_e,{ref:"numberOfRows",value:this.props.rows,onChange:e=>{e&&this.onSizeInput(e,this.props.columns)},useArrowKeys:!0})]})}),a("div",{children:[" ","Table of answers:"," ",t(ss,{children:t("p",{children:"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."})})]}),t("div",{children:t(as,{headers:this.props.headers,answers:this.props.answers,onChange:this.props.onChange,apiOptions:this.props.apiOptions,editableHeaders:!0,onFocus:()=>{},onBlur:()=>{},trackInteraction:()=>{},Editor:b})})]})}};U.propTypes={rows:n.number,columns:n.number,headers:n.arrayOf(n.string),answers:n.arrayOf(n.arrayOf(n.string))},U.widgetName="table",U.defaultProps=function(){const r=l(4).times(function(){return de.stringArrayOfSize(1)});return{headers:[""],rows:4,columns:1,answers:r}}();let ae=U;ae.__docgenInfo={description:"",methods:[{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"onSizeInput",docblock:null,modifiers:[],params:[{name:"numRawRows",optional:!1,type:null},{name:"numRawColumns",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"TableEditor",props:{rows:{description:"",type:{name:"number"},required:!1},columns:{description:"",type:{name:"number"},required:!1},headers:{description:"",type:{name:"arrayOf",value:{name:"string"}},required:!1},answers:{description:"",type:{name:"arrayOf",value:{name:"arrayOf",value:{name:"string"}}},required:!1}}};const{InfoTip:rs}=f,ns=/khanacademy\.org\/.*\/v\/(.*)$/;function is(o){const e=ns.exec(o);return e?e[1]:o}const D=class D extends u.Component{constructor(){super(...arguments),this._handleUrlChange=e=>{this.props.onChange({location:is(e)})},this.change=(...e)=>h.apply(this,e),this.serialize=()=>g.serialize.call(this)}render(){return t("div",{children:a("label",{children:["KA Video Slug:"," ",t(y,{value:this.props.location,style:{width:290},onChange:this._handleUrlChange}),t(rs,{children:"KA video URLs will be converted to just the slug."})]})})}};D.propTypes={...c,location:n.string,onChange:n.func},D.widgetName="video",D.defaultProps={location:""};let re=D;re.__docgenInfo={description:"This is the main editor for this widget, to specify all the options.",methods:[{name:"_handleUrlChange",docblock:null,modifiers:[],params:[{name:"url",optional:!1,type:null}],returns:null},{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"VideoEditor",props:{location:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},onChange:{description:"",type:{name:"func"},required:!1}},composes:["@khanacademy/perseus"]};const ls=[rt,F,nt,it,lt,ot,C,H,j,K,Y,ht,ct,dt,mt,gt,ft,G,J,X,yt,bt,Z,Q,ee,te,vt,se,wt,Tt,ae,re,Ct,B],ca=()=>{et(Je),tt(ls),st(),at()};export{ls as A,xt as I,ha as J,ca as r}; diff --git a/assets/register-all-widgets-and-editors-for-testing-EmJZ0mCF.js b/assets/register-all-widgets-and-editors-for-testing-EmJZ0mCF.js deleted file mode 100644 index 8d18f5cad5..0000000000 --- a/assets/register-all-widgets-and-editors-for-testing-EmJZ0mCF.js +++ /dev/null @@ -1 +0,0 @@ -import{j as t,a}from"./jsx-runtime-FVsy8kgq.js";import{a as $e,c as h,p as c,G as Fe,v as Be,M as He,x as je,y as Ke,T as Ye,w as Ge}from"./article-renderer-6f7Dak4j.js";import{_ as l,$ as Je}from"./jquery-yG1GhClm.js";import{E as Xe,U as de,r as Ze}from"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import{L as Ee}from"./svg-image-VUqtnnD6.js";import{A as we}from"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import{S as Qe,r as et,b as tt,a as st,c as at}from"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{g as We}from"./dependencies-8XILypbq.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{r as u}from"./index-TT1qJ6UJ.js";import{C as rt}from"./categorizer-editor-am_KbYeJ.js";import{c as f}from"./components-GHvuFaIn.js";import{E as g}from"./editor-jsonify-iuVqcZSO.js";import{C as w}from"./index-QCAhLhLD.js";import{P as n}from"./index-0C4KXdeC.js";import{B as y}from"./blur-input-hjJsfoK9.js";import{D as nt}from"./definition-editor-U6nI8Sor.js";import{D as it}from"./dropdown-editor-YwuHUUGx.js";import{E as lt}from"./explanation-editor-mOtE1dCr.js";import{E as ot}from"./expression-editor-QP0tq_O5.js";import{I as pt}from"./icon-paths-AuJwhOz7.js";import{l as $}from"./index-awljIyHI.js";import{E as b}from"./editor-HVcPyY4Q.js";import{G as ut}from"./graph-settings-F_5lrkPp.js";import{I as ht}from"./image-editor-vUFdKz9N.js";import{I as ct}from"./input-number-editor-kZK8JIcV.js";import{I as dt}from"./index-qwL3MFQI.js";import{I as mt}from"./interactive-graph-editor-mWYDsmAp.js";import{L as gt}from"./label-image-editor-mryVz6qt.js";import{M as ft}from"./matcher-editor-Aey-GH6J.js";import{N as yt}from"./number-line-editor-qZz0HHTk.js";import{N as bt}from"./numeric-input-editor-qJT3lp_E.js";import{P as vt}from"./phet-simulation-editor-h1woLwi3.js";import{R as oe}from"./index-7vsPyIck.js";import{P as wt}from"./python-program-editor-2Q8IzVky.js";import{R as Ct}from"./editor-bnXHS4_2.js";import{S as Tt}from"./sorter-editor-5DYvFg1M.js";const ua=$e({displayName:"JsonEditor",getInitialState:function(){return{currentValue:JSON.stringify(this.props.value,null,4),valid:!0}},UNSAFE_componentWillReceiveProps:function(o){(!this.state.valid||!l.isEqual(o.value,JSON.parse(this.state.currentValue)))&&this.setState(this.getInitialState())},handleKeyDown:function(o){if(o.key==="Tab"){const e=o.target.selectionStart,s=o.target.value,r=s.substring(0,e),i=s.substring(e,s.length);o.target.value=r+" "+i,o.target.selectionStart=r.length+4,o.target.selectionEnd=r.length+4,o.preventDefault(),this.handleChange(o)}},handleChange:function(o){const e=o.target.value;try{let s=JSON.parse(e);l.isString(s)&&(s=JSON.parse(s)),this.setState({currentValue:e,valid:!0},function(){this.props.onChange(s)})}catch{this.setState({currentValue:e,valid:!1})}},handleBlur:function(o){const e=o.target.value;try{let s=JSON.parse(e);l.isString(s)&&(s=JSON.parse(s)),this.setState({currentValue:JSON.stringify(s,null,4),valid:!0},function(){this.props.onChange(s)})}catch{this.setState({currentValue:JSON.stringify(this.props.value,null,4),valid:!0})}},render:function(){const o="perseus-json-editor "+(this.state.valid?"valid":"invalid");return t("textarea",{className:o,value:this.state.currentValue,onChange:this.handleChange,onKeyDown:this.handleKeyDown,onBlur:this.handleBlur})}});let Ne=0;const me={},ge={};window.iframeDataStore={};window.addEventListener("message",o=>{if(typeof o.data=="string"){const e=me[o.data];e&&e()}else o.data.id&&(o.data.height!==void 0?ge[o.data.id](o.data.height):o.data.lintWarnings&&Ee.log("LINTER REPORT",{lintWarnings:JSON.stringify(o.data.lintWarnings)}))});class xt extends u.Component{constructor(){super(...arguments),this.container=u.createRef()}componentDidMount(){this._isMounted=!0,this.iframeID=Ne,Ne++,this._prepareFrame(),me[this.iframeID]=()=>{this.sendNewData(this._lastData)},ge[this.iframeID]=e=>{this._lastHeight=e,this._isMounted&&this.props.seamless&&this.container.current&&(this.container.current.style.height=e+"px")}}shouldComponentUpdate(e){return e.datasetValue!==this.props.datasetValue||e.seamless!==this.props.seamless}componentDidUpdate(e){this.container.current&&(this.props.seamless?this.container.current.style.height=this._lastHeight+"px":this.container.current.style.height="100%"),e.datasetValue!==this.props.datasetValue&&this._prepareFrame()}componentWillUnmount(){me[this.iframeID]=null,ge[this.iframeID]=null,this._isMounted=!1}_prepareFrame(){var s,r;this._frame&&((s=this.container.current)==null||s.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"),(r=this.container.current)==null||r.appendChild(e),this._frame=e}sendNewData(e){const s=this._frame;this._isMounted&&e&&(s!=null&&s.contentWindow)&&(this._lastData=e,window.iframeDataStore[this.iframeID]=e,s.contentWindow.postMessage(this.iframeID,"*"))}render(){return t("div",{ref:this.container,style:{width:"100%",height:"100%"}})}}xt.__docgenInfo={description:"",methods:[{name:"_prepareFrame",docblock:null,modifiers:[],params:[],returns:null},{name:"sendNewData",docblock:null,modifiers:[],params:[{name:"data",optional:!1,type:{name:"any"}}],returns:null}],displayName:"IframeContentRenderer",props:{url:{required:!0,tsType:{name:"string"},description:""},datasetKey:{required:!0,tsType:{name:"string"},description:""},datasetValue:{required:!0,tsType:{name:"any"},description:""},seamless:{required:!0,tsType:{name:"boolean"},description:""}}};const{InfoTip:Se}=f,Ie=400,Oe=400;var T;let kt=(T=class extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.serialize=()=>g.serialize.call(this)}render(){return a("fieldset",{className:"pair-editor",children:[a("label",{children:["Name:"," ",t(y,{value:this.props.name,onChange:this.change("name")})]}),a("label",{children:[" ","Value:"," ",t(y,{value:this.props.value,onChange:this.change("value")})]})]})}},T.propTypes={...c,name:n.string,value:n.string},T.defaultProps={name:"",value:""},T);var M;let Nt=(M=class extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.handlePairChange=(e,s)=>{const r=this.props.pairs.slice();r[e]=s;const i=r[r.length-1];i.name&&i.value&&r.push({name:"",value:""}),this.change("pairs",r)},this.serialize=()=>g.serialize.call(this)}render(){const e=l.map(this.props.pairs,(s,r)=>t(kt,{name:s.name,value:s.value,onChange:this.handlePairChange.bind(this,r)},r));return t("div",{children:e})}},M.propTypes={...c,pairs:n.arrayOf(n.shape({name:n.string,value:n.string})).isRequired},M);const St=/khanacademy\.org\/computer-programming\/[^\/]+\/(\d+)/;function It(o){const e=St.exec(o);return e&&(o=e[1]),o}const k=class k extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this._handleSettingsChange=e=>{this.change({settings:e.pairs})},this._handleProgramIDChange=e=>{e=It(e);const{isDevServer:s,InitialRequestUrl:r}=We(),p=`${s?r.origin:"https://www.khanacademy.org"}/api/internal/scratchpads/${e}`;Je.getJSON(p).done(m=>{const d=m.userAuthoredContentType;this.change({width:m.width,height:m.height,programID:e,programType:d})}).fail((m,d,v)=>{Ee.error("Error retrieving scratchpad info for program ID ",Xe.TransientService,{cause:v,loggedMetadata:{textStatus:d,programID:e}}),this.change({width:Ie,height:Oe,programID:e,programType:null})})},this.serialize=()=>g.serialize.call(this)}render(){return a("div",{children:[a("label",{children:["Url or Program ID:"," ",t(y,{value:this.props.programID,onChange:this._handleProgramIDChange})]}),t("br",{}),t(w,{label:"Show Editor",checked:this.props.showEditor,onChange:e=>{this.props.onChange({showEditor:e})}}),t(Se,{children:'If you show the editor, you should use the "full-width" alignment to make room for the width of the editor.'}),t("br",{}),t(w,{label:"Show Buttons",checked:this.props.showButtons,onChange:e=>{this.props.onChange({showButtons:e})}}),t("br",{}),a("label",{children:["Settings:",t(Nt,{name:"settings",pairs:this.props.settings,onChange:this._handleSettingsChange}),a(Se,{children:["Settings that you add here are available to the program as an object returned by ",t("code",{children:"Program.settings()"})]})]})]})}};k.propTypes={...c},k.widgetName="cs-program",k.defaultProps={programID:"",programType:null,settings:[{name:"",value:""}],showEditor:!1,showButtons:!1,width:Ie,height:Oe};let F=k;F.__docgenInfo={description:"This is the main editor for this widget, to specify all the options.",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"_handleSettingsChange",docblock:null,modifiers:[],params:[{name:"settings",optional:!1,type:null}],returns:null},{name:"_handleProgramIDChange",docblock:null,modifiers:[],params:[{name:"programID",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"CSProgramEditor",props:{programID:{defaultValue:{value:'""',computed:!1},required:!1},programType:{defaultValue:{value:"null",computed:!1},required:!1},settings:{defaultValue:{value:'[{name: "", value: ""}]',computed:!1},required:!1},showEditor:{defaultValue:{value:"false",computed:!1},required:!1},showButtons:{defaultValue:{value:"false",computed:!1},required:!1},width:{defaultValue:{value:"400",computed:!1},required:!1},height:{defaultValue:{value:"400",computed:!1},required:!1}},composes:["@khanacademy/perseus"]};const Ce=class Ce extends u.Component{serialize(){return g.serialize.call(this)}render(){return a("div",{children:[t("p",{children:"This widget has been deprecated and removed"}),t("p",{children:"Learners will see a message and they will not be graded on this part. Please replace this widget with a supported one."})]})}};Ce.widgetName="deprecated-standin";let B=Ce;B.__docgenInfo={description:"",methods:[{name:"serialize",docblock:null,modifiers:[],params:[],returns:{type:{name:"any"}}}],displayName:"DeprecatedStandinEditor",props:{onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(options: any) => void",signature:{arguments:[{type:{name:"any"},name:"options"}],return:{name:"void"}}},description:""}}};const{InlineIcon:qe,TextInput:Ot}=f,{iconPlus:qt,iconTrash:zt}=pt,N=class N extends u.Component{constructor(){super(...arguments),this.editor=u.createRef(),this.hintEditor=u.createRef(),this.change=(...e)=>h.apply(this,e),this.handleAddHint=()=>{const e={content:""};this.props.onChange({hint:e},()=>{var s;(s=this.hintEditor.current)==null||s.focus()})},this.handleRemoveHint=e=>{this.props.onChange({hint:null})},this.getSaveWarnings=()=>{var e;return(e=this.editor.current)==null?void 0:e.getSaveWarnings()},this.serialize=()=>{var e,s;return{title:this.props.title,...(e=this.editor.current)==null?void 0:e.serialize(),hint:(s=this.hintEditor.current)==null?void 0:s.serialize()}}}render(){return a("div",{className:"perseus-group-editor",children:[t("div",{className:"perseus-widget-row",children:a("label",{className:$.css(pe.title),children:["Title:"," ",t(Ot,{value:this.props.title,className:$.css(pe.input),onChange:this.change("title")})]})}),t(b,{ref:this.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&&a("button",{type:"button",style:{marginTop:10},className:"add-hint simple-button orange",onClick:this.handleAddHint,children:[t(qe,{...qt})," Add a hint"]}),this.props.hint&&a("div",{className:"perseus-hint-editor",children:[t("div",{className:$.css(pe.hintsTitle),children:"Hint"}),t(b,{ref:this.hintEditor,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))}}),a("button",{type:"button",className:"remove-hint simple-button orange",onClick:this.handleRemoveHint,children:[t(qe,{...zt})," Remove this hint"]})]})]})}};N.propTypes={...c,title:n.string,content:n.string,widgets:n.object,images:n.object,apiOptions:we.propTypes},N.widgetName="graded-group",N.defaultProps={title:"",content:"",widgets:{},images:{},hint:null};let C=N;const pe=$.StyleSheet.create({title:{fontSize:18,fontWeight:"bold"},input:{fontSize:18},hintsTitle:{marginTop:10,fontSize:"110%",fontWeight:"bold"}});C.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"handleAddHint",docblock:null,modifiers:[],params:[],returns:null},{name:"handleRemoveHint",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"GradedGroupEditor",props:{title:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},content:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},widgets:{defaultValue:{value:"{}",computed:!1},description:"",type:{name:"object"},required:!1},images:{defaultValue:{value:"{}",computed:!1},description:"",type:{name:"object"},required:!1},hint:{defaultValue:{value:"null",computed:!1},required:!1},apiOptions:{description:"",type:{name:"custom",raw:"ApiOptions.propTypes"},required:!1}},composes:["@khanacademy/perseus"]};const S=class S extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.getSaveWarnings=()=>[].concat(...this._editors.map(e=>e?e.getSaveWarnings():[])),this.serialize=()=>({gradedGroups:this.props.gradedGroups}),this.renderGroups=()=>this.props.gradedGroups?this.props.gradedGroups.map((e,s)=>t(C,{ref:r=>this._editors[s]=r,...e,apiOptions:this.props.apiOptions,widgetEnabled:!0,immutableWidgets:!1,onChange:r=>this.change("gradedGroups",Rt(this.props.gradedGroups,s,{...this.props.gradedGroups[s],...r}))},s)):null,this.addGroup=()=>{const e=this.props.gradedGroups||[];this.change("gradedGroups",e.concat([C.defaultProps]))}}UNSAFE_componentWillMount(){this._editors=[]}render(){return a("div",{className:"perseus-group-editor",children:[this.renderGroups(),t("button",{onClick:this.addGroup,children:"Add group"})]})}};S.propTypes={...c,apiOptions:we.propTypes,gradedGroups:n.array,onChange:n.func.isRequired},S.widgetName="graded-group-set",S.defaultProps={gradedGroups:[]};let H=S;const Rt=(o,e,s)=>[...o.slice(0,e),s,...o.slice(e+1)];H.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null},{name:"renderGroups",docblock:null,modifiers:[],params:[],returns:null},{name:"addGroup",docblock:null,modifiers:[],params:[],returns:null}],displayName:"GradedGroupSetEditor",props:{gradedGroups:{defaultValue:{value:"[]",computed:!1},description:"",type:{name:"array"},required:!1},apiOptions:{description:"",type:{name:"custom",raw:"ApiOptions.propTypes"},required:!1},onChange:{description:"",type:{name:"func"},required:!0}},composes:["@khanacademy/perseus"]};const{InfoTip:Vt,MultiButtonGroup:At}=f,{containerSizeClass:Pt,getInteractiveBoxFromSizeClass:Lt}=Qe,Ut=Fe.widget,{DEFAULT_GRAPHER_PROPS:ue,allTypes:Dt,chooseType:Mt,defaultPlotProps:_t,getEquationString:Et,typeToButton:Wt}=Be,I=class I extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.handleAvailableTypesChange=e=>{let s=this.props.correct;if(!l.contains(e,this.props.correct.type)){const r=this.props.graph,i=Mt(e);s=_t(i,r)}this.props.onChange({availableTypes:e,correct:s})},this.serialize=()=>l.chain(this.props).pick("correct","availableTypes").extend({graph:l.omit(this.props.graph,"box")}).value()}render(){const e=Pt.SMALL;let s,r;if(this.props.graph.valid===!0){const i={graph:this.props.graph,plot:this.props.correct,availableTypes:this.props.availableTypes,onChange:(p,m)=>{var v;let d=this.props.correct;d.type===((v=p.plot)==null?void 0:v.type)?d=l.extend({},d,p.plot):d=p.plot,this.props.onChange({correct:d},m)},trackInteraction:function(){}};r=t(Ut,{...i,apiOptions:this.props.apiOptions,containerSizeClass:e}),s=Et(i)}else r=t("div",{className:"perseus-error",children:this.props.graph.valid});return a("div",{children:[a("div",{children:["Correct answer"," ",t(Vt,{children:t("p",{children:"Graph the correct answer in the graph below and ensure the equation or point coordinates displayed represent the correct answer."})})," ",": ",s]}),t(ut,{editableSettings:["graph","snap","image"],box:Lt(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")}),a("div",{className:"perseus-widget-row",children:[t("label",{children:"Available functions: "}),t(At,{allowEmpty:!1,values:this.props.availableTypes,buttons:l.map(Dt,Wt),onChange:this.handleAvailableTypesChange})]}),r]})}};I.propTypes={...c},I.widgetName="grapher",I.defaultProps={correct:ue.plot,graph:ue.graph,availableTypes:ue.availableTypes};let j=I;j.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"handleAvailableTypesChange",docblock:null,modifiers:[],params:[{name:"newAvailableTypes",optional:!1,type:{name:"Array",elements:[{name:"any"}],raw:"Array",alias:"Array"}}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"GrapherEditor",props:{correct:{defaultValue:{value:"DEFAULT_GRAPHER_PROPS.plot",computed:!0},required:!1},graph:{defaultValue:{value:"DEFAULT_GRAPHER_PROPS.graph",computed:!0},required:!1},availableTypes:{defaultValue:{value:"DEFAULT_GRAPHER_PROPS.availableTypes",computed:!0},required:!1}},composes:["@khanacademy/perseus"]};const O=class O extends u.Component{constructor(){super(...arguments),this.editor=u.createRef(),this._renderMetadataEditor=()=>{const e=this.props.apiOptions.GroupMetadataEditor;return t(e,{value:this.props.metadata,onChange:this.change("metadata")})},this.change=(...e)=>h.apply(this,e),this.getSaveWarnings=()=>{var e;return(e=this.editor.current)==null?void 0:e.getSaveWarnings()},this.serialize=()=>{var e;return l.extend({},(e=this.editor.current)==null?void 0:e.serialize(),{metadata:this.props.metadata})}}render(){return a("div",{className:"perseus-group-editor",children:[t("div",{children:this._renderMetadataEditor()}),t(b,{ref:this.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})]})}};O.propTypes={...c,content:n.string,widgets:n.object,images:n.object,metadata:n.any,apiOptions:we.propTypes},O.widgetName="group",O.defaultProps={content:"",widgets:{},images:{},metadata:void 0};let K=O;K.__docgenInfo={description:"",methods:[{name:"_renderMetadataEditor",docblock:null,modifiers:[],params:[],returns:null},{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"getSaveWarnings",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"GroupEditor",props:{content:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},widgets:{defaultValue:{value:"{}",computed:!1},description:"",type:{name:"object"},required:!1},images:{defaultValue:{value:"{}",computed:!1},description:"",type:{name:"object"},required:!1},metadata:{defaultValue:{value:"undefined",computed:!0},description:"",type:{name:"any"},required:!1},apiOptions:{description:"",type:{name:"custom",raw:"ApiOptions.propTypes"},required:!1}},composes:["@khanacademy/perseus"]};const ne=class ne extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.serialize=()=>g.serialize.call(this)}render(){return a("fieldset",{children:[a("label",{children:["Name:",t(y,{value:this.props.name,onChange:this.change("name")})]}),a("label",{children:["Value:",t(y,{value:this.props.value,onChange:this.change("value")})]})]})}};ne.propTypes={...c,name:n.string,value:n.string},ne.defaultProps={name:"",value:""};let fe=ne;const Te=class Te extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.handlePairChange=(e,s)=>{const r=this.props.pairs.slice();r[e]=s;const i=r[r.length-1];i.name&&i.value&&r.push({name:"",value:""}),this.change("pairs",r)},this.serialize=()=>g.serialize.call(this)}render(){const e=l.map(this.props.pairs,(s,r)=>t(fe,{name:s.name,value:s.value,onChange:this.handlePairChange.bind(this,r)},r));return t("div",{children:e})}};Te.propTypes={...c,pairs:n.arrayOf(n.shape({name:n.string,value:n.string})).isRequired};let ye=Te;const q=class q extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.handleSettingsChange=e=>{this.change({settings:e.pairs})},this.serialize=()=>g.serialize.call(this)}render(){return a("div",{children:[a("div",{style:{fontWeight:"bold",textAlign:"center"},children:["This widget is deprecated! ",t("br",{}),"Try using the Video or CS Program widgets instead."]}),a("label",{children:["Url or Program ID:",t(y,{value:this.props.url,onChange:this.change("url")})]}),t("br",{}),a("label",{children:["Settings:",t(ye,{name:"settings",pairs:this.props.settings,onChange:this.handleSettingsChange})]}),t("br",{}),a("label",{children:["Width:",t(y,{value:this.props.width,onChange:this.change("width")})]}),a("label",{children:["Height:",t(y,{value:this.props.height,onChange:this.change("height")})]}),t(w,{label:"Allow full screen",checked:this.props.allowFullScreen,onChange:e=>{this.props.onChange({allowFullScreen:e})}}),t("br",{}),t(w,{label:"Allow iframe content to redirect the page",checked:this.props.allowTopNavigation,onChange:e=>{this.props.onChange({allowTopNavigation:e})}})]})}};q.propTypes={...c},q.widgetName="iframe",q.defaultProps={url:"",settings:[{name:"",value:""}],width:"400",height:"400",allowFullScreen:!1,allowTopNavigation:!1};let Y=q;Y.__docgenInfo={description:"This is the main editor for this widget, to specify all the options.",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"handleSettingsChange",docblock:null,modifiers:[],params:[{name:"settings",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"IframeEditor",props:{url:{defaultValue:{value:'""',computed:!1},required:!1},settings:{defaultValue:{value:'[{name: "", value: ""}]',computed:!1},required:!1},width:{defaultValue:{value:'"400"',computed:!1},required:!1},height:{defaultValue:{value:'"400"',computed:!1},required:!1},allowFullScreen:{defaultValue:{value:"false",computed:!1},required:!1},allowTopNavigation:{defaultValue:{value:"false",computed:!1},required:!1}},composes:["@khanacademy/perseus"]};const{RangeInput:$t}=f,Ft=He.widget,ze=6,Bt=function(o){const e=[1,1];return l(o).each((s,r)=>{let i=0;l(s).each((p,m)=>{p!=null&&p.toString().length&&(i=m+1)}),e[1]=Math.max(e[1],i),i>0&&(e[0]=Math.max(e[0],r+1))}),e},z=class z extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.onMatrixBoardSizeChange=e=>{const s=Bt(this.props.answers);if(e[0]!==null&&e[1]!==null){e=[Math.round(Math.min(Math.max(e[0],1),ze)),Math.round(Math.min(Math.max(e[1],1),ze))];const r=l(Math.min(e[0],s[0])).times(i=>l(Math.min(e[1],s[1])).times(p=>this.props.answers[i][p]));this.props.onChange({matrixBoardSize:e,answers:r})}},this.serialize=()=>g.serialize.call(this)}render(){const e=l.extend({numericInput:!0,onBlur:()=>{},onFocus:()=>{},trackInteraction:()=>{}},this.props);return a("div",{className:"perseus-matrix-editor",children:[a("div",{className:"perseus-widget-row",children:[" ","Max matrix size:"," ",t($t,{value:this.props.matrixBoardSize,onChange:this.onMatrixBoardSizeChange,format:this.props.labelStyle,useArrowKeys:!0})]}),t("div",{className:"perseus-widget-row",children:t(Ft,{...e})}),a("div",{className:"perseus-widget-row",children:[" ","Matrix prefix:"," ",t(b,{ref:"prefix",apiOptions:this.props.apiOptions,content:this.props.prefix,widgetEnabled:!1,onChange:s=>{this.change({prefix:s.content})}})]}),a("div",{className:"perseus-widget-row",children:[" ","Matrix suffix:"," ",t(b,{ref:"suffix",apiOptions:this.props.apiOptions,content:this.props.suffix,widgetEnabled:!1,onChange:s=>{this.change({suffix:s.content})}})]})]})}};z.propTypes={...c,matrixBoardSize:n.arrayOf(n.number).isRequired,answers:n.arrayOf(n.arrayOf(n.number)),prefix:n.string,suffix:n.string,cursorPosition:n.arrayOf(n.number)},z.widgetName="matrix",z.defaultProps={matrixBoardSize:[3,3],answers:[[]],prefix:"",suffix:"",cursorPosition:[0,0]};let G=z;G.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"onMatrixBoardSizeChange",docblock:null,modifiers:[],params:[{name:"range",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"MatrixEditor",props:{matrixBoardSize:{defaultValue:{value:"[3, 3]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1},answers:{defaultValue:{value:"[[]]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"arrayOf",value:{name:"number"}}},required:!1},prefix:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},suffix:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},cursorPosition:{defaultValue:{value:"[0, 0]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1}},composes:["@khanacademy/perseus"]};const{InfoTip:Ht,NumberInput:_,RangeInput:jt}=f,Kt={url:null,top:0,left:0},R=class R extends u.Component{constructor(){super(...arguments),this.className="perseus-widget-measurer",this.change=(...e)=>h.apply(this,e),this._changeUrl=e=>{this._changeImage("url",e.target.value)},this._changeTop=e=>{this._changeImage("top",e)},this._changeLeft=e=>{this._changeImage("left",e)},this._changeImage=(e,s)=>{const r=l.clone(this.props.image);r[e]=s,this.change("image",r)},this.renderLabelChoices=e=>l.map(e,function(s){const[r,i]=s;return t("option",{value:i,children:r},i)}),this.serialize=()=>g.serialize.call(this)}render(){const e=l.extend({},Kt,this.props.image);return a("div",{className:"perseus-widget-measurer",children:[t("div",{children:"Image displayed under protractor and/or ruler:"}),a("div",{children:["URL:"," ",t("input",{type:"text",className:"perseus-widget-measurer-url",ref:"image-url",defaultValue:e.url,onChange:this._changeUrl}),t(Ht,{children:t("p",{children:'Create an image in graphie, or use the "Add image" function to create a background.'})})]}),e.url&&a("div",{className:"perseus-widget-row",children:[a("label",{className:"perseus-widget-left-col",children:["Pixels from top:"," ",t(_,{placeholder:0,onChange:this._changeTop,value:e.top,useArrowKeys:!0})]}),a("label",{className:"perseus-widget-right-col",children:["Pixels from left:"," ",t(_,{placeholder:0,onChange:this._changeLeft,value:e.left,useArrowKeys:!0})]})]}),a("div",{children:["Containing area [width, height]:"," ",t(jt,{onChange:this.change("box"),value:this.props.box,useArrowKeys:!0})]}),a("div",{className:"perseus-widget-row",children:[t("div",{className:"perseus-widget-left-col",children:t(w,{label:"Show ruler",checked:this.props.showRuler,onChange:s=>{this.props.onChange({showRuler:s})}})}),t("div",{className:"perseus-widget-right-col",children:t(w,{label:"Show protractor",checked:this.props.showProtractor,onChange:s=>{this.props.onChange({showProtractor:s})}})})]}),this.props.showRuler&&a("div",{children:[t("div",{children:a("label",{children:[" ","Ruler label:"," ",a("select",{onChange:s=>this.change("rulerLabel",s.target.value),value:this.props.rulerLabel,children:[t("option",{value:"",children:"None"}),t("optgroup",{label:"Metric",children:this.renderLabelChoices([["milimeters","mm"],["centimeters","cm"],["meters","m"],["kilometers","km"]])}),t("optgroup",{label:"Imperial",children:this.renderLabelChoices([["inches","in"],["feet","ft"],["yards","yd"],["miles","mi"]])})]})]})}),t("div",{children:a("label",{children:[" ","Ruler ticks:"," ",t("select",{onChange:s=>this.change("rulerTicks",+s.target.value),value:this.props.rulerTicks,children:l.map([1,2,4,8,10,16],function(s){return t("option",{value:s,children:s},s)})})]})}),t("div",{children:a("label",{children:["Ruler pixels per unit:"," ",t(_,{placeholder:40,onChange:this.change("rulerPixels"),value:this.props.rulerPixels,useArrowKeys:!0})]})}),t("div",{children:a("label",{children:["Ruler length in units:"," ",t(_,{placeholder:10,onChange:this.change("rulerLength"),value:this.props.rulerLength,useArrowKeys:!0})]})})]})]})}};R.widgetName="measurer",R.propTypes={...c,box:n.arrayOf(n.number),image:n.shape({url:n.string,top:n.number,left:n.number}),showProtractor:n.bool,showRuler:n.bool,rulerLabel:n.string,rulerTicks:n.number,rulerPixels:n.number,rulerLength:n.number},R.defaultProps={box:[480,480],image:{},showProtractor:!0,showRuler:!1,rulerLabel:"",rulerTicks:10,rulerPixels:40,rulerLength:10};let J=R;J.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"_changeUrl",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"_changeTop",docblock:null,modifiers:[],params:[{name:"newTop",optional:!1,type:null}],returns:null},{name:"_changeLeft",docblock:null,modifiers:[],params:[{name:"newLeft",optional:!1,type:null}],returns:null},{name:"_changeImage",docblock:null,modifiers:[],params:[{name:"subProp",optional:!1,type:null},{name:"newValue",optional:!1,type:null}],returns:null},{name:"renderLabelChoices",docblock:null,modifiers:[],params:[{name:"choices",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"MeasurerEditor",props:{box:{defaultValue:{value:"[480, 480]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"number"}},required:!1},image:{defaultValue:{value:"{}",computed:!1},description:"",type:{name:"shape",value:{url:{name:"string",required:!1},top:{name:"number",required:!1},left:{name:"number",required:!1}}},required:!1},showProtractor:{defaultValue:{value:"true",computed:!1},description:"",type:{name:"bool"},required:!1},showRuler:{defaultValue:{value:"false",computed:!1},description:"",type:{name:"bool"},required:!1},rulerLabel:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},rulerTicks:{defaultValue:{value:"10",computed:!1},description:"",type:{name:"number"},required:!1},rulerPixels:{defaultValue:{value:"40",computed:!1},description:"",type:{name:"number"},required:!1},rulerLength:{defaultValue:{value:"10",computed:!1},description:"",type:{name:"number"},required:!1}},composes:["@khanacademy/perseus"]};const{NumberInput:Yt,TextInput:Gt}=f,ie=class ie extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.updateMolecule=e=>{this.change({smiles:e})},this.updateRotation=e=>{this.change({rotationAngle:e})},this.serialize=()=>g.serialize.call(this)}render(){return a("div",{children:[t("div",{children:a("label",{children:["SMILES: ",t(Gt,{onChange:this.updateMolecule,value:this.props.smiles})]})}),t("div",{children:a("label",{children:["Rotation (deg): ",t(Yt,{onChange:this.updateRotation,value:this.props.rotationAngle})]})})]})}};ie.propTypes={...c,rotationAngle:n.number,smiles:n.string},ie.widgetName="molecule-renderer";let X=ie;X.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"updateMolecule",docblock:null,modifiers:[],params:[{name:"newValue",optional:!1,type:null}],returns:null},{name:"updateRotation",docblock:null,modifiers:[],params:[{name:"newValue",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"MoleculeWidgetEditor",props:{rotationAngle:{description:"",type:{name:"number"},required:!1},smiles:{description:"",type:{name:"string"},required:!1}},composes:["@khanacademy/perseus"]};const{InfoTip:E,TextListEditor:Re}=f,he="normal",Ve="auto",ce="horizontal",Ae="vertical",V=class V extends u.Component{constructor(){super(...arguments),this.onOptionsChange=(e,s,r)=>{const i={};i[e]=l.map(s,function(p){return{content:p}}),this.props.onChange(i,r)},this.onLayoutChange=e=>{this.props.onChange({layout:e.target.value})},this.onHeightChange=e=>{this.props.onChange({height:e.target.value})},this.serialize=()=>({options:l.chain(l.pluck(this.props.correctOptions,"content")).union(l.pluck(this.props.otherOptions,"content")).uniq().reject(function(s){return s===""}).sort().sortBy(function(s){return/\d/.test(s)?0:/^\$?[a-zA-Z]+\$?$/.test(s)?2:1}).map(function(s){return{content:s}}).value(),correctOptions:this.props.correctOptions,otherOptions:this.props.otherOptions,height:this.props.height,layout:this.props.layout})}render(){return a("div",{className:"perseus-widget-orderer",children:[a("div",{children:[" ","Correct answer:"," ",t(E,{children:t("p",{children:"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."})})]}),t(Re,{options:l.pluck(this.props.correctOptions,"content"),onChange:this.onOptionsChange.bind(this,"correctOptions"),layout:this.props.layout}),a("div",{children:[" ","Other cards:"," ",t(E,{children:t("p",{children:"Create cards that are not part of the answer."})})]}),t(Re,{options:l.pluck(this.props.otherOptions,"content"),onChange:this.onOptionsChange.bind(this,"otherOptions"),layout:this.props.layout}),a("div",{children:[a("label",{children:[" ","Layout:"," ",a("select",{value:this.props.layout,onChange:this.onLayoutChange,children:[t("option",{value:ce,children:"Horizontal"}),t("option",{value:Ae,children:"Vertical"})]})]}),t(E,{children:t("p",{children:"Use the horizontal layout for short text and small images. The vertical layout is best for longer text (e.g. proofs)."})})]}),a("div",{children:[a("label",{children:[" ","Height:"," ",a("select",{value:this.props.height,onChange:this.onHeightChange,children:[t("option",{value:he,children:"Normal"}),t("option",{value:Ve,children:"Automatic"})]})]}),t(E,{children:t("p",{children:'Use "Normal" for text, "Automatic" for images.'})})]})]})}};V.propTypes={correctOptions:n.array,otherOptions:n.array,height:n.oneOf([he,Ve]),layout:n.oneOf([ce,Ae]),onChange:n.func.isRequired},V.widgetName="orderer",V.defaultProps={correctOptions:[{content:"$x$"}],otherOptions:[{content:"$y$"}],height:he,layout:ce};let Z=V;Z.__docgenInfo={description:"",methods:[{name:"onOptionsChange",docblock:null,modifiers:[],params:[{name:"whichOptions",optional:!1,type:null},{name:"options",optional:!1,type:null},{name:"cb",optional:!1,type:null}],returns:null},{name:"onLayoutChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"onHeightChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"OrdererEditor",props:{correctOptions:{defaultValue:{value:'[{content: "$x$"}]',computed:!1},description:"",type:{name:"array"},required:!1},otherOptions:{defaultValue:{value:'[{content: "$y$"}]',computed:!1},description:"",type:{name:"array"},required:!1},height:{defaultValue:{value:'"normal"',computed:!1},description:"",type:{name:"enum",value:[{value:'"normal"',computed:!1},{value:'"auto"',computed:!1}]},required:!1},layout:{defaultValue:{value:'"horizontal"',computed:!1},description:"",type:{name:"enum",value:[{value:'"horizontal"',computed:!1},{value:'"vertical"',computed:!1}]},required:!1},onChange:{description:"",type:{name:"func"},required:!0}}};const{InfoTip:Pe}=f,A=class A extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.serialize=()=>g.serialize.call(this)}render(){const e=t(b,{ref:"passage-editor",apiOptions:this.props.apiOptions,content:this.props.passageText,widgetEnabled:!1,placeholder:"Type passage here...",onChange:r=>{this.change({passageText:r.content})},showWordCount:!0}),s=t(b,{ref:"passage-footnotes-editor",apiOptions:this.props.apiOptions,content:this.props.footnotes,widgetEnabled:!1,placeholder:"Type footnotes here...",onChange:r=>{this.change({footnotes:r.content})}});return a("div",{className:"perseus-widget-passage-editor",children:[t("div",{className:"perseus-widget-row",children:t(w,{label:"Show line numbers",checked:this.props.showLineNumbers,onChange:r=>{this.props.onChange({showLineNumbers:r})}})}),a("div",{children:["Passage title:",t(Pe,{children:t("p",{children:"An optional title that will appear directly above the passage in the same font style. (E.g. Passage 1)"})}),t("div",{children:t("input",{type:"text",defaultValue:this.props.passageTitle,onChange:r=>{this.change({passageTitle:r.target.value})}})})]}),a("div",{children:["Passage Text:",e]}),a("div",{children:["Footnotes:",t(Pe,{children:t("p",{children:"To add footnotes, add ^ characters where they belong in the passage. Then, add ^ in the footnotes area to reference the footnotes in the passage."})}),s]})]})}};A.propTypes={...c,passageTitle:n.string,passageText:n.string,footnotes:n.string,showLineNumbers:n.bool},A.widgetName="passage",A.defaultProps={passageTitle:"",passageText:"",footnotes:"",showLineNumbers:!0};let Q=A;Q.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PassageEditor",props:{passageTitle:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},passageText:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},footnotes:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},showLineNumbers:{defaultValue:{value:"true",computed:!1},description:"",type:{name:"bool"},required:!1}},composes:["@khanacademy/perseus"]};const{InfoTip:Jt,NumberInput:Le,TextInput:Xt}=f,P=class P extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.serialize=()=>g.serialize.call(this)}render(){return a("div",{children:[t("div",{children:a("label",{children:["Passage Number: ",t(Le,{value:this.props.passageNumber,onChange:this.change("passageNumber")})]})}),t("div",{children:a("label",{children:["Reference Number: ",t(Le,{value:this.props.referenceNumber,onChange:this.change("referenceNumber")})]})}),t("div",{children:a("label",{children:["Summary Text: ",t(Xt,{value:this.props.summaryText,onChange:this.change("summaryText")}),a(Jt,{children:[t("p",{children:"Short summary of the referenced section. This will be included in parentheses and quotes automatically."}),t("p",{children:"Ex: The start ... the end"})]})]})})]})}};P.propTypes={...c,passageNumber:n.number,referenceNumber:n.number,summaryText:n.string},P.widgetName="passage-ref",P.defaultProps={passageNumber:1,referenceNumber:1,summaryText:""};let ee=P;ee.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PassageRefEditor",props:{passageNumber:{defaultValue:{value:"1",computed:!1},description:"",type:{name:"number"},required:!1},referenceNumber:{defaultValue:{value:"1",computed:!1},description:"",type:{name:"number"},required:!1},summaryText:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1}},composes:["@khanacademy/perseus"]};const L=class L extends u.Component{constructor(){super(...arguments),this.change=(...e)=>h.apply(this,e),this.handleContentChange=e=>{this.change({content:e.target.value})},this.serialize=()=>g.serialize.call(this)}render(){return a("div",{children:["Content:",t("input",{type:"text",value:this.props.content,onChange:this.handleContentChange})]})}};L.propTypes={...c,content:n.string},L.widgetName="passage-ref-target",L.defaultProps={content:""};let te=L;te.__docgenInfo={description:"",methods:[{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"handleContentChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PassageRefTargetEditor",props:{content:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1}},composes:["@khanacademy/perseus"]};const{InfoTip:x,NumberInput:Ue,RangeInput:Zt,TextListEditor:Qt}=f,es=je.widget,be="starting",ve="correct",ts=[be,ve];function De(o,e,s){const r=l.clone(o);r.length=e;for(let i=o.length;i"$"+Ze(o,2)+"$",le=class le extends u.Component{constructor(){super(...arguments),this.state={editing:this.props.static?be:ve,pic:null,loadedUrl:null,minX:null,maxX:null,tickStep:null},this.fetchPic=e=>{if(this.state.loadedUrl!==e){const s=new Image;s.src=e,s.onload=()=>{this.setState({pic:s,loadedUrl:e})}}},this.handleChangeTickStep=e=>{this.setState({tickStep:e})},this.handleChangeRange=e=>{this.setState({minX:e[0],maxX:e[1]})},this.changeLabelInterval=e=>{this.props.onChange({labelInterval:e})},this.handlePlotterChange=e=>{const s={};s[this.state.editing]=e.values,this.props.onChange(s)},this.changeType=e=>{let s;if(e==="histogram"?(s=[Me(0)].concat(this.props.categories),this.props.onChange({type:e,categories:s})):this.props.type==="histogram"?(s=this.props.categories.slice(1),this.props.onChange({type:e,categories:s})):this.props.onChange({type:e}),s){const r=oe.findDOMNode(this.refs.categories);r.value=s.join(", ")}},this.changeLabel=(e,s)=>{const r=l.clone(this.props.labels);r[e]=s.target.value,this.props.onChange({labels:r})},this.changePicUrl=e=>{const s=de.getRealImageUrl(e);this.props.onChange({picUrl:s})},this.changeCategories=e=>{let s=e.length;this.props.type==="histogram"&&s--;const r=this.props.scaleY;this.props.onChange({categories:e,correct:De(this.props.correct,s,r),starting:De(this.props.starting,s,r)})},this.changeScale=e=>{const s=this.props.scaleY,r=+e.target.value||W.scaleY,i=function(m){return m*r/s},p=i(this.props.maxY);this.props.onChange({scaleY:r,maxY:p,correct:l.map(this.props.correct,i),starting:l.map(this.props.starting,i)}),oe.findDOMNode(this.refs.maxY).value=p},this.changeMax=e=>{this.props.onChange({maxY:+e.target.value||W.maxY})},this.changeSnaps=e=>{this.props.onChange({snapsPerLine:+e.target.value||W.snapsPerLine})},this.changeEditing=e=>{this.setState({editing:e})},this.setCategoriesFromScale=()=>{const e=this.state.tickStep||1,s=this.state.minX||0,r=this.state.maxX||0,i=Math.floor((r-s)/e)*e;let p;this.props.type==="histogram"||this.props.type==="dotplot"?p=l.range(0,i+e,e):p=l.range(e,i+e,e),p=l.map(p,d=>d+s),p=l.map(p,Me),this.changeCategories(p);const m=oe.findDOMNode(this.refs.categories);m.value=p.join(", ")},this.serialize=()=>{const e=l.pick(this.props,"correct","starting","type","labels","categories","scaleY","maxY","snapsPerLine","labelInterval");return this.props.type==="pic"&&(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=l.contains(["line","histogram","dotplot"],this.props.type),s=!l.contains(["pic","dotplot"],this.props.type),r={trackInteraction:()=>{},...this.props};return a("div",{className:"perseus-widget-plotter-editor",children:[a("div",{children:["Chart type:"," ",Ke.map(i=>a("label",{children:[t("input",{type:"radio",name:"chart-type",checked:this.props.type===i,onChange:l.partial(this.changeType,i)}),i]},i),this)]}),a("div",{children:["Labels:"," ",["x","y"].map((i,p)=>a("label",{children:[i+":",t("input",{type:"text",onChange:l.partial(this.changeLabel,p),defaultValue:this.props.labels[p]})]},i),this)]}),e&&a("div",{className:"set-from-scale-box",children:[t("span",{className:"categories-title",children:"Set Categories From Scale"}),a("div",{children:[a("label",{children:["Tick Step:"," ",t(Ue,{placeholder:1,useArrowKeys:!0,value:this.state.tickStep,onChange:this.handleChangeTickStep})]}),t(x,{children:t("p",{children:"The difference between adjacent ticks."})})]}),t("div",{children:a("label",{children:["Range:"," ",t(Zt,{placeholder:[0,10],useArrowKeys:!0,value:[this.state.minX,this.state.maxX],onChange:this.handleChangeRange})]})}),t("div",{children:a("button",{onClick:this.setCategoriesFromScale,children:["Set Categories"," "]})})]}),a("div",{children:[a("label",{children:["Label Interval:"," ",t(Ue,{useArrowKeys:!0,value:this.props.labelInterval,onChange:this.changeLabelInterval})]}),t(x,{children:t("p",{children:'Which ticks to display the labels for. For instance, setting this to "4" will only show every 4th label (plus the last one)'})})]}),this.props.type==="pic"&&a("div",{children:[a("label",{children:["Picture:"," ",t(y,{className:"pic-url",value:this.props.picUrl,onChange:this.changePicUrl}),t(x,{children:t("p",{children:'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&&a("p",{className:"warning",children:[t("b",{children:"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."]})]}),t("div",{children:a("label",{children:["Categories:"," ",t(Qt,{ref:"categories",layout:"horizontal",options:this.props.categories,onChange:this.changeCategories})]})}),t("div",{children:a("label",{children:["Scale (y):"," ",t("input",{type:"text",onChange:this.changeScale,defaultValue:this.props.scaleY})]})}),t("div",{children:a("label",{children:["Max y:"," ",t("input",{type:"text",ref:"maxY",onChange:this.changeMax,defaultValue:this.props.maxY})]})}),s&&a("div",{children:[a("label",{children:["Snaps per line:"," ",t("input",{type:"text",onChange:this.changeSnaps,defaultValue:this.props.snapsPerLine})]}),t(x,{children:t("p",{children:"Creates the specified number of divisions between the horizontal lines. Fewer snaps between lines makes the graph easier for the student to create correctly."})})]}),a("div",{children:["Editing values:"," ",ts.map(i=>a("label",{children:[t("input",{type:"radio",disabled:i===ve&&this.props.static,checked:this.props.static?i===be:this.state.editing===i,onChange:p=>this.changeEditing(i)}),i]},i)),a(x,{children:[t("p",{children:"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."}),t("p",{children:"In static mode, the starting values are rendered out to the displayed widget."})]})]}),t(es,{...r,starting:this.props[this.state.editing],onChange:this.handlePlotterChange})]})}};le.widgetName="plotter",le.defaultProps={...W,correct:[1],starting:[1],type:"bar",labels:["",""],categories:[""],picSize:30,picBoxHeight:36,plotDimensions:[275,200],labelInterval:1,get picUrl(){const e=We().staticUrl;return e?e("/images/badges/earth-small.png"):null}};let se=le;se.__docgenInfo={description:"",methods:[{name:"fetchPic",docblock:null,modifiers:[],params:[{name:"url",optional:!1,type:null}],returns:null},{name:"handleChangeTickStep",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:null}],returns:null},{name:"handleChangeRange",docblock:null,modifiers:[],params:[{name:"newValue",optional:!1,type:null}],returns:null},{name:"changeLabelInterval",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:null}],returns:null},{name:"handlePlotterChange",docblock:null,modifiers:[],params:[{name:"newProps",optional:!1,type:null}],returns:null},{name:"changeType",docblock:null,modifiers:[],params:[{name:"type",optional:!1,type:null}],returns:null},{name:"changeLabel",docblock:null,modifiers:[],params:[{name:"i",optional:!1,type:null},{name:"e",optional:!1,type:null}],returns:null},{name:"changePicUrl",docblock:null,modifiers:[],params:[{name:"value",optional:!1,type:null}],returns:null},{name:"changeCategories",docblock:null,modifiers:[],params:[{name:"categories",optional:!1,type:null}],returns:null},{name:"changeScale",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"changeMax",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"changeSnaps",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"changeEditing",docblock:null,modifiers:[],params:[{name:"editing",optional:!1,type:null}],returns:null},{name:"setCategoriesFromScale",docblock:null,modifiers:[],params:[],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"PlotterEditor",props:{type:{required:!1,tsType:{name:'PerseusPlotterWidgetOptions["type"]',raw:'PerseusPlotterWidgetOptions["type"]'},description:"",defaultValue:{value:'"bar"',computed:!1}},labels:{required:!1,tsType:{name:"Array",elements:[{name:"string"}],raw:"Array"},description:"",defaultValue:{value:'["", ""]',computed:!1}},categories:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"union",raw:"string | number",elements:[{name:"string"},{name:"number"}]}],raw:"ReadonlyArray"},description:"",defaultValue:{value:'[""]',computed:!1}},scaleY:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"1",computed:!1}},maxY:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"10",computed:!1}},snapsPerLine:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"2",computed:!1}},picSize:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"30",computed:!1}},picBoxHeight:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"36",computed:!1}},picUrl:{required:!0,tsType:{name:"string"},description:""},plotDimensions:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[275, 200]",computed:!1}},labelInterval:{required:!1,tsType:{name:"number"},description:"",defaultValue:{value:"1",computed:!1}},starting:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[1]",computed:!1}},correct:{required:!1,tsType:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray"},description:"",defaultValue:{value:"[1]",computed:!1}},static:{required:!0,tsType:{name:"boolean"},description:""},onChange:{required:!0,tsType:{name:"any"},description:""}}};const{InfoTip:ss,NumberInput:_e}=f,as=Ye.widget,U=class U extends u.Component{constructor(){super(...arguments),this.numberOfColumns=u.createRef(),this.focus=()=>{var e;(e=this.numberOfColumns.current)==null||e.focus()},this.onSizeInput=(e,s)=>{let r=+e||0,i=+s||0;r=Math.min(Math.max(1,r),30),i=Math.min(Math.max(1,i),6);const p=this.props.columns,m=this.props.rows,d=this.props.answers;r<=m?d.length=r:l(r-m).times(function(){d.push(de.stringArrayOfSize(p))});function v(ke){i<=p?ke.length=i:l(i-p).times(function(){ke.push("")})}const xe=this.props.headers;v(xe),l.each(d,v),this.props.onChange({rows:r,columns:i,answers:d,headers:xe})},this.serialize=()=>{const e=l.pick(this.props,"headers","rows","columns");return l.extend({},e,{answers:l.map(this.props.answers,l.clone)})}}render(){return a("div",{children:[t("div",{className:"perseus-widget-row",children:a("label",{children:["Number of columns:"," ",t(_e,{ref:this.numberOfColumns,value:this.props.columns,onChange:e=>{e&&this.onSizeInput(this.props.rows,e)},useArrowKeys:!0})]})}),t("div",{className:"perseus-widget-row",children:a("label",{children:["Number of rows:"," ",t(_e,{ref:"numberOfRows",value:this.props.rows,onChange:e=>{e&&this.onSizeInput(e,this.props.columns)},useArrowKeys:!0})]})}),a("div",{children:[" ","Table of answers:"," ",t(ss,{children:t("p",{children:"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."})})]}),t("div",{children:t(as,{headers:this.props.headers,answers:this.props.answers,onChange:this.props.onChange,apiOptions:this.props.apiOptions,editableHeaders:!0,onFocus:()=>{},onBlur:()=>{},trackInteraction:()=>{},Editor:b})})]})}};U.propTypes={rows:n.number,columns:n.number,headers:n.arrayOf(n.string),answers:n.arrayOf(n.arrayOf(n.string))},U.widgetName="table",U.defaultProps=function(){const r=l(4).times(function(){return de.stringArrayOfSize(1)});return{headers:[""],rows:4,columns:1,answers:r}}();let ae=U;ae.__docgenInfo={description:"",methods:[{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"onSizeInput",docblock:null,modifiers:[],params:[{name:"numRawRows",optional:!1,type:null},{name:"numRawColumns",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"TableEditor",props:{rows:{description:"",type:{name:"number"},required:!1},columns:{description:"",type:{name:"number"},required:!1},headers:{description:"",type:{name:"arrayOf",value:{name:"string"}},required:!1},answers:{description:"",type:{name:"arrayOf",value:{name:"arrayOf",value:{name:"string"}}},required:!1}}};const{InfoTip:rs}=f,ns=/khanacademy\.org\/.*\/v\/(.*)$/;function is(o){const e=ns.exec(o);return e?e[1]:o}const D=class D extends u.Component{constructor(){super(...arguments),this._handleUrlChange=e=>{this.props.onChange({location:is(e)})},this.change=(...e)=>h.apply(this,e),this.serialize=()=>g.serialize.call(this)}render(){return t("div",{children:a("label",{children:["KA Video Slug:"," ",t(y,{value:this.props.location,style:{width:290},onChange:this._handleUrlChange}),t(rs,{children:"KA video URLs will be converted to just the slug."})]})})}};D.propTypes={...c,location:n.string,onChange:n.func},D.widgetName="video",D.defaultProps={location:""};let re=D;re.__docgenInfo={description:"This is the main editor for this widget, to specify all the options.",methods:[{name:"_handleUrlChange",docblock:null,modifiers:[],params:[{name:"url",optional:!1,type:null}],returns:null},{name:"change",docblock:null,modifiers:[],params:[{name:"...args",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"VideoEditor",props:{location:{defaultValue:{value:'""',computed:!1},description:"",type:{name:"string"},required:!1},onChange:{description:"",type:{name:"func"},required:!1}},composes:["@khanacademy/perseus"]};const ls=[rt,F,nt,it,lt,ot,C,H,j,K,Y,ht,ct,dt,mt,gt,ft,G,J,X,yt,bt,Z,Q,ee,te,vt,se,wt,Tt,ae,re,Ct,B],ha=()=>{et(Ge),tt(ls),st(),at()};export{ls as A,xt as I,ua as J,ha as r}; diff --git a/assets/register-all-widgets-for-testing-qzjCjLVo.js b/assets/register-all-widgets-for-testing-qzjCjLVo.js deleted file mode 100644 index 4e55aa2848..0000000000 --- a/assets/register-all-widgets-for-testing-qzjCjLVo.js +++ /dev/null @@ -1 +0,0 @@ -import{w as e}from"./article-renderer-6f7Dak4j.js";import{r,a as s}from"./renderer-vBOYiNCS.js";const a=()=>{r(e),s()};export{a as r}; diff --git a/assets/register-all-widgets-for-testing-xSlGtLC1.js b/assets/register-all-widgets-for-testing-xSlGtLC1.js new file mode 100644 index 0000000000..283da489a1 --- /dev/null +++ b/assets/register-all-widgets-for-testing-xSlGtLC1.js @@ -0,0 +1 @@ +import{w as e}from"./article-renderer-TMdCDA85.js";import{r,a as s}from"./renderer-hPmI_Chp.js";const a=()=>{r(e),s()};export{a as r}; diff --git a/assets/renderer-vBOYiNCS.js b/assets/renderer-hPmI_Chp.js similarity index 86% rename from assets/renderer-vBOYiNCS.js rename to assets/renderer-hPmI_Chp.js index 225e5cc4b5..817e3d5823 100644 --- a/assets/renderer-vBOYiNCS.js +++ b/assets/renderer-hPmI_Chp.js @@ -1,12 +1,12 @@ -import{j as g,a as ye}from"./jsx-runtime-FVsy8kgq.js";import{a as We}from"./version-akiLXZts.js";import{P as E,E as A,U as te}from"./util-XcxTwqb0.js";import{g as or}from"./_commonjsHelpers-4gQjN7DL.js";import{e as lr,i as ur}from"./invariant-bu5zBsRS.js";import{e as dr}from"./index-J2t_5nK1.js";import{c as fe}from"./index-dnMhQZ-1.js";import{_ as u,d as yr,$ as mr}from"./jquery-yG1GhClm.js";import{r as z}from"./index-TT1qJ6UJ.js";import{R as ke}from"./index-7vsPyIck.js";import{c as pe}from"./asset-context-I7yIqWki.js";import{L as G,S as gr,o as hr}from"./svg-image-VUqtnnD6.js";import{T as ze}from"./tex-VP4hirbI.js";import{Z as pr}from"./zoomable-CA1NzpZD.js";import{Z as cr}from"./zoomable-tex-MZi7Hqbp.js";import{g as Y,D as br}from"./dependencies-8XILypbq.js";import{A as vr,C as ce}from"./perseus-api-mOiZT07d.js";import{L as wr}from"./lint-I_5mQeXl.js";import{f as fr,t as kr,u as qr,z as Tr}from"./constants-I_nlPaPx.js";class K{static parse(r){return new me(r).parse()}match(r){throw new E("Selector subclasses must implement match()",A.NotAllowed)}toString(){return"Unknown selector class"}}class me{constructor(r){r=r.trim().replace(/\s+/g," "),this.tokens=r.match(me.TOKENS)||[],this.tokenIndex=0}nextToken(){return this.tokens[this.tokenIndex]||""}consume(){this.tokenIndex++}isIdentifier(){const r=this.tokens[this.tokenIndex][0];return r>="a"&&r<="z"||r>="A"&&r<="Z"}skipSpace(){for(;this.nextToken()===" ";)this.consume()}parse(){const r=this.parseTreeSelector();let e=this.nextToken();if(!e)return r;const n=[r];for(;e;){if(e===",")this.consume();else throw new be("Expected comma");n.push(this.parseTreeSelector()),e=this.nextToken()}return new Rr(n)}parseTreeSelector(){this.skipSpace();let r=this.parseNodeSelector();for(;;){const e=this.nextToken();if(!e||e===",")break;if(e===" ")this.consume(),r=new xr(r,this.parseNodeSelector());else if(e===">")this.consume(),r=new Wr(r,this.parseNodeSelector());else if(e==="+")this.consume(),r=new jr(r,this.parseNodeSelector());else if(e==="~")this.consume(),r=new Ir(r,this.parseNodeSelector());else throw new be("Unexpected token: "+e)}return r}parseNodeSelector(){this.skipSpace();const r=this.nextToken();if(r==="*")return this.consume(),new Ar;if(this.isIdentifier())return this.consume(),new Or(r);throw new be("Expected node type")}}me.TOKENS=/([a-zA-Z][\w-]*)|(\d+)|[^\s]|(\s(?=[a-zA-Z\*]))/g;class be extends Error{constructor(r){super(r)}}class Rr extends K{constructor(r){super(),this.selectors=r}match(r){for(let e=0;e0?", ":"",r+=this.selectors[e].toString();return r}}class Ar extends K{match(r){return[r.currentNode()]}toString(){return"*"}}class Or extends K{constructor(r){super(),this.type=r}match(r){const e=r.currentNode();return e.type===this.type?[e]:null}toString(){return this.type}}class ge extends K{constructor(r,e){super(),this.left=r,this.right=e}}class xr extends ge{constructor(r,e){super(r,e)}match(r){const e=this.right.match(r);if(e)for(r=r.clone();r.hasParent();){r.goToParent();const n=this.left.match(r);if(n)return n.concat(e)}return null}toString(){return this.left.toString()+" "+this.right.toString()}}class Wr extends ge{constructor(r,e){super(r,e)}match(r){const e=this.right.match(r);if(e&&r.hasParent()){r=r.clone(),r.goToParent();const n=this.left.match(r);if(n)return n.concat(e)}return null}toString(){return this.left.toString()+" > "+this.right.toString()}}class jr extends ge{constructor(r,e){super(r,e)}match(r){const e=this.right.match(r);if(e&&r.hasPreviousSibling()){r=r.clone(),r.goToPreviousSibling();const n=this.left.match(r);if(n)return n.concat(e)}return null}toString(){return this.left.toString()+" + "+this.right.toString()}}class Ir extends ge{constructor(r,e){super(r,e)}match(r){const e=this.right.match(r);if(e)for(r=r.clone();r.hasPreviousSibling();){r.goToPreviousSibling();const n=this.left.match(r);if(n)return n.concat(e)}return null}toString(){return this.left.toString()+" ~ "+this.right.toString()}}const _=class _{constructor(r,e,n,a,i,s){if(!n&&!a)throw new E("Lint rules must have a selector or pattern",A.InvalidInput,{metadata:{name:r}});this.name=r||"unnamed rule",this.severity=e||_.Severity.BULK_WARNING,this.selector=n||_.DEFAULT_SELECTOR,this.pattern=a||null,typeof i=="function"?(this.lint=i,this.message=null):(this.lint=(...o)=>this._defaultLintFunction(...o),this.message=i),this.applies=s||function(){return!0}}static makeRule(r){return new _(r.name,r.severity,r.selector?K.parse(r.selector):null,_.makePattern(r.pattern),r.lint||r.message,r.applies)}check(r,e,n,a){const i=this.selector.match(e);if(!i)return null;let s;if(this.pattern?s=n.match(this.pattern):s=_.FakePatternMatch(n,n,0),!s)return null;try{const o=this.lint(e,n,i,s,a);return o?typeof o=="string"?{rule:this.name,severity:this.severity,message:o,start:0,end:n.length}:{rule:this.name,severity:this.severity,message:o.message,start:o.start,end:o.end}:null}catch(o){return{rule:"lint-rule-failure",message:`Exception in rule ${this.name}: ${o.message} +import{j as g,a as ye}from"./jsx-runtime-FVsy8kgq.js";import{a as We}from"./version-akiLXZts.js";import{P as E,E as A,U as te}from"./util-YrNvlCNO.js";import{g as or}from"./_commonjsHelpers-4gQjN7DL.js";import{e as lr,i as ur}from"./invariant-bu5zBsRS.js";import{e as dr}from"./index-J2t_5nK1.js";import{c as fe}from"./index-dnMhQZ-1.js";import{_ as u,d as yr,$ as mr}from"./jquery-yG1GhClm.js";import{r as N}from"./index-TT1qJ6UJ.js";import{R as ke}from"./index-7vsPyIck.js";import{c as pe}from"./asset-context-I7yIqWki.js";import{L as G,S as gr,o as hr}from"./svg-image-RL9NlJEY.js";import{T as Ne}from"./tex-VP4hirbI.js";import{Z as pr}from"./zoomable-CA1NzpZD.js";import{Z as cr}from"./zoomable-tex-MZi7Hqbp.js";import{g as Y,D as br}from"./dependencies-8XILypbq.js";import{A as vr,C as ce}from"./perseus-api-mOiZT07d.js";import{L as wr}from"./lint-I_5mQeXl.js";import{f as fr,t as kr,u as qr,z as Tr}from"./constants-I_nlPaPx.js";class K{static parse(r){return new me(r).parse()}match(r){throw new E("Selector subclasses must implement match()",A.NotAllowed)}toString(){return"Unknown selector class"}}class me{constructor(r){r=r.trim().replace(/\s+/g," "),this.tokens=r.match(me.TOKENS)||[],this.tokenIndex=0}nextToken(){return this.tokens[this.tokenIndex]||""}consume(){this.tokenIndex++}isIdentifier(){const r=this.tokens[this.tokenIndex][0];return r>="a"&&r<="z"||r>="A"&&r<="Z"}skipSpace(){for(;this.nextToken()===" ";)this.consume()}parse(){const r=this.parseTreeSelector();let e=this.nextToken();if(!e)return r;const n=[r];for(;e;){if(e===",")this.consume();else throw new be("Expected comma");n.push(this.parseTreeSelector()),e=this.nextToken()}return new Rr(n)}parseTreeSelector(){this.skipSpace();let r=this.parseNodeSelector();for(;;){const e=this.nextToken();if(!e||e===",")break;if(e===" ")this.consume(),r=new xr(r,this.parseNodeSelector());else if(e===">")this.consume(),r=new Wr(r,this.parseNodeSelector());else if(e==="+")this.consume(),r=new jr(r,this.parseNodeSelector());else if(e==="~")this.consume(),r=new Ir(r,this.parseNodeSelector());else throw new be("Unexpected token: "+e)}return r}parseNodeSelector(){this.skipSpace();const r=this.nextToken();if(r==="*")return this.consume(),new Ar;if(this.isIdentifier())return this.consume(),new Or(r);throw new be("Expected node type")}}me.TOKENS=/([a-zA-Z][\w-]*)|(\d+)|[^\s]|(\s(?=[a-zA-Z\*]))/g;class be extends Error{constructor(r){super(r)}}class Rr extends K{constructor(r){super(),this.selectors=r}match(r){for(let e=0;e0?", ":"",r+=this.selectors[e].toString();return r}}class Ar extends K{match(r){return[r.currentNode()]}toString(){return"*"}}class Or extends K{constructor(r){super(),this.type=r}match(r){const e=r.currentNode();return e.type===this.type?[e]:null}toString(){return this.type}}class ge extends K{constructor(r,e){super(),this.left=r,this.right=e}}class xr extends ge{constructor(r,e){super(r,e)}match(r){const e=this.right.match(r);if(e)for(r=r.clone();r.hasParent();){r.goToParent();const n=this.left.match(r);if(n)return n.concat(e)}return null}toString(){return this.left.toString()+" "+this.right.toString()}}class Wr extends ge{constructor(r,e){super(r,e)}match(r){const e=this.right.match(r);if(e&&r.hasParent()){r=r.clone(),r.goToParent();const n=this.left.match(r);if(n)return n.concat(e)}return null}toString(){return this.left.toString()+" > "+this.right.toString()}}class jr extends ge{constructor(r,e){super(r,e)}match(r){const e=this.right.match(r);if(e&&r.hasPreviousSibling()){r=r.clone(),r.goToPreviousSibling();const n=this.left.match(r);if(n)return n.concat(e)}return null}toString(){return this.left.toString()+" + "+this.right.toString()}}class Ir extends ge{constructor(r,e){super(r,e)}match(r){const e=this.right.match(r);if(e)for(r=r.clone();r.hasPreviousSibling();){r.goToPreviousSibling();const n=this.left.match(r);if(n)return n.concat(e)}return null}toString(){return this.left.toString()+" ~ "+this.right.toString()}}const _=class _{constructor(r,e,n,a,i,s){if(!n&&!a)throw new E("Lint rules must have a selector or pattern",A.InvalidInput,{metadata:{name:r}});this.name=r||"unnamed rule",this.severity=e||_.Severity.BULK_WARNING,this.selector=n||_.DEFAULT_SELECTOR,this.pattern=a||null,typeof i=="function"?(this.lint=i,this.message=null):(this.lint=(...o)=>this._defaultLintFunction(...o),this.message=i),this.applies=s||function(){return!0}}static makeRule(r){return new _(r.name,r.severity,r.selector?K.parse(r.selector):null,_.makePattern(r.pattern),r.lint||r.message,r.applies)}check(r,e,n,a){const i=this.selector.match(e);if(!i)return null;let s;if(this.pattern?s=n.match(this.pattern):s=_.FakePatternMatch(n,n,0),!s)return null;try{const o=this.lint(e,n,i,s,a);return o?typeof o=="string"?{rule:this.name,severity:this.severity,message:o,start:0,end:n.length}:{rule:this.name,severity:this.severity,message:o.message,start:o.start,end:o.end}:null}catch(o){return{rule:"lint-rule-failure",message:`Exception in rule ${this.name}: ${o.message} Stack trace: -${o.stack}`,start:0,end:n.length}}}_defaultLintFunction(r,e,n,a,i){return{message:this.message||"",start:a.index,end:a.index+a[0].length}}static makePattern(r){if(!r)return null;if(r instanceof RegExp)return r;if(r[0]==="/"){const e=r.lastIndexOf("/"),n=r.substring(1,e),a=r.substring(e+1);return new RegExp(n,a)}return new RegExp(r)}static FakePatternMatch(r,e,n){const a=[e];return a.index=n,a.input=r,a}};_.Severity={ERROR:1,WARNING:2,GUIDELINE:3,BULK_WARNING:4};let y=_;y.DEFAULT_SELECTOR=K.parse("text");const Cr=/\/\/([^\/]+)/;function Er(t){if(!t)return"";const r=t.match(Cr);return r?r[1]:""}const Nr=y.makeRule({name:"absolute-url",severity:y.Severity.GUIDELINE,selector:"link, image",lint:function(t,r,e,n){const a=e[0].target,i=Er(a);if(i==="khanacademy.org"||i.endsWith(".khanacademy.org"))return`Don't use absolute URLs: +${o.stack}`,start:0,end:n.length}}}_defaultLintFunction(r,e,n,a,i){return{message:this.message||"",start:a.index,end:a.index+a[0].length}}static makePattern(r){if(!r)return null;if(r instanceof RegExp)return r;if(r[0]==="/"){const e=r.lastIndexOf("/"),n=r.substring(1,e),a=r.substring(e+1);return new RegExp(n,a)}return new RegExp(r)}static FakePatternMatch(r,e,n){const a=[e];return a.index=n,a.input=r,a}};_.Severity={ERROR:1,WARNING:2,GUIDELINE:3,BULK_WARNING:4};let y=_;y.DEFAULT_SELECTOR=K.parse("text");const Cr=/\/\/([^\/]+)/;function Er(t){if(!t)return"";const r=t.match(Cr);return r?r[1]:""}const zr=y.makeRule({name:"absolute-url",severity:y.Severity.GUIDELINE,selector:"link, image",lint:function(t,r,e,n){const a=e[0].target,i=Er(a);if(i==="khanacademy.org"||i.endsWith(".khanacademy.org"))return`Don't use absolute URLs: When linking to KA content or images, omit the https://www.khanacademy.org URL prefix. -Use a relative URL beginning with / instead.`}}),zr=y.makeRule({name:"blockquoted-math",severity:y.Severity.WARNING,selector:"blockQuote math, blockQuote blockMath",message:`Blockquoted math: +Use a relative URL beginning with / instead.`}}),Nr=y.makeRule({name:"blockquoted-math",severity:y.Severity.WARNING,selector:"blockQuote math, blockQuote blockMath",message:`Blockquoted math: math should not be indented.`}),Lr=y.makeRule({name:"blockquoted-widget",severity:y.Severity.WARNING,selector:"blockQuote widget",message:`Blockquoted widget: widgets should not be indented.`}),_r=y.makeRule({name:"double-spacing-after-terminal",severity:y.Severity.BULK_WARNING,selector:"paragraph",pattern:/[.!\?] {2}/i,message:`Use a single space after a sentence-ending period, or -any other kind of terminal punctuation.`});function Pr(t,r){return`Answer requires a button not found in the button sets: ${t} (in ${r})`}const Fr={"\\sqrt":"prealgebra","\\sin":"trig","\\cos":"trig","\\tan":"trig","\\log":"logarithms","\\ln":"logarithms"},Sr=y.makeRule({name:"expression-widget",severity:y.Severity.WARNING,selector:"widget",lint:function(t,r,e,n,a){var d;if(t.currentNode().widgetType!=="expression")return;const i=t.currentNode().id;if(!i)return;const s=(d=a==null?void 0:a.widgets)==null?void 0:d[i];if(!s)return;const o=s.options.answerForms,l=s.options.buttonSets;for(const m of o)for(const[h,b]of Object.entries(Fr))if(m.value.includes(h)&&!l.includes(b))return Pr(h,b)}}),$r=y.makeRule({name:"extra-content-spacing",selector:"paragraph",pattern:/\s+$/,applies:function(t){return(t==null?void 0:t.contentType)==="article"},message:"No extra whitespace at the end of content blocks."}),Ur=y.makeRule({name:"heading-level-1",severity:y.Severity.WARNING,selector:"heading",lint:function(t,r,e,n){if(e[0].level===1)return`Don't use level-1 headings: +any other kind of terminal punctuation.`});function Pr(t,r){return`Answer requires a button not found in the button sets: ${t} (in ${r})`}const Fr={"\\sqrt":"prealgebra","\\sin":"trig","\\cos":"trig","\\tan":"trig","\\log":"logarithms","\\ln":"logarithms"},Sr=y.makeRule({name:"expression-widget",severity:y.Severity.WARNING,selector:"widget",lint:function(t,r,e,n,a){var d;if(t.currentNode().widgetType!=="expression")return;const i=t.currentNode().id;if(!i)return;const s=(d=a==null?void 0:a.widgets)==null?void 0:d[i];if(!s)return;const o=s.options.answerForms,l=s.options.buttonSets;for(const m of o)for(const[h,b]of Object.entries(Fr))if(m.value.includes(h)&&!l.includes(b))return Pr(h,b)}}),Ur=y.makeRule({name:"extra-content-spacing",selector:"paragraph",pattern:/\s+$/,applies:function(t){return(t==null?void 0:t.contentType)==="article"},message:"No extra whitespace at the end of content blocks."}),$r=y.makeRule({name:"heading-level-1",severity:y.Severity.WARNING,selector:"heading",lint:function(t,r,e,n){if(e[0].level===1)return`Don't use level-1 headings: Begin headings with two or more # characters.`}}),Mr=y.makeRule({name:"heading-level-skip",severity:y.Severity.WARNING,selector:"heading ~ heading",lint:function(t,r,e,n){const a=e[1],i=e[0];if(a.level>i.level+1)return`Skipped heading level: this heading is level ${a.level} but the previous heading was level ${i.level}`}}),Dr=y.makeRule({name:"heading-sentence-case",severity:y.Severity.GUIDELINE,selector:"heading",pattern:/^\W*[a-z]/,message:`First letter is lowercase: @@ -41,13 +41,13 @@ The table header has ${i} cells, but Row ${o+1} has ${s[o]} cells.`}}),mt=y.makeRule({name:"unbalanced-code-delimiters",severity:y.Severity.ERROR,pattern:/[`~]+/,message:`Unbalanced code delimiters: code blocks should begin and end with the same type and number of delimiters`}),gt=y.makeRule({name:"unescaped-dollar",severity:y.Severity.ERROR,selector:"unescapedDollar",message:`Unescaped dollar sign: Dollar signs must appear in pairs or be escaped as \\$`}),ht=y.makeRule({name:"widget-in-table",severity:y.Severity.BULK_WARNING,selector:"table widget",message:`Widget in table: -do not put widgets inside of tables.`}),pt=[Nr,zr,Lr,_r,Sr,$r,Ur,Mr,Dr,Gr,Kr,Br,Qr,Jr,Zr,et,rt,tt,nt,at,it,st,ot,ut,dt,yt,gt,ht,lt,mt,Xr,Yr];class V{constructor(r){this.root=r}static isNode(r){return r&&typeof r=="object"&&typeof r.type=="string"}static isTextNode(r){return V.isNode(r)&&r.type==="text"&&typeof r.content=="string"}traverse(r){this._traverse(this.root,new je(this.root),r)}_traverse(r,e,n){let a="";if(V.isNode(r)){const i=r;e._containers.push(i),e._ancestors.push(i),typeof i.content=="string"&&(a=i.content),Object.keys(i).forEach(o=>{if(o==="type")return;const l=i[o];l&&typeof l=="object"&&(e._indexes.push(o),a+=this._traverse(l,e,n),e._indexes.pop())}),e._currentNode=e._ancestors.pop(),e._containers.pop(),n(i,e,a)}else if(Array.isArray(r)){const i=r;e._containers.push(i);let s=0;for(;se+1?r[e+1]:null}previousSibling(){const r=this._containers.top();if(!r||!Array.isArray(r))return null;const e=this._indexes.top();return e>0?r[e-1]:null}removeNextSibling(){const r=this._containers.top();if(r&&Array.isArray(r)){const e=this._indexes.top();if(r.length>e+1)return r.splice(e+1,1)[0]}return null}replace(...r){const e=this._containers.top();if(!e)throw new E("Can't replace the root of the tree",A.Internal);if(Array.isArray(e)){const n=this._indexes.top();e.splice(n,1,...r),this._indexes.pop(),this._indexes.push(n+r.length-1)}else{const n=this._indexes.top();r.length===0?delete e[n]:r.length===1?e[n]=r[0]:e[n]=r}}hasPreviousSibling(){return Array.isArray(this._containers.top())&&this._indexes.top()>0}goToPreviousSibling(){if(!this.hasPreviousSibling())throw new E("goToPreviousSibling(): node has no previous sibling",A.Internal);this._currentNode=this.previousSibling();const r=this._indexes.pop();this._indexes.push(r-1)}hasParent(){return this._ancestors.size()!==0}goToParent(){if(!this.hasParent())throw new E("goToParent(): node has no ancestor",A.NotAllowed);for(this._currentNode=this._ancestors.pop();this._containers.size()&&this._containers.top()[this._indexes.top()]!==this._currentNode;)this._containers.pop(),this._indexes.pop()}clone(){const r=new je(this.root);return r._currentNode=this._currentNode,r._containers=this._containers.clone(),r._indexes=this._indexes.clone(),r._ancestors=this._ancestors.clone(),r}equals(r){return this.root===r.root&&this._currentNode===r._currentNode&&this._containers.equals(r._containers)&&this._indexes.equals(r._indexes)&&this._ancestors.equals(r._ancestors)}}class Q{constructor(r){this.stack=r?r.slice(0):[]}push(r){this.stack.push(r)}pop(){return this.stack.pop()}top(){return this.stack[this.stack.length-1]}values(){return this.stack.slice(0)}size(){return this.stack.length}toString(){return this.stack.toString()}clone(){return new Q(this.stack)}equals(r){if(!r||!r.stack||r.stack.length!==this.stack.length)return!1;for(let e=0;et.severity{if(V.isTextNode(l)){let h=d.nextSibling();for(;V.isTextNode(h);)l.content+=h.content,d.removeNextSibling(),h=d.nextSibling()}});let s=[],o=!1;return i.traverse((l,d,m)=>{const h=[],b=n.filter(p=>p.applies(r)),k=[...r.stack];k.push(l.type);const R={...r,stack:k.join(".")};if(b.forEach(p=>{const w=p.check(l,d,m,R);w&&((w.start||w.end)&&(w.target=m.substring(w.start,w.end)),a.push(w),e&&h.push(w))}),!!e&&(l.type==="table"?(s.length&&h.push(...s),o=!1,s=[]):o||(o=d.ancestors().some(p=>p.type==="table")),o&&h.length&&s.push(...h),h.length))if(h.sort((p,w)=>p.severity-w.severity),l.type!=="text"||h.length>1)d.replace({type:"lint",content:l,message:h.map(p=>p.message).join(` +do not put widgets inside of tables.`}),pt=[zr,Nr,Lr,_r,Sr,Ur,$r,Mr,Dr,Gr,Kr,Br,Qr,Jr,Zr,et,rt,tt,nt,at,it,st,ot,ut,dt,yt,gt,ht,lt,mt,Xr,Yr];class V{constructor(r){this.root=r}static isNode(r){return r&&typeof r=="object"&&typeof r.type=="string"}static isTextNode(r){return V.isNode(r)&&r.type==="text"&&typeof r.content=="string"}traverse(r){this._traverse(this.root,new je(this.root),r)}_traverse(r,e,n){let a="";if(V.isNode(r)){const i=r;e._containers.push(i),e._ancestors.push(i),typeof i.content=="string"&&(a=i.content),Object.keys(i).forEach(o=>{if(o==="type")return;const l=i[o];l&&typeof l=="object"&&(e._indexes.push(o),a+=this._traverse(l,e,n),e._indexes.pop())}),e._currentNode=e._ancestors.pop(),e._containers.pop(),n(i,e,a)}else if(Array.isArray(r)){const i=r;e._containers.push(i);let s=0;for(;se+1?r[e+1]:null}previousSibling(){const r=this._containers.top();if(!r||!Array.isArray(r))return null;const e=this._indexes.top();return e>0?r[e-1]:null}removeNextSibling(){const r=this._containers.top();if(r&&Array.isArray(r)){const e=this._indexes.top();if(r.length>e+1)return r.splice(e+1,1)[0]}return null}replace(...r){const e=this._containers.top();if(!e)throw new E("Can't replace the root of the tree",A.Internal);if(Array.isArray(e)){const n=this._indexes.top();e.splice(n,1,...r),this._indexes.pop(),this._indexes.push(n+r.length-1)}else{const n=this._indexes.top();r.length===0?delete e[n]:r.length===1?e[n]=r[0]:e[n]=r}}hasPreviousSibling(){return Array.isArray(this._containers.top())&&this._indexes.top()>0}goToPreviousSibling(){if(!this.hasPreviousSibling())throw new E("goToPreviousSibling(): node has no previous sibling",A.Internal);this._currentNode=this.previousSibling();const r=this._indexes.pop();this._indexes.push(r-1)}hasParent(){return this._ancestors.size()!==0}goToParent(){if(!this.hasParent())throw new E("goToParent(): node has no ancestor",A.NotAllowed);for(this._currentNode=this._ancestors.pop();this._containers.size()&&this._containers.top()[this._indexes.top()]!==this._currentNode;)this._containers.pop(),this._indexes.pop()}clone(){const r=new je(this.root);return r._currentNode=this._currentNode,r._containers=this._containers.clone(),r._indexes=this._indexes.clone(),r._ancestors=this._ancestors.clone(),r}equals(r){return this.root===r.root&&this._currentNode===r._currentNode&&this._containers.equals(r._containers)&&this._indexes.equals(r._indexes)&&this._ancestors.equals(r._ancestors)}}class Q{constructor(r){this.stack=r?r.slice(0):[]}push(r){this.stack.push(r)}pop(){return this.stack.pop()}top(){return this.stack[this.stack.length-1]}values(){return this.stack.slice(0)}size(){return this.stack.length}toString(){return this.stack.toString()}clone(){return new Q(this.stack)}equals(r){if(!r||!r.stack||r.stack.length!==this.stack.length)return!1;for(let e=0;et.severity{if(V.isTextNode(l)){let h=d.nextSibling();for(;V.isTextNode(h);)l.content+=h.content,d.removeNextSibling(),h=d.nextSibling()}});let s=[],o=!1;return i.traverse((l,d,m)=>{const h=[],b=n.filter(p=>p.applies(r)),k=[...r.stack];k.push(l.type);const R={...r,stack:k.join(".")};if(b.forEach(p=>{const w=p.check(l,d,m,R);w&&((w.start||w.end)&&(w.target=m.substring(w.start,w.end)),a.push(w),e&&h.push(w))}),!!e&&(l.type==="table"?(s.length&&h.push(...s),o=!1,s=[]):o||(o=d.ancestors().some(p=>p.type==="table")),o&&h.length&&s.push(...h),h.length))if(h.sort((p,w)=>p.severity-w.severity),l.type!=="text"||h.length>1)d.replace({type:"lint",content:l,message:h.map(p=>p.message).join(` -`),ruleName:h[0].rule,blockHighlight:R.blockHighlight,insideTable:o,severity:h[0].severity});else{const p=l.content,w=h[0],O=w.start||0,j=w.end||p.length,P=p.substring(0,O),x=p.substring(O,j),ee=p.substring(j),re=[];P&&re.push({type:"text",content:P}),re.push({type:"lint",content:{type:"text",content:x},message:w.message,ruleName:w.rule,insideTable:o,severity:w.severity}),ee&&re.push({type:"text",content:ee}),d.replace(...re)}}),a}function xt(t,r){const e=t.stack||[];return{...t,stack:e.concat(r)}}const Wt={activeDefinitionId:null,setActiveDefinitionId:()=>{}},Ke=z.createContext(Wt);class qe extends z.Component{constructor(){super(...arguments),this.state={activeDefinitionId:null},this.setActiveDefinitionId=r=>{this.setState(e=>({activeDefinitionId:r}))}}render(){const{children:r}=this.props,{activeDefinitionId:e}=this.state,{setActiveDefinitionId:n}=this;return g(Ke.Provider,{value:{activeDefinitionId:e,setActiveDefinitionId:n},children:r})}}const ia=Ke.Consumer;qe.__docgenInfo={description:"",methods:[{name:"setActiveDefinitionId",docblock:null,modifiers:[],params:[{name:"activeDefinitionId",optional:!0,type:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}]}}],returns:{type:{name:"void"}}}],displayName:"DefinitionProvider",props:{children:{required:!0,tsType:{name:"any"},description:""}}};class N extends z.Component{constructor(r){super(r),this.state={error:""}}componentDidCatch(r,e){var n,a;this.setState({error:r.toString()}),(a=(n=this.props).onError)==null||a.call(n,r,e),G.error("Unhandled Perseus error: "+r.message,A.Internal,{cause:r,loggedMetadata:{componentStack:e&&"componentStack"in e?e.componentStack:"componentStack not provided",...this.props.metadata}})}render(){return this.state.error?ye("svg",{height:"16",width:"16",viewBox:"0 0 16 16",role:"img",children:[g("title",{children:"Rendering Error!"}),g("path",{d:"m8 16c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm0-3c0.55 0 1-0.45 1-1s-0.45-1-1-1-1 0.45-1 1 0.45 1 1 1zm0-9c-0.55 0-1 0.45-1 1v4c0 0.55.45 1 1 1s1-0.45 1-1v-4c0-0.55-0.45-1-1-1z",fill:"#d92916",fillRule:"evenodd"})]}):this.props.children}}N.__docgenInfo={description:"",methods:[],displayName:"ErrorBoundary",props:{children:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},metadata:{required:!1,tsType:{name:"Record",elements:[{name:"string"},{name:"string"}],raw:"Record"},description:""},onError:{required:!1,tsType:{name:"signature",type:"function",raw:"(error: Error, info: any) => void",signature:{arguments:[{type:{name:"Error"},name:"error"},{type:{name:"any"},name:"info"}],return:{name:"void"}}},description:""}}};function jt(){}class It{constructor(r,e,n,a){this._track=i=>{this._tracked&&!this.setting||(this._tracked=!0,this.trackApi({type:this.widgetType,id:this.widgetID,...i}))},r?(this._tracked=!1,this.trackApi=r,this.widgetType=e,this.widgetID=n,this.setting=a,this.track=this._track):this.track=jt}}const Ct="@khanacademy/simple-markdown",Et="__lib_version__";We(Ct,Et);var Nt=/\r\n?/g,zt=/\t/g,Lt=/\f/g,Be=function(t){return t.replace(Nt,` -`).replace(Lt,"").replace(zt," ")},Xe=function(t,r){var e=t||{};if(r!=null)for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n]);return e},Ye=function(t,r){var e=Object.keys(t).filter(function(s){var o=t[s];if(o==null||o.match==null)return!1;var l=o.order;return(typeof l!="number"||!isFinite(l))&&typeof console<"u"&&console.warn("simple-markdown: Invalid order for rule `"+s+"`: "+String(l)),!0});e.sort(function(s,o){var l=t[s],d=t[o],m=l.order,h=d.order;if(m!==h)return m-h;var b=l.quality?0:1,k=d.quality?0:1;return b!==k?b-k:so?1:0});var n,a=function(s,o){var l=[];for(o=o||n,n=o;s;){var d=null,m=null,h=null,b=NaN,k=0,R=e[0],p=t[R];do{var w=p.order,O=o.prevCapture==null?"":o.prevCapture[0],j=p.match(s,o,O);if(j){var P=p.quality?p.quality(j,o,O):0;P<=b||(d=R,m=p,h=j,b=P)}k++,R=e[k],p=t[R]}while(p&&(!h||p.order===w&&p.quality));if(m==null||h==null)throw new Error("Could not find a matching rule for the below content. The rule with highest `order` should always match content provided to it. Check the definition of `match` for '"+e[e.length-1]+`'. It seems to not match the following source: +`),ruleName:h[0].rule,blockHighlight:R.blockHighlight,insideTable:o,severity:h[0].severity});else{const p=l.content,w=h[0],O=w.start||0,j=w.end||p.length,P=p.substring(0,O),x=p.substring(O,j),ee=p.substring(j),re=[];P&&re.push({type:"text",content:P}),re.push({type:"lint",content:{type:"text",content:x},message:w.message,ruleName:w.rule,insideTable:o,severity:w.severity}),ee&&re.push({type:"text",content:ee}),d.replace(...re)}}),a}function xt(t,r){const e=t.stack||[];return{...t,stack:e.concat(r)}}const Wt={activeDefinitionId:null,setActiveDefinitionId:()=>{}},Ke=N.createContext(Wt);class qe extends N.Component{constructor(){super(...arguments),this.state={activeDefinitionId:null},this.setActiveDefinitionId=r=>{this.setState(e=>({activeDefinitionId:r}))}}render(){const{children:r}=this.props,{activeDefinitionId:e}=this.state,{setActiveDefinitionId:n}=this;return g(Ke.Provider,{value:{activeDefinitionId:e,setActiveDefinitionId:n},children:r})}}const ia=Ke.Consumer;qe.__docgenInfo={description:"",methods:[{name:"setActiveDefinitionId",docblock:null,modifiers:[],params:[{name:"activeDefinitionId",optional:!0,type:{name:"union",raw:"string | null",elements:[{name:"string"},{name:"null"}]}}],returns:{type:{name:"void"}}}],displayName:"DefinitionProvider",props:{children:{required:!0,tsType:{name:"any"},description:""}}};class z extends N.Component{constructor(r){super(r),this.state={error:""}}componentDidCatch(r,e){var n,a;this.setState({error:r.toString()}),(a=(n=this.props).onError)==null||a.call(n,r,e),G.error("Unhandled Perseus error: "+r.message,A.Internal,{cause:r,loggedMetadata:{componentStack:e&&"componentStack"in e?e.componentStack:"componentStack not provided",...this.props.metadata}})}render(){return this.state.error?ye("svg",{height:"16",width:"16",viewBox:"0 0 16 16",role:"img",children:[g("title",{children:"Rendering Error!"}),g("path",{d:"m8 16c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm0-3c0.55 0 1-0.45 1-1s-0.45-1-1-1-1 0.45-1 1 0.45 1 1 1zm0-9c-0.55 0-1 0.45-1 1v4c0 0.55.45 1 1 1s1-0.45 1-1v-4c0-0.55-0.45-1-1-1z",fill:"#d92916",fillRule:"evenodd"})]}):this.props.children}}z.__docgenInfo={description:"",methods:[],displayName:"ErrorBoundary",props:{children:{required:!0,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},metadata:{required:!1,tsType:{name:"Record",elements:[{name:"string"},{name:"string"}],raw:"Record"},description:""},onError:{required:!1,tsType:{name:"signature",type:"function",raw:"(error: Error, info: any) => void",signature:{arguments:[{type:{name:"Error"},name:"error"},{type:{name:"any"},name:"info"}],return:{name:"void"}}},description:""}}};function jt(){}class It{constructor(r,e,n,a){this._track=i=>{this._tracked&&!this.setting||(this._tracked=!0,this.trackApi({type:this.widgetType,id:this.widgetID,...i}))},r?(this._tracked=!1,this.trackApi=r,this.widgetType=e,this.widgetID=n,this.setting=a,this.track=this._track):this.track=jt}}const Ct="@khanacademy/simple-markdown",Et="__lib_version__";We(Ct,Et);var zt=/\r\n?/g,Nt=/\t/g,Lt=/\f/g,Be=function(t){return t.replace(zt,` +`).replace(Lt,"").replace(Nt," ")},Xe=function(t,r){var e=t||{};if(r!=null)for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n]);return e},Ye=function(t,r){var e=Object.keys(t).filter(function(s){var o=t[s];if(o==null||o.match==null)return!1;var l=o.order;return(typeof l!="number"||!isFinite(l))&&typeof console<"u"&&console.warn("simple-markdown: Invalid order for rule `"+s+"`: "+String(l)),!0});e.sort(function(s,o){var l=t[s],d=t[o],m=l.order,h=d.order;if(m!==h)return m-h;var b=l.quality?0:1,k=d.quality?0:1;return b!==k?b-k:so?1:0});var n,a=function(s,o){var l=[];for(o=o||n,n=o;s;){var d=null,m=null,h=null,b=NaN,k=0,R=e[0],p=t[R];do{var w=p.order,O=o.prevCapture==null?"":o.prevCapture[0],j=p.match(s,o,O);if(j){var P=p.quality?p.quality(j,o,O):0;P<=b||(d=R,m=p,h=j,b=P)}k++,R=e[k],p=t[R]}while(p&&(!h||p.order===w&&p.quality));if(m==null||h==null)throw new Error("Could not find a matching rule for the below content. The rule with highest `order` should always match content provided to it. Check the definition of `match` for '"+e[e.length-1]+`'. It seems to not match the following source: `+s);if(h.index)throw new Error("`match` must return a capture starting at index 0 (the current parse index). Did you forget a ^ at the start of the RegExp?");var x=m.parse(h,a,o);if(Array.isArray(x))Array.prototype.push.apply(l,x);else{if(x==null||typeof x!="object")throw new Error(`parse() function returned invalid parse result: '${x}'`);x.type==null&&(x.type=d),l.push(x)}o.prevCapture=h,s=s.substring(o.prevCapture[0].length)}return l},i=function(s,o){return n=Xe(o,r),!n.inline&&!n.disableAutoBlockNewlines&&(s=s+` -`),n.prevCapture=null,a(Be(s),n)};return i},W=function(t){var r=function(e,n,a){return n.inline?t.exec(e):null};return r.regex=t,r},C=function(t){var r=function(e,n){return n.inline?null:t.exec(e)};return r.regex=t,r},Te=function(t){var r=function(e,n){return t.exec(e)};return r.regex=t,r},_t=typeof Symbol=="function"&&Symbol.for&&Symbol.for("react.element")||60103,f=function(t,r,e){var n={$$typeof:_t,type:t,key:r??void 0,ref:null,props:e,_owner:null};return n},q=function(t,r,e,n){e=e||{},n=typeof n<"u"?n:!0;var a="";for(var i in e){var s=e[i];Object.prototype.hasOwnProperty.call(e,i)&&s&&(a+=" "+H(i)+'="'+H(s)+'"')}var o="<"+t+a+">";return n?o+r+"":o},Pt={},X=function(t){if(t==null)return null;try{var r=new URL(t,"https://localhost").protocol;if(r.indexOf("javascript:")===0||r.indexOf("vbscript:")===0||r.indexOf("data:")===0)return null}catch{return null}return t},Ft=/[<>&"']/g,St={"<":"<",">":">","&":"&",'"':""","'":"'","/":"/","`":"`"},H=function(t){return String(t).replace(Ft,function(r){return St[r]})},$t=/\\([^0-9A-Za-z\s])/g,Re=function(t){return t.replace($t,"$1")},le=function(t,r,e){var n=e.inline||!1;e.inline=!0;var a=t(r,e);return e.inline=n,a},Ut=function(t,r,e){var n=e.inline||!1;e.inline=!1;var a=t(r+` +`),n.prevCapture=null,a(Be(s),n)};return i},W=function(t){var r=function(e,n,a){return n.inline?t.exec(e):null};return r.regex=t,r},C=function(t){var r=function(e,n){return n.inline?null:t.exec(e)};return r.regex=t,r},Te=function(t){var r=function(e,n){return t.exec(e)};return r.regex=t,r},_t=typeof Symbol=="function"&&Symbol.for&&Symbol.for("react.element")||60103,f=function(t,r,e){var n={$$typeof:_t,type:t,key:r??void 0,ref:null,props:e,_owner:null};return n},q=function(t,r,e,n){e=e||{},n=typeof n<"u"?n:!0;var a="";for(var i in e){var s=e[i];Object.prototype.hasOwnProperty.call(e,i)&&s&&(a+=" "+H(i)+'="'+H(s)+'"')}var o="<"+t+a+">";return n?o+r+"":o},Pt={},X=function(t){if(t==null)return null;try{var r=new URL(t,"https://localhost").protocol;if(r.indexOf("javascript:")===0||r.indexOf("vbscript:")===0||r.indexOf("data:")===0)return null}catch{return null}return t},Ft=/[<>&"']/g,St={"<":"<",">":">","&":"&",'"':""","'":"'","/":"/","`":"`"},H=function(t){return String(t).replace(Ft,function(r){return St[r]})},Ut=/\\([^0-9A-Za-z\s])/g,Re=function(t){return t.replace(Ut,"$1")},le=function(t,r,e){var n=e.inline||!1;e.inline=!0;var a=t(r,e);return e.inline=n,a},$t=function(t,r,e){var n=e.inline||!1;e.inline=!1;var a=t(r+` `,e);return e.inline=n,a},ne=function(t,r,e){return{content:le(r,t[1],e)}},ve=function(){return{}},ue="(?:[*+-]|\\d+\\.)",Qe="( *)("+ue+") +",Le=new RegExp("^"+Qe),Mt=new RegExp(Qe+"[^\\n]*(?:\\n(?!\\1"+ue+` )[^\\n]*)*( |$)`,"gm"),Je=/\n{2,}$/,Dt=/^ (?= *`)|(` *) $/g,Vt=Je,_e=/ *\n+$/,Ht=new RegExp("^( *)("+ue+`) [\\s\\S]+?(?: @@ -60,19 +60,19 @@ do not put widgets inside of tables.`}),pt=[Nr,zr,Lr,_r,Sr,$r,Ur,Mr,Dr,Gr,Kr,Br, `)):(e.inline=!0,x=R.replace(_e,""));var ee=r(x,e);return e.inline=j,e._list=P,ee});return{ordered:a,start:i,items:l}},react:function(t,r,e){var n=t.ordered?"ol":"ul";return f(n,e.key,{start:t.start,children:t.items.map(function(a,i){return f("li",""+i,{children:r(a,e)})})})},html:function(t,r,e){var n=t.items.map(function(s){return q("li",r(s,e))}).join(""),a=t.ordered?"ol":"ul",i={start:t.start};return q(a,n,i)}},def:{order:v++,match:C(/^ *\[([^\]]+)\]: *]*)>?(?: +["(]([^\n]+)[")])? *\n(?: *\n)*/),parse:function(t,r,e){var n=t[1].replace(/\s+/g," ").toLowerCase(),a=t[2],i=t[3];return e._refs&&e._refs[n]&&e._refs[n].forEach(function(s){s.target=a,s.title=i}),e._defs=e._defs||{},e._defs[n]={target:a,title:i},{def:n,target:a,title:i}},react:function(){return null},html:function(){return""}},table:{order:v++,match:C(ae.TABLE_REGEX),parse:ae.parseTable,react:function(t,r,e){var n=function(s){return t.align[s]==null?{}:{textAlign:t.align[s]}},a=t.header.map(function(s,o){return f("th",""+o,{style:n(o),scope:"col",children:r(s,e)})}),i=t.cells.map(function(s,o){return f("tr",""+o,{children:s.map(function(l,d){return f("td",""+d,{style:n(d),children:r(l,e)})})})});return f("table",e.key,{children:[f("thead","thead",{children:f("tr",null,{children:a})}),f("tbody","tbody",{children:i})]})},html:function(t,r,e){var n=function(l){return t.align[l]==null?"":"text-align:"+t.align[l]+";"},a=t.header.map(function(l,d){return q("th",r(l,e),{style:n(d),scope:"col"})}).join(""),i=t.cells.map(function(l){var d=l.map(function(m,h){return q("td",r(m,e),{style:n(h)})}).join("");return q("tr",d)}).join(""),s=q("thead",q("tr",a)),o=q("tbody",i);return q("table",s+o)}},newline:{order:v++,match:C(/^(?:\n *)*\n/),parse:ve,react:function(t,r,e){return` `},html:function(t,r,e){return` -`}},paragraph:{order:v++,match:C(/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/),parse:ne,react:function(t,r,e){return f("div",e.key,{className:"paragraph",children:r(t.content,e)})},html:function(t,r,e){var n={class:"paragraph"};return q("div",r(t.content,e),n)}},escape:{order:v++,match:W(/^\\([^0-9A-Za-z\s])/),parse:function(t,r,e){return{type:"text",content:t[1]}},react:null,html:null},tableSeparator:{order:v++,match:function(t,r){return r.inTable?/^ *\| */.exec(t):null},parse:function(){return{type:"tableSeparator"}},react:function(){return" | "},html:function(){return" | "}},autolink:{order:v++,match:W(/^<([^: >]+:\/[^ >]+)>/),parse:function(t,r,e){return{type:"link",content:[{type:"text",content:t[1]}],target:t[1]}},react:null,html:null},mailto:{order:v++,match:W(/^<([^ >]+@[^ >]+)>/),parse:function(t,r,e){var n=t[1],a=t[1];return Kt.test(a)||(a="mailto:"+a),{type:"link",content:[{type:"text",content:n}],target:a}},react:null,html:null},url:{order:v++,match:W(/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/),parse:function(t,r,e){return{type:"link",content:[{type:"text",content:t[1]}],target:t[1],title:void 0}},react:null,html:null},link:{order:v++,match:W(new RegExp("^\\[("+ie+")\\]\\("+Pe+"\\)")),parse:function(t,r,e){var n={content:r(t[1],e),target:Re(t[2]),title:t[3]};return n},react:function(t,r,e){return f("a",e.key,{href:X(t.target),title:t.title,children:r(t.content,e)})},html:function(t,r,e){var n={href:X(t.target),title:t.title};return q("a",r(t.content,e),n)}},image:{order:v++,match:W(new RegExp("^!\\[("+ie+")\\]\\("+Pe+"\\)")),parse:function(t,r,e){var n={alt:t[1],target:Re(t[2]),title:t[3]};return n},react:function(t,r,e){return f("img",e.key,{src:X(t.target),alt:t.alt,title:t.title})},html:function(t,r,e){var n={src:X(t.target),alt:t.alt,title:t.title};return q("img","",n,!1)}},reflink:{order:v++,match:W(new RegExp("^\\[("+ie+")\\]\\s*\\[([^\\]]*)\\]")),parse:function(t,r,e){return Fe(t,e,{type:"link",content:r(t[1],e)})},react:null,html:null},refimage:{order:v++,match:W(new RegExp("^!\\[("+ie+")\\]\\s*\\[([^\\]]*)\\]")),parse:function(t,r,e){return Fe(t,e,{type:"image",alt:t[1]})},react:null,html:null},em:{order:v,match:W(new RegExp("^\\b_((?:__|\\\\[\\s\\S]|[^\\\\_])+?)_\\b|^\\*(?=\\S)((?:\\*\\*|\\\\[\\s\\S]|\\s+(?:\\\\[\\s\\S]|[^\\s\\*\\\\]|\\*\\*)|[^\\s\\*\\\\])+?)\\*(?!\\*)")),quality:function(t){return t[0].length+.2},parse:function(t,r,e){return{content:r(t[2]||t[1],e)}},react:function(t,r,e){return f("em",e.key,{children:r(t.content,e)})},html:function(t,r,e){return q("em",r(t.content,e))}},strong:{order:v,match:W(/^\*\*((?:\\[\s\S]|[^\\])+?)\*\*(?!\*)/),quality:function(t){return t[0].length+.1},parse:ne,react:function(t,r,e){return f("strong",e.key,{children:r(t.content,e)})},html:function(t,r,e){return q("strong",r(t.content,e))}},u:{order:v++,match:W(/^__((?:\\[\s\S]|[^\\])+?)__(?!_)/),quality:function(t){return t[0].length},parse:ne,react:function(t,r,e){return f("u",e.key,{children:r(t.content,e)})},html:function(t,r,e){return q("u",r(t.content,e))}},del:{order:v++,match:W(/^~~(?=\S)((?:\\[\s\S]|~(?!~)|[^\s~\\]|\s(?!~~))+?)~~/),parse:ne,react:function(t,r,e){return f("del",e.key,{children:r(t.content,e)})},html:function(t,r,e){return q("del",r(t.content,e))}},inlineCode:{order:v++,match:W(/^(`+)([\s\S]*?[^`])\1(?!`)/),parse:function(t,r,e){return{content:t[2].replace(Dt,"$1")}},react:function(t,r,e){return f("code",e.key,{children:t.content})},html:function(t,r,e){return q("code",H(t.content))}},br:{order:v++,match:Te(/^ {2,}\n/),parse:ve,react:function(t,r,e){return f("br",e.key,Pt)},html:function(t,r,e){return"
"}},text:{order:v++,match:Te(/^[\s\S]+?(?=[^0-9A-Za-z\s\u00c0-\uffff]|\n\n| {2,}\n|\w+:\S|$)/),parse:function(t,r,e){return{content:t[0]}},react:function(t,r,e){return t.content},html:function(t,r,e){return H(t.content)}}},Bt=function(t,r){!r&&typeof console<"u"&&console.warn("simple-markdown ruleOutput should take 'react' or 'html' as the second argument.");var e=function(n,a,i){return t[n.type][r](n,a,i)};return e},Xt=function(t){var r=function(e,n){if(n=n||{},Array.isArray(e)){for(var a=n.key,i=[],s=null,o=0;o({type:"codeBlock",lang:t[2]||void 0,content:t[3]})},paragraph:{match:c.defaultRules.paragraph.match,order:2,parse:(t,r,e)=>({content:t[1]})}},rn=c.parserFor(en),tn=t=>{const r=t.replace(/^\n\s*\n/,"")+` +`}},paragraph:{order:v++,match:C(/^((?:[^\n]|\n(?! *\n))+)(?:\n *)+\n/),parse:ne,react:function(t,r,e){return f("div",e.key,{className:"paragraph",children:r(t.content,e)})},html:function(t,r,e){var n={class:"paragraph"};return q("div",r(t.content,e),n)}},escape:{order:v++,match:W(/^\\([^0-9A-Za-z\s])/),parse:function(t,r,e){return{type:"text",content:t[1]}},react:null,html:null},tableSeparator:{order:v++,match:function(t,r){return r.inTable?/^ *\| */.exec(t):null},parse:function(){return{type:"tableSeparator"}},react:function(){return" | "},html:function(){return" | "}},autolink:{order:v++,match:W(/^<([^: >]+:\/[^ >]+)>/),parse:function(t,r,e){return{type:"link",content:[{type:"text",content:t[1]}],target:t[1]}},react:null,html:null},mailto:{order:v++,match:W(/^<([^ >]+@[^ >]+)>/),parse:function(t,r,e){var n=t[1],a=t[1];return Kt.test(a)||(a="mailto:"+a),{type:"link",content:[{type:"text",content:n}],target:a}},react:null,html:null},url:{order:v++,match:W(/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/),parse:function(t,r,e){return{type:"link",content:[{type:"text",content:t[1]}],target:t[1],title:void 0}},react:null,html:null},link:{order:v++,match:W(new RegExp("^\\[("+ie+")\\]\\("+Pe+"\\)")),parse:function(t,r,e){var n={content:r(t[1],e),target:Re(t[2]),title:t[3]};return n},react:function(t,r,e){return f("a",e.key,{href:X(t.target),title:t.title,children:r(t.content,e)})},html:function(t,r,e){var n={href:X(t.target),title:t.title};return q("a",r(t.content,e),n)}},image:{order:v++,match:W(new RegExp("^!\\[("+ie+")\\]\\("+Pe+"\\)")),parse:function(t,r,e){var n={alt:t[1],target:Re(t[2]),title:t[3]};return n},react:function(t,r,e){return f("img",e.key,{src:X(t.target),alt:t.alt,title:t.title})},html:function(t,r,e){var n={src:X(t.target),alt:t.alt,title:t.title};return q("img","",n,!1)}},reflink:{order:v++,match:W(new RegExp("^\\[("+ie+")\\]\\s*\\[([^\\]]*)\\]")),parse:function(t,r,e){return Fe(t,e,{type:"link",content:r(t[1],e)})},react:null,html:null},refimage:{order:v++,match:W(new RegExp("^!\\[("+ie+")\\]\\s*\\[([^\\]]*)\\]")),parse:function(t,r,e){return Fe(t,e,{type:"image",alt:t[1]})},react:null,html:null},em:{order:v,match:W(new RegExp("^\\b_((?:__|\\\\[\\s\\S]|[^\\\\_])+?)_\\b|^\\*(?=\\S)((?:\\*\\*|\\\\[\\s\\S]|\\s+(?:\\\\[\\s\\S]|[^\\s\\*\\\\]|\\*\\*)|[^\\s\\*\\\\])+?)\\*(?!\\*)")),quality:function(t){return t[0].length+.2},parse:function(t,r,e){return{content:r(t[2]||t[1],e)}},react:function(t,r,e){return f("em",e.key,{children:r(t.content,e)})},html:function(t,r,e){return q("em",r(t.content,e))}},strong:{order:v,match:W(/^\*\*((?:\\[\s\S]|[^\\])+?)\*\*(?!\*)/),quality:function(t){return t[0].length+.1},parse:ne,react:function(t,r,e){return f("strong",e.key,{children:r(t.content,e)})},html:function(t,r,e){return q("strong",r(t.content,e))}},u:{order:v++,match:W(/^__((?:\\[\s\S]|[^\\])+?)__(?!_)/),quality:function(t){return t[0].length},parse:ne,react:function(t,r,e){return f("u",e.key,{children:r(t.content,e)})},html:function(t,r,e){return q("u",r(t.content,e))}},del:{order:v++,match:W(/^~~(?=\S)((?:\\[\s\S]|~(?!~)|[^\s~\\]|\s(?!~~))+?)~~/),parse:ne,react:function(t,r,e){return f("del",e.key,{children:r(t.content,e)})},html:function(t,r,e){return q("del",r(t.content,e))}},inlineCode:{order:v++,match:W(/^(`+)([\s\S]*?[^`])\1(?!`)/),parse:function(t,r,e){return{content:t[2].replace(Dt,"$1")}},react:function(t,r,e){return f("code",e.key,{children:t.content})},html:function(t,r,e){return q("code",H(t.content))}},br:{order:v++,match:Te(/^ {2,}\n/),parse:ve,react:function(t,r,e){return f("br",e.key,Pt)},html:function(t,r,e){return"
"}},text:{order:v++,match:Te(/^[\s\S]+?(?=[^0-9A-Za-z\s\u00c0-\uffff]|\n\n| {2,}\n|\w+:\S|$)/),parse:function(t,r,e){return{content:t[0]}},react:function(t,r,e){return t.content},html:function(t,r,e){return H(t.content)}}},Bt=function(t,r){!r&&typeof console<"u"&&console.warn("simple-markdown ruleOutput should take 'react' or 'html' as the second argument.");var e=function(n,a,i){return t[n.type][r](n,a,i)};return e},Xt=function(t){var r=function(e,n){if(n=n||{},Array.isArray(e)){for(var a=n.key,i=[],s=null,o=0;o({type:"codeBlock",lang:t[2]||void 0,content:t[3]})},paragraph:{match:c.defaultRules.paragraph.match,order:2,parse:(t,r,e)=>({content:t[1]})}},rn=c.parserFor(en),tn=t=>{const r=t.replace(/^\n\s*\n/,"")+` `;return rn(r,{inline:!1}).map(e=>e.content)},nn=t=>t.join(` -`),$e={parseToArray:tn,joinFromArray:nn},an="@khanacademy/pure-markdown",sn="__lib_version__";We(an,sn);const on=/^\[\[\u2603 (([a-z-]+) ([0-9]+))\]\]/,rr=(t,r,e)=>{const n=t.length;let a=0;if(e){if(r.inline)return null;for(;a{const n=t.length;let a=0;if(e){if(r.inline)return null;for(;arr(t,r,!1),un=(t,r)=>rr(t,r,!0),dn=new RegExp("^\\|\\| +(.*) +\\|\\| *\\n("+c.defaultRules.nptable.match.regex.source.substring(1)+")"),yn=c.blockRegex(/^(crwdns.*)\n\s*\n/),I={...c.defaultRules,columns:{order:-2,match:c.blockRegex(/^([\s\S]*\n\n)={5,}\n\n([\s\S]*)/),parse:(t,r,e)=>({col1:r(t[1],e),col2:r(t[2],e)})},crowdinId:{order:-1,match:(t,r,e)=>r.isJipt?yn(t,r,e):null,parse:(t,r,e)=>({id:t[1]})},titledTable:{order:c.defaultRules.nptable.order-.5,match:c.blockRegex(dn),parse:(t,r,e)=>{const n=c.parseInline(r,t[1],e),a=t.slice(2),i=c.defaultRules.nptable.parse(a,r,e);return{title:n,table:i}}},widget:{order:c.defaultRules.link.order-.75,match:c.inlineRegex(on),parse:(t,r,e)=>({id:t[1],widgetType:t[2]})},blockMath:{order:c.defaultRules.codeBlock.order+.5,match:un,parse:(t,r,e)=>({content:t[1]})},math:{order:c.defaultRules.link.order-.25,match:ln,parse:(t,r,e)=>({content:t[1]})},unescapedDollar:{order:c.defaultRules.link.order-.24,match:c.inlineRegex(/^(?!\\)\$/),parse:(t,r,e)=>({})},fence:{...c.defaultRules.fence,parse:(t,r,e)=>{const n=c.defaultRules.fence.parse(t,r,e);return n.lang==="alt"?{type:"codeBlock",lang:"alt",content:r(n.content+` -`,e)}:n}},blockQuote:{...c.defaultRules.blockQuote,match:c.blockRegex(/^ *>[^\n]+(\n( *>)?[^\n]+)*\n{2,}/)},lint:{order:1e3,match:t=>null,parse:(t,r,e)=>({})}};c.parserFor(I);const J={...I,columns:{...I.columns,react:(t,r,e)=>ye("div",{className:"perseus-two-columns",children:[g("div",{className:"perseus-column",children:g("div",{className:"perseus-column-content",children:r(t.col1,e)})}),g("div",{className:"perseus-column",children:g("div",{className:"perseus-column-content",children:r(t.col2,e)})})]},e.key)},crowdinId:{...I.crowdinId,react:(t,r,e)=>t.id},table:{...I.table,react:function(t,r,e){const n=c.defaultRules.table.react(t,r,e);return e.isMobile?z.cloneElement(n,{tabIndex:0}):n}},titledTable:{...I.titledTable,react:(t,r,e)=>{var a;let n;if(!t.table)n="//invalid table//";else if(t.table.type==="lint")((a=t.table.content)==null?void 0:a.type)==="table"?n=J.lint.react({...t.table,content:{...t,table:t.table.content}},r,{...e,unwrapTitledTableContents:!0}):n=J.lint.react(t.table,r,e);else{const i=c.defaultRules.table.react(t.table,r,e),s=g("caption",{className:"perseus-table-title",children:r(t.title,e)},"caption");n=z.cloneElement(i,null,[s,...i.props.children])}return e.unwrapTitledTableContents?n:g("div",{className:"perseus-titled-table",children:n},e.key)}},widget:{...I.widget,react:(t,r,e)=>g("em",{children:`[Widget: ${t.id}]`},e.key)},blockMath:{...I.blockMath,react:(t,r,e)=>{const{TeX:n}=Y();return g(n,{children:t.content},e.key)}},math:{...I.math,react:(t,r,e)=>{const{TeX:n}=Y();return g(n,{children:t.content},e.key)}},unescapedDollar:{...I.unescapedDollar,react:(t,r,e)=>"$"},link:{...I.link,react:function(t,r,e){const n=c.defaultRules.link.react(t,r,e),a=n.props.href;let i=null;(a?a.match(/https?:\/\/[^\/]*khanacademy.org|^\//):!1)||(i="noopener noreferrer");const o={...n.props,target:"_blank",href:a,rel:i};return e.baseElements&&e.baseElements.Link?e.baseElements.Link(o):z.cloneElement(n,o)}},codeBlock:{...I.codeBlock,react:(t,r,e)=>t.lang==="alt"?g("div",{className:"perseus-markdown-alt perseus-sr-only",children:r(t.content,e)},e.key):c.defaultRules.codeBlock.react(t,r,e)},lint:{...I.lint,react:(t,r,e)=>g(wr,{message:t.message,ruleName:t.ruleName,inline:mn(t.content),blockHighlight:t.blockHighlight,insideTable:t.insideTable,severity:t.severity,children:r(t.content,e)})}};function mn(t){return!!(t&&t.type&&gn.hasOwnProperty(t.type))}const gn={text:!0,math:!0,unescapedDollar:!0,link:!0,img:!0,strong:!0,u:!0,em:!0,del:!0,code:!0},tr=c.parserFor(J),nr=(t,r)=>{const e=t+` +`,e)}:n}},blockQuote:{...c.defaultRules.blockQuote,match:c.blockRegex(/^ *>[^\n]+(\n( *>)?[^\n]+)*\n{2,}/)},lint:{order:1e3,match:t=>null,parse:(t,r,e)=>({})}};c.parserFor(I);const J={...I,columns:{...I.columns,react:(t,r,e)=>ye("div",{className:"perseus-two-columns",children:[g("div",{className:"perseus-column",children:g("div",{className:"perseus-column-content",children:r(t.col1,e)})}),g("div",{className:"perseus-column",children:g("div",{className:"perseus-column-content",children:r(t.col2,e)})})]},e.key)},crowdinId:{...I.crowdinId,react:(t,r,e)=>t.id},table:{...I.table,react:function(t,r,e){const n=c.defaultRules.table.react(t,r,e);return e.isMobile?N.cloneElement(n,{tabIndex:0}):n}},titledTable:{...I.titledTable,react:(t,r,e)=>{var a;let n;if(!t.table)n="//invalid table//";else if(t.table.type==="lint")((a=t.table.content)==null?void 0:a.type)==="table"?n=J.lint.react({...t.table,content:{...t,table:t.table.content}},r,{...e,unwrapTitledTableContents:!0}):n=J.lint.react(t.table,r,e);else{const i=c.defaultRules.table.react(t.table,r,e),s=g("caption",{className:"perseus-table-title",children:r(t.title,e)},"caption");n=N.cloneElement(i,null,[s,...i.props.children])}return e.unwrapTitledTableContents?n:g("div",{className:"perseus-titled-table",children:n},e.key)}},widget:{...I.widget,react:(t,r,e)=>g("em",{children:`[Widget: ${t.id}]`},e.key)},blockMath:{...I.blockMath,react:(t,r,e)=>{const{TeX:n}=Y();return g(n,{children:t.content},e.key)}},math:{...I.math,react:(t,r,e)=>{const{TeX:n}=Y();return g(n,{children:t.content},e.key)}},unescapedDollar:{...I.unescapedDollar,react:(t,r,e)=>"$"},link:{...I.link,react:function(t,r,e){const n=c.defaultRules.link.react(t,r,e),a=n.props.href;let i=null;(a?a.match(/https?:\/\/[^\/]*khanacademy.org|^\//):!1)||(i="noopener noreferrer");const o={...n.props,target:"_blank",href:a,rel:i};return e.baseElements&&e.baseElements.Link?e.baseElements.Link(o):N.cloneElement(n,o)}},codeBlock:{...I.codeBlock,react:(t,r,e)=>t.lang==="alt"?g("div",{className:"perseus-markdown-alt perseus-sr-only",children:r(t.content,e)},e.key):c.defaultRules.codeBlock.react(t,r,e)},lint:{...I.lint,react:(t,r,e)=>g(wr,{message:t.message,ruleName:t.ruleName,inline:mn(t.content),blockHighlight:t.blockHighlight,insideTable:t.insideTable,severity:t.severity,children:r(t.content,e)})}};function mn(t){return!!(t&&t.type&&gn.hasOwnProperty(t.type))}const gn={text:!0,math:!0,unescapedDollar:!0,link:!0,img:!0,strong:!0,u:!0,em:!0,del:!0,code:!0},tr=c.parserFor(J),nr=(t,r)=>{const e=t+` -`;return tr(e,{...r,inline:!1})},hn=(t,r)=>tr(t,{...r,inline:!0}),L=(t,r)=>{u.isArray(t)?u.each(t,e=>L(e,r)):u.isObject(t)&&(r(t),t.type==="table"?(L(t.header,r),L(t.cells,r)):t.type==="list"?L(t.items,r):t.type==="titledTable"?L(t.table,r):t.type==="columns"?(L(t.col1,r),L(t.col2,r)):u.isArray(t.content)&&L(t.content,r))},Oe=t=>{if(u.isArray(t))return u.flatten(u.map(t,Oe));if(t.content&&u.isString(t.content))return t.type.toLowerCase().indexOf("code")!==-1?["",t.content,""]:[t.content.replace(/\s+/g," ")];const r=u.chain(t).values().flatten().filter(n=>n!=null&&u.has(n,"type")).value();if(!r.length)return[];const e=Oe(r);if(t.type==="paragraph"&&e.length){e[0]=e[0].replace(/^\s+/,"");const n=e.length-1;e[n]=e[n].replace(/\s+$/,"")}return e},pn=t=>{const r=nr(t);return Oe(r).join("").length},U={characterCount:pn,traverseContent:L,parse:nr,parseInline:hn,reactFor:c.reactFor,ruleOutput:c.ruleOutput(J,"react"),basicOutput:c.reactFor(c.ruleOutput(J,"react")),sanitizeUrl:c.sanitizeUrl};class ar extends z.Component{render(){const r=this.props.className?"paragraph "+this.props.className:"paragraph";return g("div",{className:this.props.inline?this.props.className??void 0:r,"data-perseus-component-index":this.props.translationIndex,"data-perseus-paragraph-index":this.props.paragraphIndex,children:this.props.children})}}ar.__docgenInfo={description:"",methods:[],displayName:"QuestionParagraph",props:{className:{required:!1,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},translationIndex:{required:!0,tsType:{name:"number"},description:""},paragraphIndex:{required:!1,tsType:{name:"number"},description:""},children:{required:!1,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},inline:{required:!1,tsType:{name:"boolean"},description:""}}};const cn=1e3;class bn{constructor(){this.previousContent=null,this.runLinter=yr((r,e)=>{if(!(typeof KA>"u")&&r!==this.previousContent){if(this.previousContent=r,r===""){e([]);return}fetch("/api/internal/translations/lint_poentry?preview=1&lang=en",{headers:{"Content-Type":"application/json"},body:JSON.stringify({msgid:r,msgstr:r,format:"perseus_text",filename:""}),method:"POST"}).then(n=>n.status>=400?{status:"error",message:"Could not run i18n linter."}:n.json(),n=>({status:"error",message:"Could not run i18n linter."})).then(n=>{n.status==="error"?e(["Some part of this text makes it untranslatable. The specific message from the i18n linter was: "+n.message.replace(/\n/g," ")]):e([])})}},cn)}applyLintErrors(r,e){if(e.length){const n=e.join(` +`;return tr(e,{...r,inline:!1})},hn=(t,r)=>tr(t,{...r,inline:!0}),L=(t,r)=>{u.isArray(t)?u.each(t,e=>L(e,r)):u.isObject(t)&&(r(t),t.type==="table"?(L(t.header,r),L(t.cells,r)):t.type==="list"?L(t.items,r):t.type==="titledTable"?L(t.table,r):t.type==="columns"?(L(t.col1,r),L(t.col2,r)):u.isArray(t.content)&&L(t.content,r))},Oe=t=>{if(u.isArray(t))return u.flatten(u.map(t,Oe));if(t.content&&u.isString(t.content))return t.type.toLowerCase().indexOf("code")!==-1?["",t.content,""]:[t.content.replace(/\s+/g," ")];const r=u.chain(t).values().flatten().filter(n=>n!=null&&u.has(n,"type")).value();if(!r.length)return[];const e=Oe(r);if(t.type==="paragraph"&&e.length){e[0]=e[0].replace(/^\s+/,"");const n=e.length-1;e[n]=e[n].replace(/\s+$/,"")}return e},pn=t=>{const r=nr(t);return Oe(r).join("").length},$={characterCount:pn,traverseContent:L,parse:nr,parseInline:hn,reactFor:c.reactFor,ruleOutput:c.ruleOutput(J,"react"),basicOutput:c.reactFor(c.ruleOutput(J,"react")),sanitizeUrl:c.sanitizeUrl};class ar extends N.Component{render(){const r=this.props.className?"paragraph "+this.props.className:"paragraph";return g("div",{className:this.props.inline?this.props.className??void 0:r,"data-perseus-component-index":this.props.translationIndex,"data-perseus-paragraph-index":this.props.paragraphIndex,children:this.props.children})}}ar.__docgenInfo={description:"",methods:[],displayName:"QuestionParagraph",props:{className:{required:!1,tsType:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}]},description:""},translationIndex:{required:!0,tsType:{name:"number"},description:""},paragraphIndex:{required:!1,tsType:{name:"number"},description:""},children:{required:!1,tsType:{name:"ReactReactNode",raw:"React.ReactNode"},description:""},inline:{required:!1,tsType:{name:"boolean"},description:""}}};const cn=1e3;class bn{constructor(){this.previousContent=null,this.runLinter=yr((r,e)=>{if(!(typeof KA>"u")&&r!==this.previousContent){if(this.previousContent=r,r===""){e([]);return}fetch("/api/internal/translations/lint_poentry?preview=1&lang=en",{headers:{"Content-Type":"application/json"},body:JSON.stringify({msgid:r,msgstr:r,format:"perseus_text",filename:""}),method:"POST"}).then(n=>n.status>=400?{status:"error",message:"Could not run i18n linter."}:n.json(),n=>({status:"error",message:"Could not run i18n linter."})).then(n=>{n.status==="error"?e(["Some part of this text makes it untranslatable. The specific message from the i18n linter was: "+n.message.replace(/\n/g," ")]):e([])})}},cn)}applyLintErrors(r,e){if(e.length){const n=e.join(` -`);r.unshift({content:{type:"text",content:""},insideTable:!1,message:n,ruleName:"legacy-error",severity:y.Severity.ERROR,type:"lint"})}}}const vn=t=>t.replace(/\{align[*]?\}/g,"{aligned}").replace(/[\u00a0]/g," "),{interactiveSizes:se}=fr,wn=kr,fn=qr,S={SMALL:"small",MEDIUM:"medium",LARGE:"large",XLARGE:"xlarge"},ir=t=>t?t<=wn?S.SMALL:t<=fn?S.MEDIUM:S.LARGE:S.MEDIUM,kn=t=>t===S.SMALL?[se.defaultBoxSizeSmall,se.defaultBoxSizeSmall]:[se.defaultBoxSize,se.defaultBoxSize],sa=Object.freeze(Object.defineProperty({__proto__:null,containerSizeClass:S,getClassFromWidth:ir,getInteractiveBoxFromSizeClass:kn},Symbol.toStringTag,{value:"Module"})),Ue="block",qn=["default"],Tn=!1,Rn="",An=!1,T={},$={},sr=(t,r)=>{T[t]=r},oa=t=>{t.forEach(r=>{sr(r.name,r)}),En()},M=(t,r)=>{const e=T[r];if(!e){const n=`Failed to replace ${t} with ${r}`;throw new E(n,A.Internal)}sr(t,e)},la=()=>{M("transformer","deprecated-standin"),M("lights-puzzle","deprecated-standin"),M("reaction-diagram","deprecated-standin"),M("sequence","deprecated-standin"),M("simulator","deprecated-standin"),M("unit-input","deprecated-standin")},ua=t=>{t.forEach(r=>{if(!r.widgetName)throw new E(`Editor ${r.displayName} doesn't have a widgetName property`,A.Internal);$[r.widgetName]=r})},D=(t,r)=>{const e=$[r];if(!e&&G){const n=`Failed to replace editor ${t} with ${r}`;G.error(n,A.Internal);return}$[t]=e},da=()=>{D("transformer","deprecated-standin"),D("lights-puzzle","deprecated-standin"),D("reaction-diagram","deprecated-standin"),D("sequence","deprecated-standin"),D("simulator","deprecated-standin"),D("unit-input","deprecated-standin")},On=t=>{var r,e,n;return u.has(T,t)?(r=T[t])!=null&&r.getWidget?(n=(e=T[t]).getWidget)==null?void 0:n.call(e):T[t].widget:null},ya=t=>u.has($,t)?$[t]:null,xn=t=>{if(T[t])return T[t].version||{major:0,minor:0}},ma=()=>{const t={};return u.each(u.keys(T),function(r){t[r]=xn(r)}),t},ga=()=>u.pick(T,u.reject(u.keys(T),function(t){return T[t].hidden})),ha=()=>u.keys(T),Wn=t=>{const r=t.type;if(!u.isString(r))throw new E("widget type must be a string, but was: "+r,A.Internal);const e=T[r];if(e==null)return t;const n=t.version||{major:0,minor:0},a=e.version||{major:0,minor:0};if(n.major>a.major||n.major===a.major&&n.minor>a.minor)return t;let i=u.clone(t.options)||{};const s=e.propUpgrades||{};if(u.keys(i).length!==0)for(let m=n.major+1;m<=a.major;m++)s[String(m)]?i=s[String(m)](i):G.error("No upgrade found for widget. Cannot render.",A.Internal,{loggedMetadata:{type:r,fromMajorVersion:m-1,toMajorVersion:m}});i={...r in $?$[r].defaultProps:{},...i};let l=t.alignment;(l==null||l==="default")&&(l=In(r)[0]);let d=t.static;return d==null&&(d=Tn),u.extend({},t,{version:a,graded:t.graded!=null?t.graded:!0,alignment:l,static:d,options:i})},jn=(t,r,e)=>{const n=t.type,a=T[n];if(a==null)return t;let i;return t.static?i=Nn(n)||u.identity:i=a.transform||u.identity,i(t.options,r,e)},In=t=>{const r=T[t];return r&&r.supportedAlignments||qn},Cn=t=>{const r=T[t];let e;return r?(r.getDefaultAlignment?e=r.getDefaultAlignment():e=r.defaultAlignment,e||Ue):Ue},Me=["block","inline-block","inline","float-left","float-right","full-width"],En=()=>{u.each(T,function(t){if(t.defaultAlignment&&!u.contains(Me,t.defaultAlignment))throw new E("Widget '"+t.displayName+"' has an invalid defaultAlignment value: "+t.defaultAlignment,A.InvalidInput);if(t.supportedAlignments){const r=u.difference(t.supportedAlignments,Me);if(r.length)throw new E("Widget '"+t.displayName+"' has an invalid value for supportedAlignments: "+r.join(" "),A.InvalidInput)}})},pa=t=>{const r=T[t];return r&&r.staticTransform!=null},Nn=t=>{const r=T[t];return r&&r.staticTransform},zn=t=>{const r=T[t];return r&&r.tracking||Rn},Ln=t=>{const r=T[t];return r&&r.isLintable||An},Ee=class Ee extends z.Component{constructor(){super(...arguments),this.widgetRef=z.createRef(),this.state={sizeClass:S.MEDIUM,widgetProps:this.props.initialProps},this.getWidget=()=>this.widgetRef.current,this.replaceWidgetProps=r=>{this.setState({widgetProps:r})}}componentDidMount(){if(this.state.widgetProps.apiOptions.isMobile){const r=ke.findDOMNode(this).offsetWidth;this.setState({sizeClass:ir(r)})}}UNSAFE_componentWillReceiveProps(r){if(this.props.type!==r.type)throw new Error("WidgetContainer can't change widget type; set a different key instead to recreate the container.")}shouldComponentUpdate(r,e){return this.props.shouldHighlight!==r.shouldHighlight||this.props.type!==r.type||this.state.widgetProps!==e.widgetProps||this.state.sizeClass!==e.sizeClass}render(){let r=fe({"perseus-widget-container":!0,"widget-highlight":this.props.shouldHighlight,"widget-nohighlight":!this.props.shouldHighlight,"perseus-widget__definition":this.props.type==="definition"});const e=this.props.type,n=On(e);if(n==null)return console.warn(`Widget type '${e}' not found!`),g("div",{className:r});let a=this.state.widgetProps.alignment;a==="default"&&(a=Cn(e)),r+=" widget-"+a;const i=this.state.widgetProps.apiOptions,s=this.state.widgetProps.static||i.readOnly,o={position:"relative",overflow:"visible"},l={width:"100%",height:"100%",position:"absolute",top:0,left:0,zIndex:Tr},d=Ln(e)?this.props.linterContext:{...this.props.linterContext,highlightLint:!1};return g("div",{className:r,style:s?o:{},children:g(br.Consumer,{children:({analytics:m})=>ye(N,{metadata:{widget_type:e,widget_id:this.props.id},onError:()=>{m.onAnalyticsEvent({type:"perseus:widget-rendering-error",payload:{widgetType:e,widgetId:this.props.id}})},children:[g(n,{...this.state.widgetProps,linterContext:d,containerSizeClass:this.state.sizeClass,ref:this.widgetRef}),s&&g("div",{style:l})]})})})}};Ee.defaultProps={linterContext:Ge};let de=Ee;de.__docgenInfo={description:"",methods:[{name:"getWidget",docblock:null,modifiers:[],params:[],returns:null},{name:"replaceWidgetProps",docblock:null,modifiers:[],params:[{name:"newWidgetProps",optional:!1,type:null}],returns:null}],displayName:"WidgetContainer",props:{shouldHighlight:{required:!0,tsType:{name:"boolean"},description:""},type:{required:!0,tsType:{name:"string"},description:""},id:{required:!0,tsType:{name:"string"},description:""},initialProps:{required:!0,tsType:{name:"intersection",raw:`RenderProps & { +`);r.unshift({content:{type:"text",content:""},insideTable:!1,message:n,ruleName:"legacy-error",severity:y.Severity.ERROR,type:"lint"})}}}const vn=t=>t.replace(/\{align[*]?\}/g,"{aligned}").replace(/[\u00a0]/g," "),{interactiveSizes:se}=fr,wn=kr,fn=qr,S={SMALL:"small",MEDIUM:"medium",LARGE:"large",XLARGE:"xlarge"},ir=t=>t?t<=wn?S.SMALL:t<=fn?S.MEDIUM:S.LARGE:S.MEDIUM,kn=t=>t===S.SMALL?[se.defaultBoxSizeSmall,se.defaultBoxSizeSmall]:[se.defaultBoxSize,se.defaultBoxSize],sa=Object.freeze(Object.defineProperty({__proto__:null,containerSizeClass:S,getClassFromWidth:ir,getInteractiveBoxFromSizeClass:kn},Symbol.toStringTag,{value:"Module"})),$e="block",qn=["default"],Tn=!1,Rn="",An=!1,T={},U={},sr=(t,r)=>{T[t]=r},oa=t=>{t.forEach(r=>{sr(r.name,r)}),En()},M=(t,r)=>{const e=T[r];if(!e){const n=`Failed to replace ${t} with ${r}`;throw new E(n,A.Internal)}sr(t,e)},la=()=>{M("transformer","deprecated-standin"),M("lights-puzzle","deprecated-standin"),M("reaction-diagram","deprecated-standin"),M("sequence","deprecated-standin"),M("simulator","deprecated-standin"),M("unit-input","deprecated-standin")},ua=t=>{t.forEach(r=>{if(!r.widgetName)throw new E(`Editor ${r.displayName} doesn't have a widgetName property`,A.Internal);U[r.widgetName]=r})},D=(t,r)=>{const e=U[r];if(!e&&G){const n=`Failed to replace editor ${t} with ${r}`;G.error(n,A.Internal);return}U[t]=e},da=()=>{D("transformer","deprecated-standin"),D("lights-puzzle","deprecated-standin"),D("reaction-diagram","deprecated-standin"),D("sequence","deprecated-standin"),D("simulator","deprecated-standin"),D("unit-input","deprecated-standin")},On=t=>{var r,e,n;return u.has(T,t)?(r=T[t])!=null&&r.getWidget?(n=(e=T[t]).getWidget)==null?void 0:n.call(e):T[t].widget:null},ya=t=>u.has(U,t)?U[t]:null,xn=t=>{if(T[t])return T[t].version||{major:0,minor:0}},ma=()=>{const t={};return u.each(u.keys(T),function(r){t[r]=xn(r)}),t},ga=()=>u.pick(T,u.reject(u.keys(T),function(t){return T[t].hidden})),ha=()=>u.keys(T),Wn=t=>{const r=t.type;if(!u.isString(r))throw new E("widget type must be a string, but was: "+r,A.Internal);const e=T[r];if(e==null)return t;const n=t.version||{major:0,minor:0},a=e.version||{major:0,minor:0};if(n.major>a.major||n.major===a.major&&n.minor>a.minor)return t;let i=u.clone(t.options)||{};const s=e.propUpgrades||{};if(u.keys(i).length!==0)for(let m=n.major+1;m<=a.major;m++)s[String(m)]?i=s[String(m)](i):G.error("No upgrade found for widget. Cannot render.",A.Internal,{loggedMetadata:{type:r,fromMajorVersion:m-1,toMajorVersion:m}});i={...r in U?U[r].defaultProps:{},...i};let l=t.alignment;(l==null||l==="default")&&(l=In(r)[0]);let d=t.static;return d==null&&(d=Tn),u.extend({},t,{version:a,graded:t.graded!=null?t.graded:!0,alignment:l,static:d,options:i})},jn=(t,r,e)=>{const n=t.type,a=T[n];if(a==null)return t;let i;return t.static?i=zn(n)||u.identity:i=a.transform||u.identity,i(t.options,r,e)},In=t=>{const r=T[t];return r&&r.supportedAlignments||qn},Cn=t=>{const r=T[t];let e;return r?(r.getDefaultAlignment?e=r.getDefaultAlignment():e=r.defaultAlignment,e||$e):$e},Me=["block","inline-block","inline","float-left","float-right","full-width"],En=()=>{u.each(T,function(t){if(t.defaultAlignment&&!u.contains(Me,t.defaultAlignment))throw new E("Widget '"+t.displayName+"' has an invalid defaultAlignment value: "+t.defaultAlignment,A.InvalidInput);if(t.supportedAlignments){const r=u.difference(t.supportedAlignments,Me);if(r.length)throw new E("Widget '"+t.displayName+"' has an invalid value for supportedAlignments: "+r.join(" "),A.InvalidInput)}})},pa=t=>{const r=T[t];return r&&r.staticTransform!=null},zn=t=>{const r=T[t];return r&&r.staticTransform},Nn=t=>{const r=T[t];return r&&r.tracking||Rn},Ln=t=>{const r=T[t];return r&&r.isLintable||An},Ee=class Ee extends N.Component{constructor(){super(...arguments),this.widgetRef=N.createRef(),this.state={sizeClass:S.MEDIUM,widgetProps:this.props.initialProps},this.getWidget=()=>this.widgetRef.current,this.replaceWidgetProps=r=>{this.setState({widgetProps:r})}}componentDidMount(){if(this.state.widgetProps.apiOptions.isMobile){const r=ke.findDOMNode(this).offsetWidth;this.setState({sizeClass:ir(r)})}}UNSAFE_componentWillReceiveProps(r){if(this.props.type!==r.type)throw new Error("WidgetContainer can't change widget type; set a different key instead to recreate the container.")}shouldComponentUpdate(r,e){return this.props.shouldHighlight!==r.shouldHighlight||this.props.type!==r.type||this.state.widgetProps!==e.widgetProps||this.state.sizeClass!==e.sizeClass}render(){let r=fe({"perseus-widget-container":!0,"widget-highlight":this.props.shouldHighlight,"widget-nohighlight":!this.props.shouldHighlight,"perseus-widget__definition":this.props.type==="definition"});const e=this.props.type,n=On(e);if(n==null)return console.warn(`Widget type '${e}' not found!`),g("div",{className:r});let a=this.state.widgetProps.alignment;a==="default"&&(a=Cn(e)),r+=" widget-"+a;const i=this.state.widgetProps.apiOptions,s=this.state.widgetProps.static||i.readOnly,o={position:"relative",overflow:"visible"},l={width:"100%",height:"100%",position:"absolute",top:0,left:0,zIndex:Tr},d=Ln(e)?this.props.linterContext:{...this.props.linterContext,highlightLint:!1};return g("div",{className:r,style:s?o:{},children:g(br.Consumer,{children:({analytics:m})=>ye(z,{metadata:{widget_type:e,widget_id:this.props.id},onError:()=>{m.onAnalyticsEvent({type:"perseus:widget-rendering-error",payload:{widgetType:e,widgetId:this.props.id}})},children:[g(n,{...this.state.widgetProps,linterContext:d,containerSizeClass:this.state.sizeClass,ref:this.widgetRef}),s&&g("div",{style:l})]})})})}};Ee.defaultProps={linterContext:Ge};let de=Ee;de.__docgenInfo={description:"",methods:[{name:"getWidget",docblock:null,modifiers:[],params:[],returns:null},{name:"replaceWidgetProps",docblock:null,modifiers:[],params:[{name:"newWidgetProps",optional:!1,type:null}],returns:null}],displayName:"WidgetContainer",props:{shouldHighlight:{required:!0,tsType:{name:"boolean"},description:""},type:{required:!0,tsType:{name:"string"},description:""},id:{required:!0,tsType:{name:"string"},description:""},initialProps:{required:!0,tsType:{name:"intersection",raw:`RenderProps & { // provided by renderer.jsx#getWidgetProps() widgetId: string; alignment: string | null | undefined; @@ -83,7 +83,7 @@ do not put widgets inside of tables.`}),pt=[Nr,zr,Lr,_r,Sr,$r,Ur,Mr,Dr,Gr,Kr,Br, questionCompleted?: boolean; onFocus: (blurPath: FocusPath) => void; onBlur: (blurPath: FocusPath) => void; - findWidgets: (arg1: FilterCriterion) => ReadonlyArray; + findWidgets: (criterion: FilterCriterion) => ReadonlyArray; reviewModeRubric: Rubric; onChange: ChangeHandler; // This is slightly different from the \`trackInteraction\` function in @@ -106,7 +106,7 @@ do not put widgets inside of tables.`}),pt=[Nr,zr,Lr,_r,Sr,$r,Ur,Mr,Dr,Gr,Kr,Br, questionCompleted?: boolean; onFocus: (blurPath: FocusPath) => void; onBlur: (blurPath: FocusPath) => void; - findWidgets: (arg1: FilterCriterion) => ReadonlyArray; + findWidgets: (criterion: FilterCriterion) => ReadonlyArray; reviewModeRubric: Rubric; onChange: ChangeHandler; // This is slightly different from the \`trackInteraction\` function in @@ -415,7 +415,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -459,7 +459,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -503,7 +503,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -547,7 +547,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -591,7 +591,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -635,7 +635,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -679,7 +679,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -723,7 +723,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -767,7 +767,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -811,7 +811,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -855,7 +855,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -899,7 +899,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -943,7 +943,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -987,7 +987,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1031,7 +1031,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1075,7 +1075,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1119,7 +1119,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1163,7 +1163,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1207,7 +1207,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1251,7 +1251,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1295,7 +1295,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1339,7 +1339,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1383,7 +1383,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1427,7 +1427,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1471,7 +1471,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1515,7 +1515,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1559,7 +1559,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1603,7 +1603,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1647,7 +1647,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1691,7 +1691,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1735,7 +1735,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1779,7 +1779,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -1823,7 +1823,7 @@ Add values to the relevant array to create new flags.`}]},required:!1},descripti major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!1},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1},name:"widgets"}],return:{name:"void"}},required:!1},description:`This is a callback function that returns all of the Widget props after they have been transformed by the widget's transform function. This is useful for when we need to know how a widget has shuffled its the available choices.`}]}}],raw:`Readonly<{ @@ -1997,56 +1997,12 @@ the available choices.`}]}}],raw:`Readonly<{ >; showAlignmentOptions: NonNullable; } ->`,required:!0}},{key:"keypadElement",value:{name:"any",required:!1}},{key:"questionCompleted",value:{name:"boolean",required:!1}},{key:"onFocus",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"onBlur",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"findWidgets",value:{name:"signature",type:"function",raw:"(arg1: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string +>`,required:!0}},{key:"keypadElement",value:{name:"any",required:!1}},{key:"questionCompleted",value:{name:"boolean",required:!1}},{key:"onFocus",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"onBlur",value:{name:"signature",type:"function",raw:"(blurPath: FocusPath) => void",signature:{arguments:[{type:{name:"union",raw:"ReadonlyArray | null | undefined",elements:[{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"null"},{name:"undefined"}]},name:"blurPath"}],return:{name:"void"}},required:!0}},{key:"findWidgets",value:{name:"signature",type:"function",raw:"(criterion: FilterCriterion) => ReadonlyArray",signature:{arguments:[{type:{name:"union",raw:`| string | (( id: string, widgetInfo: PerseusWidget, widget?: Widget | null | undefined, - ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"arg1"}],return:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}],raw:"ReadonlyArray"}},required:!0}},{key:"reviewModeRubric",value:{name:"union",raw:`| PerseusCategorizerWidgetOptions + ) => boolean)`,elements:[{name:"string"},{name:"unknown"}]},name:"criterion"}],return:{name:"ReadonlyArray",elements:[{name:"Widget"}],raw:"ReadonlyArray"}},required:!0}},{key:"reviewModeRubric",value:{name:"union",raw:`| PerseusCategorizerWidgetOptions | PerseusCSProgramWidgetOptions | PerseusDefinitionWidgetOptions | PerseusDropdownWidgetOptions @@ -2195,7 +2151,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2239,7 +2195,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2283,7 +2239,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2327,7 +2283,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2371,7 +2327,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2415,7 +2371,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2459,7 +2415,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2503,7 +2459,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2547,7 +2503,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2591,7 +2547,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2635,7 +2591,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2679,7 +2635,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2723,7 +2679,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2767,7 +2723,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2811,7 +2767,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2855,7 +2811,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2899,7 +2855,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2943,7 +2899,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -2987,7 +2943,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3031,7 +2987,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3075,7 +3031,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3119,7 +3075,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3163,7 +3119,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3207,7 +3163,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3251,7 +3207,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3295,7 +3251,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3339,7 +3295,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3383,7 +3339,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3427,7 +3383,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3471,7 +3427,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3515,7 +3471,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3559,7 +3515,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3603,7 +3559,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!1}},{key:"static",value:{name:"boolean",required:!0}}]}},{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}},{key:"static",value:{name:"boolean",required:!0}}]}},{name:"signature",type:"object",raw:`{ // The expression forms the answer may come in answerForms: ReadonlyArray; // Different buttons sets that can show in the expression. Options are "basic", "basic+div", "trig", "prealgebra", "logarithms", "basic relations", "advanced relations" @@ -3729,7 +3685,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3773,7 +3729,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3817,7 +3773,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3861,7 +3817,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3905,7 +3861,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3949,7 +3905,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -3993,7 +3949,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4037,7 +3993,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4081,7 +4037,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4125,7 +4081,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4169,7 +4125,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4213,7 +4169,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4257,7 +4213,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4301,7 +4257,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4345,7 +4301,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4389,7 +4345,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4433,7 +4389,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4477,7 +4433,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4521,7 +4477,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4565,7 +4521,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4609,7 +4565,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4653,7 +4609,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4697,7 +4653,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4741,7 +4697,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4785,7 +4741,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4829,7 +4785,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4873,7 +4829,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4917,7 +4873,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -4961,7 +4917,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5005,7 +4961,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5049,7 +5005,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5093,7 +5049,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5137,7 +5093,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!1}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ [key: string]: PerseusImageDetail; }`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ // The width of the image @@ -5188,7 +5144,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5232,7 +5188,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5276,7 +5232,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5320,7 +5276,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5364,7 +5320,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5408,7 +5364,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5452,7 +5408,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5496,7 +5452,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5540,7 +5496,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5584,7 +5540,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5628,7 +5584,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5672,7 +5628,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5716,7 +5672,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5760,7 +5716,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5804,7 +5760,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5848,7 +5804,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5892,7 +5848,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5936,7 +5892,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -5980,7 +5936,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6024,7 +5980,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6068,7 +6024,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6112,7 +6068,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6156,7 +6112,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6200,7 +6156,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6244,7 +6200,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6288,7 +6244,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6332,7 +6288,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6376,7 +6332,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6420,7 +6376,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6464,7 +6420,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6508,7 +6464,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6552,7 +6508,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6596,7 +6552,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!1}},{key:"widgetEnabled",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}},{key:"immutableWidgets",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}},{key:"widgetEnabled",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}},{key:"immutableWidgets",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ [key: string]: PerseusImageDetail; }`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ // The width of the image @@ -6682,7 +6638,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6726,7 +6682,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6770,7 +6726,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6814,7 +6770,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6858,7 +6814,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6902,7 +6858,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6946,7 +6902,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -6990,7 +6946,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7034,7 +6990,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7078,7 +7034,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7122,7 +7078,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7166,7 +7122,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7210,7 +7166,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7254,7 +7210,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7298,7 +7254,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7342,7 +7298,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7386,7 +7342,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7430,7 +7386,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7474,7 +7430,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7518,7 +7474,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7562,7 +7518,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7606,7 +7562,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7650,7 +7606,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7694,7 +7650,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7738,7 +7694,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7782,7 +7738,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7826,7 +7782,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7870,7 +7826,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7914,7 +7870,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -7958,7 +7914,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8002,7 +7958,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8046,7 +8002,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8090,7 +8046,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!1}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ [key: string]: PerseusImageDetail; }`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ // The width of the image @@ -8141,7 +8097,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8185,7 +8141,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8229,7 +8185,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8273,7 +8229,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8317,7 +8273,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8361,7 +8317,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8405,7 +8361,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8449,7 +8405,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8493,7 +8449,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8537,7 +8493,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8581,7 +8537,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8625,7 +8581,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8669,7 +8625,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8713,7 +8669,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8757,7 +8713,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8801,7 +8757,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8845,7 +8801,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8889,7 +8845,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8933,7 +8889,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -8977,7 +8933,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9021,7 +8977,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9065,7 +9021,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9109,7 +9065,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9153,7 +9109,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9197,7 +9153,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9241,7 +9197,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9285,7 +9241,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9329,7 +9285,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9373,7 +9329,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9417,7 +9373,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9461,7 +9417,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9505,7 +9461,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -9549,7 +9505,7 @@ the available choices.`}]}}],raw:`Readonly<{ major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!1}},{key:"widgetEnabled",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}},{key:"immutableWidgets",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}},{key:"widgetEnabled",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}},{key:"immutableWidgets",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ [key: string]: PerseusImageDetail; }`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ // The width of the image @@ -10819,7 +10775,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10863,7 +10819,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10907,7 +10863,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10951,7 +10907,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -10995,7 +10951,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11039,7 +10995,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11083,7 +11039,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11127,7 +11083,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11171,7 +11127,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11215,7 +11171,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11259,7 +11215,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11303,7 +11259,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11347,7 +11303,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11391,7 +11347,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11435,7 +11391,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11479,7 +11435,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11523,7 +11479,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11567,7 +11523,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11611,7 +11567,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11655,7 +11611,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11699,7 +11655,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11743,7 +11699,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11787,7 +11743,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11831,7 +11787,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11875,7 +11831,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11919,7 +11875,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -11963,7 +11919,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12007,7 +11963,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12051,7 +12007,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12095,7 +12051,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12139,7 +12095,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12183,7 +12139,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12227,7 +12183,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!1}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ [key: string]: PerseusImageDetail; }`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ // The width of the image @@ -12294,7 +12250,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12338,7 +12294,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12382,7 +12338,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12426,7 +12382,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12470,7 +12426,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12514,7 +12470,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12558,7 +12514,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12602,7 +12558,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12646,7 +12602,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12690,7 +12646,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12734,7 +12690,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12778,7 +12734,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12822,7 +12778,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12866,7 +12822,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12910,7 +12866,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12954,7 +12910,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -12998,7 +12954,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13042,7 +12998,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13086,7 +13042,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13130,7 +13086,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13174,7 +13130,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13218,7 +13174,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13262,7 +13218,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13306,7 +13262,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13350,7 +13306,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13394,7 +13350,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13438,7 +13394,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13482,7 +13438,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13526,7 +13482,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13570,7 +13526,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13614,7 +13570,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13658,7 +13614,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13702,7 +13658,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!1}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ [key: string]: PerseusImageDetail; }`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ // The width of the image @@ -13769,7 +13725,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13813,7 +13769,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13857,7 +13813,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13901,7 +13857,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13945,7 +13901,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -13989,7 +13945,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14033,7 +13989,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14077,7 +14033,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14121,7 +14077,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14165,7 +14121,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14209,7 +14165,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14253,7 +14209,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14297,7 +14253,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14341,7 +14297,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14385,7 +14341,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14429,7 +14385,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14473,7 +14429,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14517,7 +14473,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14561,7 +14517,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14605,7 +14561,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14649,7 +14605,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14693,7 +14649,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14737,7 +14693,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14781,7 +14737,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14825,7 +14781,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14869,7 +14825,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14913,7 +14869,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -14957,7 +14913,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15001,7 +14957,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15045,7 +15001,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15089,7 +15045,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15133,7 +15089,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15177,7 +15133,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!1}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ [key: string]: PerseusImageDetail; }`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ // The width of the image @@ -15322,7 +15278,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15366,7 +15322,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15410,7 +15366,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15454,7 +15410,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15498,7 +15454,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15542,7 +15498,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15586,7 +15542,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15630,7 +15586,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15674,7 +15630,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15718,7 +15674,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15762,7 +15718,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15806,7 +15762,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15850,7 +15806,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15894,7 +15850,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15938,7 +15894,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -15982,7 +15938,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16026,7 +15982,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16070,7 +16026,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16114,7 +16070,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16158,7 +16114,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16202,7 +16158,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16246,7 +16202,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16290,7 +16246,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16334,7 +16290,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16378,7 +16334,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16422,7 +16378,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16466,7 +16422,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16510,7 +16466,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16554,7 +16510,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16598,7 +16554,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16642,7 +16598,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16686,7 +16642,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -16730,7 +16686,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!1}}]}}],raw:"ReadonlyArray",required:!0}},{key:"hasNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"countChoices",value:{name:"boolean",required:!1}},{key:"randomize",value:{name:"boolean",required:!1}},{key:"multipleSelect",value:{name:"boolean",required:!1}},{key:"deselectEnabled",value:{name:"boolean",required:!1}},{key:"onePerLine",value:{name:"boolean",required:!1}},{key:"displayCount",value:{name:"any",required:!1}},{key:"noneOfTheAbove",value:{name:"literal",value:"false",required:!1}}]}},{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}}]}}],raw:"ReadonlyArray",required:!0}},{key:"hasNoneOfTheAbove",value:{name:"boolean",required:!1}},{key:"countChoices",value:{name:"boolean",required:!1}},{key:"randomize",value:{name:"boolean",required:!1}},{key:"multipleSelect",value:{name:"boolean",required:!1}},{key:"deselectEnabled",value:{name:"boolean",required:!1}},{key:"onePerLine",value:{name:"boolean",required:!1}},{key:"displayCount",value:{name:"any",required:!1}},{key:"noneOfTheAbove",value:{name:"literal",value:"false",required:!1}}]}},{name:"signature",type:"object",raw:`{ value: string; }`,signature:{properties:[{key:"value",value:{name:"string",required:!0}}]}},{name:"signature",type:"object",raw:`{ // Translatable Text; The correct answer (in the correct order). The user will see the cards in a randomized order. @@ -16876,139 +16832,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ - // The "type" of widget which will define what the Options field looks like - type: Type; - // Whether this widget is displayed with the values and is immutable. For display only - // NOTE: perseus_data.go says this is required even though it isn't necessary. - static?: boolean; - // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) - // Default: true - graded?: boolean; - // The HTML alignment of the widget. "default" or "block" - // NOTE: perseus_data.go says this is required even though it isn't necessary. - alignment?: string; - // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details - options: Options; - // Only used by interactive child widgets (line, point, etc) to identify the components - // NOTE: perseus_data.go says this is required even though it isn't necessary. - key?: number; - // The version of the widget data spec. Used to differentiate between newer and older content data. - // NOTE: perseus_data.go says this is required even though it isn't necessary. - version?: Version; -}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ - // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] - items: ReadonlyArray; - // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] - categories: ReadonlyArray; - // Whether the items should be randemized - randomizeItems: boolean; - // Whether this widget is displayed with the results and immutable - static: boolean; - // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] - values: ReadonlyArray; - // Whether we should highlight i18n linter errors found on this widget - highlightLint?: boolean; - // Internal editor configuration. Can be ignored by consumers. - linterContext?: PerseusLinterContext; -}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ - contentType: string; - paths: ReadonlyArray; - stack: ReadonlyArray; -}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ - // The major part of the version - major: number; - // The minor part of the version - minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `cs-program ${number}`]: CSProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`cs-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17052,7 +16876,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `definition ${number}`]: DefinitionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`definition ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17096,7 +16920,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `dropdown ${number}`]: DropdownWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`dropdown ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17140,7 +16964,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `explanation ${number}`]: ExplanationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`explanation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17184,7 +17008,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `expression ${number}`]: ExpressionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`expression ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17228,7 +17052,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `grapher ${number}`]: GrapherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`grapher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17272,7 +17096,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `group ${number}`]: GroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17316,7 +17140,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group ${number}`]: GradedGroupWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17360,7 +17184,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `graded-group-set ${number}`]: GradedGroupSetWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`graded-group-set ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17404,7 +17228,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `iframe ${number}`]: IFrameWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`iframe ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17448,7 +17272,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `image ${number}`]: ImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17492,7 +17316,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `input-number ${number}`]: InputNumberWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`input-number ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17536,7 +17360,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interaction ${number}`]: InteractionWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interaction ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17580,7 +17404,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `interactive-graph ${number}`]: InteractiveGraphWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`interactive-graph ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17624,7 +17448,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `label-image ${number}`]: LabelImageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`label-image ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17668,7 +17492,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matcher ${number}`]: MatcherWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matcher ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17712,7 +17536,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `matrix ${number}`]: MatrixWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`matrix ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17756,7 +17580,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `measurer ${number}`]: MeasurerWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`measurer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17800,7 +17624,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `molecule-renderer ${number}`]: MoleculeRendererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`molecule-renderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17844,7 +17668,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `number-line ${number}`]: NumberLineWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`number-line ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17888,7 +17712,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `numeric-input ${number}`]: NumericInputWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`numeric-input ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17932,7 +17756,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `orderer ${number}`]: OrdererWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`orderer ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -17976,7 +17800,4223 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage ${number}`]: PassageWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `passage-ref-target ${number}`]: PassageRefWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`passage-ref-target ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `phet-simulation ${number}`]: PhetSimulationWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`phet-simulation ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}}]}}],required:!1}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [key: string]: PerseusImageDetail; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + // The width of the image + width: number; + // the height of the image + height: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ + /** + * When \`true\`, causes the previous hint to be replaced with this hint when + * displayed. When \`false\`, the previous hint remains visible when this one + * is displayed. This allows for hints that build upon each other. + */ + replace?: boolean; +}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ + _multi: ItemTree; +}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C +| H +| T +// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. +| ArrayNode +| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ + // TODO(mdr): When we first drafted the multi-item feature, we named + // content nodes "item" nodes, and later decided the term was + // ambiguous and switched to "content". But we're temporarily keeping + // support for the "item" string when inferring item shape, so that we + // don't crash on multi-items we've already created - but all new + // content nodes will be generated with the "content" string. + // + // Code blocks that enable this legacy support are greppable with the + // keyword #LegacyContentNode. + __type: "content" | "item"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ + __type: "hint"; + // Perseus has default values for these fields, so they're all optional. + content?: string | null | undefined; + images?: ImageDict | null | undefined; + widgets?: WidgetDict | null | undefined; + replace?: boolean | null | undefined; +}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [url: string]: Dimensions; +}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ + width?: number; + height?: number; +}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ + [name: string]: PerseusWidget; +}`,signature:{properties:[{key:{name:"string"},value:{name:"union",raw:`| CategorizerWidget +| CSProgramWidget +| DefinitionWidget +| DropdownWidget +| ExplanationWidget +| ExpressionWidget +| GradedGroupSetWidget +| GradedGroupWidget +| GrapherWidget +| GroupWidget +| IFrameWidget +| ImageWidget +| InputNumberWidget +| InteractionWidget +| InteractiveGraphWidget +| LabelImageWidget +| MatcherWidget +| MatrixWidget +| MeasurerWidget +| MoleculeRendererWidget +| NumberLineWidget +| NumericInputWidget +| OrdererWidget +| PassageRefWidget +| PassageWidget +| PhetSimulationWidget +| PlotterWidget +| PythonProgramWidget +| RadioWidget +| RefTargetWidget +| SorterWidget +| TableWidget +| VideoWidget +| AutoCorrectWidget`,elements:[{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18020,7 +22060,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `plotter ${number}`]: PlotterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`plotter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18064,7 +22104,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `python-program ${number}`]: PythonProgramWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`python-program ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18108,7 +22148,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `radio ${number}`]: RadioWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`radio ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18152,7 +22192,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `sorter ${number}`]: SorterWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`sorter ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18196,7 +22236,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `table ${number}`]: TableWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`table ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18240,7 +22280,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}},{name:"signature",type:"object",raw:"{\n [key in `video ${number}`]: VideoWidget;\n}",signature:{properties:[{key:{name:"literal",value:"`video ${number}`",required:!0},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18284,23 +22324,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]}}],required:!1}},{key:"metadata",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [key: string]: PerseusImageDetail; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - // The width of the image - width: number; - // the height of the image - height: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!0}},{key:"height",value:{name:"number",required:!0}}]},required:!0}}]},required:!0}}]}},{name:"signature",type:"object",raw:`{ - /** - * When \`true\`, causes the previous hint to be replaced with this hint when - * displayed. When \`false\`, the previous hint remains visible when this one - * is displayed. This allows for hints that build upon each other. - */ - replace?: boolean; -}`,signature:{properties:[{key:"replace",value:{name:"boolean",required:!1},description:"When `true`, causes the previous hint to be replaced with this hint when\ndisplayed. When `false`, the previous hint remains visible when this one\nis displayed. This allows for hints that build upon each other."}]}}]}],raw:"ReadonlyArray",required:!1}},{key:"replace",value:{name:"boolean",required:!1}},{key:"content",value:{name:"string",required:!1}},{key:"widgets",value:{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18344,46 +22368,51 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1}},{key:"images",value:{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1}},{key:"question",value:{name:"any",required:!1}},{key:"answerArea",value:{name:"union",raw:"PerseusAnswerArea | null",elements:[{name:"Record",elements:[{name:"unknown[number]",raw:"(typeof ItemExtras)[number]"},{name:"boolean"}],raw:"Record<(typeof ItemExtras)[number], boolean>"},{name:"null"}],required:!1}},{key:"itemDataVersion",value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ // The major part of the version major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}},{key:"item",value:{name:"signature",type:"object",raw:`{ - _multi: ItemTree; -}`,signature:{properties:[{key:"_multi",value:{name:"union",raw:`| C -| H -| T -// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic. -| ArrayNode -| ObjectNode`,elements:[{name:"signature",type:"object",raw:`{ - // TODO(mdr): When we first drafted the multi-item feature, we named - // content nodes "item" nodes, and later decided the term was - // ambiguous and switched to "content". But we're temporarily keeping - // support for the "item" string when inferring item shape, so that we - // don't crash on multi-items we've already created - but all new - // content nodes will be generated with the "content" string. - // - // Code blocks that enable this legacy support are greppable with the - // keyword #LegacyContentNode. - __type: "content" | "item"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"union",raw:'"content" | "item"',elements:[{name:"literal",value:'"content"'},{name:"literal",value:'"item"'}],required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18427,21 +22456,403 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"signature",type:"object",raw:`{ - __type: "hint"; - // Perseus has default values for these fields, so they're all optional. - content?: string | null | undefined; - images?: ImageDict | null | undefined; - widgets?: WidgetDict | null | undefined; - replace?: boolean | null | undefined; -}`,signature:{properties:[{key:"__type",value:{name:"literal",value:'"hint"',required:!0}},{key:"content",value:{name:"union",raw:"string | null | undefined",elements:[{name:"string"},{name:"null"},{name:"undefined"}],required:!1}},{key:"images",value:{name:"union",raw:"ImageDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [url: string]: Dimensions; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ - width?: number; - height?: number; -}`,signature:{properties:[{key:"width",value:{name:"number",required:!1}},{key:"height",value:{name:"number",required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"widgets",value:{name:"union",raw:"WidgetDict | null | undefined",elements:[{name:"signature",type:"object",raw:`{ - [name: string]: Widget; -}`,signature:{properties:[{key:{name:"string"},value:{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ + // The "type" of widget which will define what the Options field looks like + type: Type; + // Whether this widget is displayed with the values and is immutable. For display only + // NOTE: perseus_data.go says this is required even though it isn't necessary. + static?: boolean; + // Whether a widget is scored. Usually true except for IFrame widgets (deprecated) + // Default: true + graded?: boolean; + // The HTML alignment of the widget. "default" or "block" + // NOTE: perseus_data.go says this is required even though it isn't necessary. + alignment?: string; + // Options specific to the type field of the widget. See Perseus*WidgetOptions for more details + options: Options; + // Only used by interactive child widgets (line, point, etc) to identify the components + // NOTE: perseus_data.go says this is required even though it isn't necessary. + key?: number; + // The version of the widget data spec. Used to differentiate between newer and older content data. + // NOTE: perseus_data.go says this is required even though it isn't necessary. + version?: Version; +}`,signature:{properties:[{key:"type",value:{name:"literal",value:"'categorizer'",required:!0}},{key:"static",value:{name:"boolean",required:!1}},{key:"graded",value:{name:"boolean",required:!1}},{key:"alignment",value:{name:"string",required:!1}},{key:"options",value:{name:"signature",type:"object",raw:`{ + // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"] + items: ReadonlyArray; + // Translatable text; a list of categories. e.g. ["fruits", "colors", "clothing"] + categories: ReadonlyArray; + // Whether the items should be randemized + randomizeItems: boolean; + // Whether this widget is displayed with the results and immutable + static: boolean; + // The correct answers where index relates to the items and value relates to the category. e.g. [0, 1, 0, 1, 2] + values: ReadonlyArray; + // Whether we should highlight i18n linter errors found on this widget + highlightLint?: boolean; + // Internal editor configuration. Can be ignored by consumers. + linterContext?: PerseusLinterContext; +}`,signature:{properties:[{key:"items",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"categories",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"randomizeItems",value:{name:"boolean",required:!0}},{key:"static",value:{name:"boolean",required:!0}},{key:"values",value:{name:"ReadonlyArray",elements:[{name:"number"}],raw:"ReadonlyArray",required:!0}},{key:"highlightLint",value:{name:"boolean",required:!1}},{key:"linterContext",value:{name:"signature",type:"object",raw:`{ + contentType: string; + paths: ReadonlyArray; + stack: ReadonlyArray; +}`,signature:{properties:[{key:"contentType",value:{name:"string",required:!0}},{key:"paths",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}},{key:"stack",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]},required:!1}}]},required:!0}},{key:"key",value:{name:"number",required:!1}},{key:"version",value:{name:"signature",type:"object",raw:`{ + // The major part of the version + major: number; + // The minor part of the version + minor: number; +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}},{name:"signature",type:"object",raw:`{ // The "type" of widget which will define what the Options field looks like type: Type; // Whether this widget is displayed with the values and is immutable. For display only @@ -18485,7 +22896,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu major: number; // The minor part of the version minor: number; -}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]},required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ +}`,signature:{properties:[{key:"major",value:{name:"number",required:!0}},{key:"minor",value:{name:"number",required:!0}}]},required:!1}}]}}],required:!0}}]},required:!1},{name:"null"},{name:"undefined"}],required:!1}},{key:"replace",value:{name:"union",raw:"boolean | null | undefined",elements:[{name:"boolean"},{name:"null"},{name:"undefined"}],required:!1}}]}},{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray"},{name:"Tree"},{name:"signature",type:"object",raw:`{ // @ts-expect-error - TS2315 - Type 'Tree' is not generic. [k: string]: Tree; }`,signature:{properties:[{key:{name:"string"},value:{name:"Tree",required:!0}}]}}],required:!0}}]},required:!1}},{key:"editorMode",value:{name:"union",raw:'"edit" | "preview" | "json"',elements:[{name:"literal",value:'"edit"'},{name:"literal",value:'"preview"'},{name:"literal",value:'"json"'}],required:!1}},{key:"jsonMode",value:{name:"boolean",required:!1}},{key:"value",value:{name:"any",required:!1}},{key:"choiceStates",value:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ @@ -18701,7 +23112,7 @@ features, since it may appear in production data.`},{key:"range",value:{name:"tu // NOTE(jeremy): This is referenced in the component. Verify if there's any // production data that still has this. coord?: Coord; // Legacy! -}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"Empty"},name:"extraData"}],return:{name:"void"}},required:!0}},{key:"isLastUsedWidget",value:{name:"boolean",required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}},{key:"containerSizeClass",value:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]",required:!0}}]}}]},description:""},linterContext:{required:!1,tsType:{name:"LinterContextProps"},description:"",defaultValue:{value:"linterContextDefault",computed:!0}}}};const{mapObject:we,mapObjectFromArray:_n}=hr,Pn=/\S/,Fn=/(web\+graphie|https):\/\/[^\s]*/,B=()=>{},De=["content","problemNum","widgets"],oe=t=>"container:"+t,Sn=function(t,r){return t===null||r===null?t===r:u.every(t,(e,n)=>{if(r!=null)return u.isEqual(e,r[n])})},Ne=class Ne extends z.Component{constructor(r){super(r),this._widgetContainers=new Map,this.getApiOptions=()=>({...vr.defaults,...this.props.apiOptions}),this._getInitialWidgetState=e=>{const n=this._getAllWidgetsInfo(e);return{widgetInfo:n,widgetProps:this._getAllWidgetsStartProps(n,e)}},this._getAllWidgetsInfo=e=>we(e.widgets,(n,a)=>{if(!n.type||!n.alignment){const i={};n.type||(i.type=a.split(" ")[0]),n.alignment||(i.alignment="default"),n=u.extend({},n,i)}return Wn(n)}),this._getAllWidgetsStartProps=(e,n)=>{var l;const{apiOptions:a,problemNum:i}=n,s={},{strings:o}=this.props;return dr(e).forEach(([d,m])=>{s[d]=jn(m,o,i)}),(l=a==null?void 0:a.onWidgetStartProps)==null||l.call(a,s),s},this._getDefaultWidgetInfo=e=>{const n=te.rTypeFromWidgetId.exec(e);return n==null?{}:{type:n[1],graded:!0,options:{}}},this._getWidgetInfo=e=>this.state.widgetInfo[e]||this._getDefaultWidgetInfo(e),this.renderWidget=(e,n,a)=>{const i=this.state.widgetInfo[n];if(i&&i.alignment==="full-width"&&(a.foundFullWidth=!0),i){const s=i&&i.type||e,o=u.contains(this.props.highlightedWidgets,n);return g(de,{id:n,ref:l=>{const d=oe(n);l!=null?this._widgetContainers.set(d,l):this._widgetContainers.delete(d)},type:s,initialProps:this.getWidgetProps(n),shouldHighlight:o,linterContext:xt(this.props.linterContext,"widget")},oe(n))}return null},this.getWidgetProps=e=>{const n=this.getApiOptions(),a=this.state.widgetProps[e]||{},i=this.state.widgetInfo[e],s=this.props.reviewMode&&i?i.options:null;this._interactionTrackers||(this._interactionTrackers={});let o=this._interactionTrackers[e];return o||(o=this._interactionTrackers[e]=new It(n.trackInteraction,i&&i.type,e,zn(i&&i.type))),{...a,widgetId:e,alignment:i&&i.alignment,static:i==null?void 0:i.static,problemNum:this.props.problemNum,apiOptions:this.getApiOptions(),keypadElement:this.props.keypadElement,questionCompleted:this.props.questionCompleted,showSolutions:this.props.showSolutions,onFocus:u.partial(this._onWidgetFocus,e),onBlur:u.partial(this._onWidgetBlur,e),findWidgets:this.findWidgets,reviewModeRubric:s,onChange:(l,d,m=!1)=>{this._setWidgetProps(e,l,d,m)},trackInteraction:o.track,isLastUsedWidget:e===this.state.lastUsedWidgetId}},this.getSerializedState=e=>we(e||this.state.widgetProps,(n,a)=>{const i=this.getWidgetInstance(a);return i&&i.getSerializedState?i.getSerializedState():n}),this.restoreSerializedState=(e,n)=>{const a=u.keys(e),i=u.keys(this.state.widgetProps);if(a.length!==i.length||u.intersection(a,i).length!==a.length){G.error("Refusing to restore bad serialized state:",A.Internal,{loggedMetadata:{serializedState:JSON.stringify(e),currentProps:JSON.stringify(this.state.widgetProps)}});return}let s=1;const o=()=>{--s,n&&s===0&&n()};this.setState({widgetProps:we(e,(l,d)=>{const m=this.getWidgetInstance(d);if(m&&m.restoreSerializedState){++s;const h=m.restoreSerializedState(l,o);return u.extend({},this.state.widgetProps[d],h)}return l})},()=>{setTimeout(o,0)})},this.showRationalesForCurrentlySelectedChoices=()=>{Object.keys(this.props.widgets).forEach(e=>{const n=this.getWidgetInstance(e);n&&n.showRationalesForCurrentlySelectedChoices&&n.showRationalesForCurrentlySelectedChoices(this._getWidgetInfo(e).options)})},this.deselectIncorrectSelectedChoices=()=>{Object.keys(this.props.widgets).forEach(e=>{const n=this.getWidgetInstance(e);n&&n.deselectIncorrectSelectedChoices&&n.deselectIncorrectSelectedChoices()})},this.findInternalWidgets=e=>{let n;if(typeof e=="string")if(e.indexOf(" ")!==-1){const i=e;n=(s,o,l)=>s===i}else{const i=e;n=(s,o,l)=>o.type===i}else n=e;return this.widgetIds.filter(i=>{const s=this._getWidgetInfo(i),o=this.getWidgetInstance(i);return n(i,s,o)}).map(this.getWidgetInstance)},this.findWidgets=e=>[...this.findInternalWidgets(e),...this.props.findExternalWidgets(e)],this.getWidgetInstance=e=>{const n=this._widgetContainers.get(oe(e));return n?n.getWidget():null},this._onWidgetFocus=(e,n=[])=>{if(!u.isArray(n))throw new E("widget props.onFocus focusPath must be an Array, but was"+JSON.stringify(n),A.Internal);this._setCurrentFocus([e].concat(n))},this._onWidgetBlur=(e,n)=>{const a=this._currentFocus,i=[e].concat(n);u.isEqual(i,a)&&u.defer(()=>{u.isEqual(this._currentFocus,a)&&this._setCurrentFocus(null)})},this.getContent=(e,n)=>n.jiptContent||e.content,this.shouldRenderJiptPlaceholder=(e,n)=>Y().JIPT.useJIPT&&n.jiptContent==null&&e.content.indexOf("crwdns")!==-1,this.replaceJiptContent=(e,n)=>{if(n==null)this.setState({jiptContent:e});else{/^\s*(`{3,}|~{3,})\s*(\S+)?\s*\n([\s\S]+?)\s*\1\s*$/.test(e)||(/\S\n\s*\n\S/.test(e)?e="$\\large{\\red{\\text{Please translate each paragraph to a single paragraph.}}}$":/^\s*$/.test(e)&&(e="$\\large{\\red{\\text{Translated paragraph is currently empty}}}$"));const i=this.getContent(this.props,this.state),s=$e.parseToArray(i);s[n]=e,this.setState({jiptContent:$e.joinFromArray(s)})}},this.outputMarkdown=(e,n)=>{if(u.isArray(e)){const s=n.key,o=[];let l=!1;for(let d=0;d{if(u.isArray(e)){const a=n.key,i=[];let s=!1;for(let o=0;o{const i=this.getApiOptions(),s=i.imagePlaceholder;if(e.type==="widget"){const o=i.widgetPlaceholder;return o||(this._foundTextNodes=!0,u.contains(this.widgetIds,e.id)?g("span",{className:"renderer-widget-error",children:["Widget [[","☃"," ",e.id,"]] already exists."].join("")},a.key):(this.widgetIds.push(e.id),this.renderWidget(e.widgetType,e.id,a)))}if(e.type==="blockMath"){const o=vn(e.content),l={overflowX:"auto",overflowY:"hidden",paddingTop:10,paddingBottom:10,marginTop:-10,marginBottom:-10};if(i.isMobile){const m={marginLeft:-16,marginRight:-16},h={paddingLeft:16,paddingRight:16},b={...l,...Ve.mobileZoomableParentFix};return g("div",{className:"perseus-block-math",style:m,children:g(N,{children:g("div",{className:"perseus-block-math-inner",style:{...b,...h},children:g(cr,{children:o})})})},a.key)}return g("div",{className:"perseus-block-math",children:g(N,{children:g("div",{className:"perseus-block-math-inner",style:l,children:g(pe.Consumer,{children:({setAssetStatus:d})=>g(ze,{setAssetStatus:d,children:o})})})})},a.key)}if(e.type==="math"){const o=e.content.replace(/\{align[*]?\}/g,"{aligned}");return g("span",{style:{whiteSpace:"nowrap"},children:ye(N,{children:[g("span",{}),g(pe.Consumer,{children:({setAssetStatus:l})=>g(ze,{onRender:this.props.onRender,setAssetStatus:l,children:o})}),g("span",{})]})},a.key)}if(e.type==="image"){if(s)return s;const o=u.has(this.props.images,e.target)?this.props.images[e.target]:null,l=!a.inTable;return g(N,{children:g(pe.Consumer,{children:({setAssetStatus:d})=>g(gr,{setAssetStatus:d,src:U.sanitizeUrl(e.target),alt:e.alt,title:e.title,responsive:l,onUpdate:this.props.onRender,zoomToFullSizeOnMobile:i.isMobile&&i.isArticle,...o})})},a.key)}if(e.type==="columns")return this._isTwoColumn=!0,g(N,{children:U.ruleOutput(e,n,a)},a.key);if(e.type==="text")return Pn.test(e.content)&&(this._foundTextNodes=!0),s&&Fn.test(e.content)?s:e.content;if(e.type==="table"||e.type==="titledTable"){const o=U.ruleOutput(e,n,{...a,isMobile:i.isMobile,inTable:!0});if(!i.isMobile)return o;const l=16,d={marginLeft:-l,marginRight:-l},h={...{paddingLeft:0,paddingRight:0},...Ve.mobileZoomableParentFix},b=g("div",{style:{...h,overflowX:"auto"},children:g(N,{children:g(pr,{animateHeight:!0,children:o})})});return g("div",{style:d,children:b})}return g(N,{children:U.ruleOutput(e,n,a)},a.key)},this.handleRender=e=>{const n=this.props.onRender,a=e.onRender;if(n!==B||a!==B){const i=mr(ke.findDOMNode(this)).find("img");a!==B&&i.off("load",a),n!==B&&i.on("load",n)}n()},this._setCurrentFocus=e=>{const n=this.getApiOptions();if(!Sn(e,this._currentFocus)){const a=this._currentFocus;a&&this.blurPath(a),this._currentFocus=e,n.onFocusChange(this._currentFocus,a)}},this.focus=()=>{let e,n;for(let a=0;a{const n=u.first(e),a=u.rest(e),i=this.getWidgetInstance(n),s=i&&i.getDOMNodeForPath;if(s)return s(a);if(a.length===0)return ke.findDOMNode(i)},this.getGrammarTypeForPath=e=>{const n=u.first(e),a=u.rest(e),i=this.getWidgetInstance(n);if(i&&i.getGrammarTypeForPath)return i.getGrammarTypeForPath(a)},this.getInputPaths=()=>{const e=[];return u.each(this.widgetIds,n=>{const a=this.getWidgetInstance(n);if(a&&a.getInputPaths){const i=a.getInputPaths();u.each(i,s=>{const o=[n].concat(s);e.push(o)})}}),e},this.focusPath=e=>{if(u.isEqual(this._currentFocus,e))return;this._currentFocus&&this.blurPath(this._currentFocus);const n=u.first(e),a=u.rest(e),i=this.getWidgetInstance(n);i&&i.focusInputPath&&i.focusInputPath(a)},this.blurPath=e=>{if(!u.isEqual(this._currentFocus,e))return;const n=u.first(e),a=u.rest(e);if(this.getWidgetInstance(n)){const s=this.getWidgetInstance(n);s&&s.blurInputPath&&s.blurInputPath(a)}},this.blur=()=>{this._currentFocus&&this.blurPath(this._currentFocus)},this.serialize=()=>{const e={};return u.each(this.state.widgetInfo,function(n,a){const s=this.getWidgetInstance(a).serialize();u.isEmpty(s)||(e[a]=s)},this),e},this.emptyWidgets=()=>u.filter(this.widgetIds,e=>{const n=this._getWidgetInfo(e);if(n.static)return!1;const a=this.getWidgetInstance(e);if(a&&a.simpleValidate){const i=a.simpleValidate(n.options,null);return te.scoreIsEmpty(i)}}),this._setWidgetProps=(e,n,a,i)=>{this.setState(s=>{const o={...s.widgetProps,[e]:{...s.widgetProps[e],...n}},l=i?s.lastUsedWidgetId:e;return i||this.props.onSerializedStateUpdated(this.getSerializedState(o)),{lastUsedWidgetId:l,widgetProps:o}},()=>{setTimeout(()=>{const s=a&&a();i||this.props.onInteractWithWidget(e),s!==!1&&this._setCurrentFocus([e])},0)})},this.setInputValue=(e,n,a)=>{var l;const i=u.first(e),s=u.rest(e),o=this.getWidgetInstance(i);(l=o==null?void 0:o.setInputValue)==null||l.call(o,s,n,a)},this.getUserInput=()=>this.widgetIds.map(e=>{const n=this.getWidgetInstance(e);if(n&&n.getUserInput)return n.getUserInput()}),this.getWidgetIds=()=>this.widgetIds,this.getUserInputForWidgets=()=>_n(this.widgetIds,e=>{const n=this.getWidgetInstance(e);if(n&&n.getUserInput)return n.getUserInput()}),this.scoreWidgets=()=>{const e=this.state.widgetInfo,n=u.filter(this.widgetIds,i=>{const s=e[i],o=(s==null?void 0:s.graded)==null||s.graded,l=!!(s!=null&&s.static);return o&&!l}),a={};return u.each(n,i=>{const s=e[i],o=this.getWidgetInstance(i);o&&o.simpleValidate&&(a[i]=o.simpleValidate({...s==null?void 0:s.options,scoring:!0}))}),a},this.score=()=>u.reduce(this.scoreWidgets(),te.combineScores,te.noScore),this.guessAndScore=()=>{const e=this.getUserInput(),n=this.score();return[e,n]},this.examples=()=>{const e=this.widgetIds,n=u.compact(u.map(e,i=>{const s=this.getWidgetInstance(i);return s!=null&&s.examples?s.examples():null}));return!n.length||!u.all(n,function(i){return u.isEqual(n[0],i)})?null:n[0]},this.handletranslationLintErrors=e=>{this._isMounted&&this.setState({translationLintErrors:e})},this._translationLinter=new bn,this.state={jiptContent:null,translationLintErrors:[],lastUsedWidgetId:null,...this._getInitialWidgetState(r)}}componentDidMount(){this._isMounted=!0,this.handleRender({}),this._currentFocus=null,this.props.serializedState&&this.restoreSerializedState(this.props.serializedState),this.props.linterContext.highlightLint&&this._translationLinter.runLinter(this.props.content,this.handletranslationLintErrors)}UNSAFE_componentWillReceiveProps(r){u.isEqual(u.pick(this.props,De),u.pick(r,De))||this.setState(this._getInitialWidgetState(r))}shouldComponentUpdate(r,e){if(this.props.alwaysUpdate)return!0;const n=!u.isEqual(this.state,e);return!u.isEqual(this.props,r)||n}UNSAFE_componentWillUpdate(r,e){const n=this.shouldRenderJiptPlaceholder(this.props,this.state),a=this.shouldRenderJiptPlaceholder(r,e),i=this.getContent(this.props,this.state),s=this.getContent(r,e),o=this.props.highlightedWidgets,l=r.highlightedWidgets;this.reuseMarkdown=!n&&!a&&i===s&&u.isEqual(this.state.translationLintErrors,e.translationLintErrors)&&(!this.props.linterContext.highlightLint||u.isEqual(this.props.widgets,r.widgets))&&this.props.linterContext.highlightLint===r.linterContext.highlightLint&&o===l}componentDidUpdate(r,e){this.handleRender(r),u.each(this.widgetIds,n=>{const a=this._widgetContainers.get(oe(n));a&&a.replaceWidgetProps(this.getWidgetProps(n))}),this.props.serializedState&&!u.isEqual(this.props.serializedState,this.getSerializedState())&&this.restoreSerializedState(this.props.serializedState),this.props.linterContext.highlightLint&&this._translationLinter.runLinter(this.props.content,this.handletranslationLintErrors)}componentWillUnmount(){this.widgetIds=[],this.translationIndex!=null&&Y().rendererTranslationComponents.removeComponentAtIndex(this.translationIndex),this._isMounted=!1}render(){const r=this.getApiOptions();if(this.reuseMarkdown)return this.lastRenderedMarkdown;const e=this.getContent(this.props,this.state);if(this.widgetIds=[],this.shouldRenderJiptPlaceholder(this.props,this.state)&&(this.translationIndex||(this.translationIndex=Y().rendererTranslationComponents.addComponent(this)),!r.isArticle))return g(qe,{children:g("div",{"data-perseus-component-index":this.translationIndex,children:e})});this._isTwoColumn=!1;const n=this.props.inline?U.parseInline(e,{isJipt:this.translationIndex!=null}):U.parse(e,{isJipt:this.translationIndex!=null});if(this.props.linterContext.highlightLint){const s={content:this.props.content,widgets:this.props.widgets,...this.props.linterContext};Ot(n,s,!0),this._translationLinter.applyLintErrors(n,[...this.state.translationLintErrors,...this.props.legacyPerseusLint||[]])}const a=this.outputMarkdown(n,{baseElements:r.baseElements}),i=fe({[ce.RENDERER]:!0,[ce.RESPONSIVE_RENDERER]:!0,[ce.TWO_COLUMN_RENDERER]:this._isTwoColumn});return this.lastRenderedMarkdown=g(qe,{children:g("div",{className:i,children:a})}),this.lastRenderedMarkdown}};Ne.defaultProps={content:"",widgets:{},images:{},highlightedWidgets:[],questionCompleted:!1,showSolutions:"none",onRender:B,onInteractWithWidget:function(){},findExternalWidgets:()=>[],alwaysUpdate:!1,reviewMode:!1,serializedState:null,onSerializedStateUpdated:()=>{},linterContext:Ge};let xe=Ne;const Ve={mobileZoomableParentFix:{transform:"translate3d(0,0,0)"}};xe.__docgenInfo={description:"",methods:[{name:"getApiOptions",docblock:null,modifiers:[],params:[],returns:null},{name:"_getInitialWidgetState",docblock:null,modifiers:[],params:[{name:"props",optional:!1,type:{name:"intersection",raw:`Partial> & { +}`,signature:{properties:[{key:"coord",value:{name:"tuple",raw:"[number, number]",elements:[{name:"number"},{name:"number"}],required:!0}}]}}]}],required:!1}}]}},name:"arg1"},{type:{name:"signature",type:"function",raw:"() => unknown | null | undefined",signature:{arguments:[],return:{name:"union",raw:"unknown | null | undefined",elements:[{name:"unknown"},{name:"null"},{name:"undefined"}]}}},name:"callback"},{type:{name:"boolean"},name:"silent"}],return:{name:"unknown"}},required:!0}},{key:"trackInteraction",value:{name:"signature",type:"function",raw:"(extraData?: TrackingExtraArgs) => void",signature:{arguments:[{type:{name:"Empty"},name:"extraData"}],return:{name:"void"}},required:!0}},{key:"isLastUsedWidget",value:{name:"boolean",required:!0}},{key:"linterContext",value:{name:"LinterContextProps",required:!0}},{key:"containerSizeClass",value:{name:"unknown[union]",raw:"(typeof containerSizeClass)[keyof typeof containerSizeClass]",required:!0}}]}}]},description:""},linterContext:{required:!1,tsType:{name:"LinterContextProps"},description:"",defaultValue:{value:"linterContextDefault",computed:!0}}}};const{mapObject:we,mapObjectFromArray:_n}=hr,Pn=/\S/,Fn=/(web\+graphie|https):\/\/[^\s]*/,B=()=>{},De=["content","problemNum","widgets"],oe=t=>"container:"+t,Sn=function(t,r){return t===null||r===null?t===r:u.every(t,(e,n)=>{if(r!=null)return u.isEqual(e,r[n])})},ze=class ze extends N.Component{constructor(r){super(r),this._widgetContainers=new Map,this.getApiOptions=()=>({...vr.defaults,...this.props.apiOptions}),this._getInitialWidgetState=e=>{const n=this._getAllWidgetsInfo(e);return{widgetInfo:n,widgetProps:this._getAllWidgetsStartProps(n,e)}},this._getAllWidgetsInfo=e=>we(e.widgets,(n,a)=>{if(!n.type||!n.alignment){const i={};n.type||(i.type=a.split(" ")[0]),n.alignment||(i.alignment="default"),n=u.extend({},n,i)}return Wn(n)}),this._getAllWidgetsStartProps=(e,n)=>{var l;const{apiOptions:a,problemNum:i}=n,s={},{strings:o}=this.props;return dr(e).forEach(([d,m])=>{s[d]=jn(m,o,i)}),(l=a==null?void 0:a.onWidgetStartProps)==null||l.call(a,s),s},this._getDefaultWidgetInfo=e=>{const n=te.rTypeFromWidgetId.exec(e);return n==null?{}:{type:n[1],graded:!0,options:{}}},this._getWidgetInfo=e=>this.state.widgetInfo[e]||this._getDefaultWidgetInfo(e),this.renderWidget=(e,n,a)=>{const i=this.state.widgetInfo[n];if(i&&i.alignment==="full-width"&&(a.foundFullWidth=!0),i){const s=i&&i.type||e,o=u.contains(this.props.highlightedWidgets,n);return g(de,{id:n,ref:l=>{const d=oe(n);l!=null?this._widgetContainers.set(d,l):this._widgetContainers.delete(d)},type:s,initialProps:this.getWidgetProps(n),shouldHighlight:o,linterContext:xt(this.props.linterContext,"widget")},oe(n))}return null},this.getWidgetProps=e=>{const n=this.getApiOptions(),a=this.state.widgetProps[e]||{},i=this.state.widgetInfo[e],s=this.props.reviewMode&&i?i.options:null;this._interactionTrackers||(this._interactionTrackers={});let o=this._interactionTrackers[e];return o||(o=this._interactionTrackers[e]=new It(n.trackInteraction,i&&i.type,e,Nn(i&&i.type))),{...a,widgetId:e,alignment:i&&i.alignment,static:i==null?void 0:i.static,problemNum:this.props.problemNum,apiOptions:this.getApiOptions(),keypadElement:this.props.keypadElement,questionCompleted:this.props.questionCompleted,showSolutions:this.props.showSolutions,onFocus:u.partial(this._onWidgetFocus,e),onBlur:u.partial(this._onWidgetBlur,e),findWidgets:this.findWidgets,reviewModeRubric:s,onChange:(l,d,m=!1)=>{this._setWidgetProps(e,l,d,m)},trackInteraction:o.track,isLastUsedWidget:e===this.state.lastUsedWidgetId}},this.getSerializedState=e=>we(e||this.state.widgetProps,(n,a)=>{const i=this.getWidgetInstance(a);return i&&i.getSerializedState?i.getSerializedState():n}),this.restoreSerializedState=(e,n)=>{const a=u.keys(e),i=u.keys(this.state.widgetProps);if(a.length!==i.length||u.intersection(a,i).length!==a.length){G.error("Refusing to restore bad serialized state:",A.Internal,{loggedMetadata:{serializedState:JSON.stringify(e),currentProps:JSON.stringify(this.state.widgetProps)}});return}let s=1;const o=()=>{--s,n&&s===0&&n()};this.setState({widgetProps:we(e,(l,d)=>{const m=this.getWidgetInstance(d);if(m&&m.restoreSerializedState){++s;const h=m.restoreSerializedState(l,o);return u.extend({},this.state.widgetProps[d],h)}return l})},()=>{setTimeout(o,0)})},this.showRationalesForCurrentlySelectedChoices=()=>{Object.keys(this.props.widgets).forEach(e=>{const n=this.getWidgetInstance(e);n&&n.showRationalesForCurrentlySelectedChoices&&n.showRationalesForCurrentlySelectedChoices(this._getWidgetInfo(e).options)})},this.deselectIncorrectSelectedChoices=()=>{Object.keys(this.props.widgets).forEach(e=>{const n=this.getWidgetInstance(e);n&&n.deselectIncorrectSelectedChoices&&n.deselectIncorrectSelectedChoices()})},this.findInternalWidgets=e=>{let n;if(typeof e=="string")if(e.indexOf(" ")!==-1){const i=e;n=(s,o,l)=>s===i}else{const i=e;n=(s,o,l)=>o.type===i}else n=e;return this.widgetIds.filter(i=>{const s=this._getWidgetInfo(i),o=this.getWidgetInstance(i);return n(i,s,o)}).map(this.getWidgetInstance)},this.findWidgets=e=>[...this.findInternalWidgets(e),...this.props.findExternalWidgets(e)],this.getWidgetInstance=e=>{const n=this._widgetContainers.get(oe(e));return n?n.getWidget():null},this._onWidgetFocus=(e,n=[])=>{if(!u.isArray(n))throw new E("widget props.onFocus focusPath must be an Array, but was"+JSON.stringify(n),A.Internal);this._setCurrentFocus([e].concat(n))},this._onWidgetBlur=(e,n)=>{const a=this._currentFocus,i=[e].concat(n);u.isEqual(i,a)&&u.defer(()=>{u.isEqual(this._currentFocus,a)&&this._setCurrentFocus(null)})},this.getContent=(e,n)=>n.jiptContent||e.content,this.shouldRenderJiptPlaceholder=(e,n)=>Y().JIPT.useJIPT&&n.jiptContent==null&&e.content.indexOf("crwdns")!==-1,this.replaceJiptContent=(e,n)=>{if(n==null)this.setState({jiptContent:e});else{/^\s*(`{3,}|~{3,})\s*(\S+)?\s*\n([\s\S]+?)\s*\1\s*$/.test(e)||(/\S\n\s*\n\S/.test(e)?e="$\\large{\\red{\\text{Please translate each paragraph to a single paragraph.}}}$":/^\s*$/.test(e)&&(e="$\\large{\\red{\\text{Translated paragraph is currently empty}}}$"));const i=this.getContent(this.props,this.state),s=Ue.parseToArray(i);s[n]=e,this.setState({jiptContent:Ue.joinFromArray(s)})}},this.outputMarkdown=(e,n)=>{if(u.isArray(e)){const s=n.key,o=[];let l=!1;for(let d=0;d{if(u.isArray(e)){const a=n.key,i=[];let s=!1;for(let o=0;o{const i=this.getApiOptions(),s=i.imagePlaceholder;if(e.type==="widget"){const o=i.widgetPlaceholder;return o||(this._foundTextNodes=!0,u.contains(this.widgetIds,e.id)?g("span",{className:"renderer-widget-error",children:["Widget [[","☃"," ",e.id,"]] already exists."].join("")},a.key):(this.widgetIds.push(e.id),this.renderWidget(e.widgetType,e.id,a)))}if(e.type==="blockMath"){const o=vn(e.content),l={overflowX:"auto",overflowY:"hidden",paddingTop:10,paddingBottom:10,marginTop:-10,marginBottom:-10};if(i.isMobile){const m={marginLeft:-16,marginRight:-16},h={paddingLeft:16,paddingRight:16},b={...l,...Ve.mobileZoomableParentFix};return g("div",{className:"perseus-block-math",style:m,children:g(z,{children:g("div",{className:"perseus-block-math-inner",style:{...b,...h},children:g(cr,{children:o})})})},a.key)}return g("div",{className:"perseus-block-math",children:g(z,{children:g("div",{className:"perseus-block-math-inner",style:l,children:g(pe.Consumer,{children:({setAssetStatus:d})=>g(Ne,{setAssetStatus:d,children:o})})})})},a.key)}if(e.type==="math"){const o=e.content.replace(/\{align[*]?\}/g,"{aligned}");return g("span",{style:{whiteSpace:"nowrap"},children:ye(z,{children:[g("span",{}),g(pe.Consumer,{children:({setAssetStatus:l})=>g(Ne,{onRender:this.props.onRender,setAssetStatus:l,children:o})}),g("span",{})]})},a.key)}if(e.type==="image"){if(s)return s;const o=u.has(this.props.images,e.target)?this.props.images[e.target]:null,l=!a.inTable;return g(z,{children:g(pe.Consumer,{children:({setAssetStatus:d})=>g(gr,{setAssetStatus:d,src:$.sanitizeUrl(e.target),alt:e.alt,title:e.title,responsive:l,onUpdate:this.props.onRender,zoomToFullSizeOnMobile:i.isMobile&&i.isArticle,...o})})},a.key)}if(e.type==="columns")return this._isTwoColumn=!0,g(z,{children:$.ruleOutput(e,n,a)},a.key);if(e.type==="text")return Pn.test(e.content)&&(this._foundTextNodes=!0),s&&Fn.test(e.content)?s:e.content;if(e.type==="table"||e.type==="titledTable"){const o=$.ruleOutput(e,n,{...a,isMobile:i.isMobile,inTable:!0});if(!i.isMobile)return o;const l=16,d={marginLeft:-l,marginRight:-l},h={...{paddingLeft:0,paddingRight:0},...Ve.mobileZoomableParentFix},b=g("div",{style:{...h,overflowX:"auto"},children:g(z,{children:g(pr,{animateHeight:!0,children:o})})});return g("div",{style:d,children:b})}return g(z,{children:$.ruleOutput(e,n,a)},a.key)},this.handleRender=e=>{const n=this.props.onRender,a=e.onRender;if(n!==B||a!==B){const i=mr(ke.findDOMNode(this)).find("img");a!==B&&i.off("load",a),n!==B&&i.on("load",n)}n()},this._setCurrentFocus=e=>{const n=this.getApiOptions();if(!Sn(e,this._currentFocus)){const a=this._currentFocus;a&&this.blurPath(a),this._currentFocus=e,n.onFocusChange(this._currentFocus,a)}},this.focus=()=>{var a;let e,n;for(let i=0;i{const n=u.first(e),a=u.rest(e),i=this.getWidgetInstance(n);if(i!=null&&i.getDOMNodeForPath)return i.getDOMNodeForPath(a);if(a.length===0)return ke.findDOMNode(i)},this.getGrammarTypeForPath=e=>{var s;const n=u.first(e),a=u.rest(e),i=this.getWidgetInstance(n);return(s=i==null?void 0:i.getGrammarTypeForPath)==null?void 0:s.call(i,a)},this.getInputPaths=()=>{const e=[];return u.each(this.widgetIds,n=>{const a=this.getWidgetInstance(n);if(a&&a.getInputPaths){const i=a.getInputPaths();u.each(i,s=>{const o=[n].concat(s);e.push(o)})}}),e},this.focusPath=e=>{var s;if(u.isEqual(this._currentFocus,e))return;this._currentFocus&&this.blurPath(this._currentFocus);const n=u.first(e),a=u.rest(e),i=this.getWidgetInstance(n);(s=i==null?void 0:i.focusInputPath)==null||s.call(i,a)},this.blurPath=e=>{var s;if(!u.isEqual(this._currentFocus,e))return;const n=u.first(e),a=u.rest(e);if(this.getWidgetInstance(n)){const o=this.getWidgetInstance(n);(s=o==null?void 0:o.blurInputPath)==null||s.call(o,a)}},this.blur=()=>{this._currentFocus&&this.blurPath(this._currentFocus)},this.serialize=()=>{const e={};return u.each(this.state.widgetInfo,function(n,a){const s=this.getWidgetInstance(a).serialize();u.isEmpty(s)||(e[a]=s)},this),e},this.emptyWidgets=()=>u.filter(this.widgetIds,e=>{const n=this._getWidgetInfo(e);if(n.static)return!1;const a=this.getWidgetInstance(e);if(a&&a.simpleValidate){const i=a.simpleValidate(n.options,null);return te.scoreIsEmpty(i)}}),this._setWidgetProps=(e,n,a,i)=>{this.setState(s=>{const o={...s.widgetProps,[e]:{...s.widgetProps[e],...n}},l=i?s.lastUsedWidgetId:e;return i||this.props.onSerializedStateUpdated(this.getSerializedState(o)),{lastUsedWidgetId:l,widgetProps:o}},()=>{setTimeout(()=>{const s=a&&a();i||this.props.onInteractWithWidget(e),s!==!1&&this._setCurrentFocus([e])},0)})},this.setInputValue=(e,n,a)=>{var l;const i=u.first(e),s=u.rest(e),o=this.getWidgetInstance(i);(l=o==null?void 0:o.setInputValue)==null||l.call(o,s,n,a)},this.getUserInput=()=>this.widgetIds.map(e=>{const n=this.getWidgetInstance(e);if(n&&n.getUserInput)return n.getUserInput()}),this.getWidgetIds=()=>this.widgetIds,this.getUserInputForWidgets=()=>_n(this.widgetIds,e=>{const n=this.getWidgetInstance(e);if(n&&n.getUserInput)return n.getUserInput()}),this.scoreWidgets=()=>{const e=this.state.widgetInfo,n=u.filter(this.widgetIds,i=>{const s=e[i],o=(s==null?void 0:s.graded)==null||s.graded,l=!!(s!=null&&s.static);return o&&!l}),a={};return u.each(n,i=>{const s=e[i],o=this.getWidgetInstance(i);o&&o.simpleValidate&&(a[i]=o.simpleValidate({...s==null?void 0:s.options,scoring:!0}))}),a},this.score=()=>u.reduce(this.scoreWidgets(),te.combineScores,te.noScore),this.guessAndScore=()=>{const e=this.getUserInput(),n=this.score();return[e,n]},this.examples=()=>{const e=this.widgetIds,n=u.compact(u.map(e,i=>{const s=this.getWidgetInstance(i);return s!=null&&s.examples?s.examples():null}));return!n.length||!u.all(n,function(i){return u.isEqual(n[0],i)})?null:n[0]},this.handletranslationLintErrors=e=>{this._isMounted&&this.setState({translationLintErrors:e})},this._translationLinter=new bn,this.state={jiptContent:null,translationLintErrors:[],lastUsedWidgetId:null,...this._getInitialWidgetState(r)}}componentDidMount(){this._isMounted=!0,this.handleRender({}),this._currentFocus=null,this.props.serializedState&&this.restoreSerializedState(this.props.serializedState),this.props.linterContext.highlightLint&&this._translationLinter.runLinter(this.props.content,this.handletranslationLintErrors)}UNSAFE_componentWillReceiveProps(r){u.isEqual(u.pick(this.props,De),u.pick(r,De))||this.setState(this._getInitialWidgetState(r))}shouldComponentUpdate(r,e){if(this.props.alwaysUpdate)return!0;const n=!u.isEqual(this.state,e);return!u.isEqual(this.props,r)||n}UNSAFE_componentWillUpdate(r,e){const n=this.shouldRenderJiptPlaceholder(this.props,this.state),a=this.shouldRenderJiptPlaceholder(r,e),i=this.getContent(this.props,this.state),s=this.getContent(r,e),o=this.props.highlightedWidgets,l=r.highlightedWidgets;this.reuseMarkdown=!n&&!a&&i===s&&u.isEqual(this.state.translationLintErrors,e.translationLintErrors)&&(!this.props.linterContext.highlightLint||u.isEqual(this.props.widgets,r.widgets))&&this.props.linterContext.highlightLint===r.linterContext.highlightLint&&o===l}componentDidUpdate(r,e){this.handleRender(r),u.each(this.widgetIds,n=>{const a=this._widgetContainers.get(oe(n));a&&a.replaceWidgetProps(this.getWidgetProps(n))}),this.props.serializedState&&!u.isEqual(this.props.serializedState,this.getSerializedState())&&this.restoreSerializedState(this.props.serializedState),this.props.linterContext.highlightLint&&this._translationLinter.runLinter(this.props.content,this.handletranslationLintErrors)}componentWillUnmount(){this.widgetIds=[],this.translationIndex!=null&&Y().rendererTranslationComponents.removeComponentAtIndex(this.translationIndex),this._isMounted=!1}render(){const r=this.getApiOptions();if(this.reuseMarkdown)return this.lastRenderedMarkdown;const e=this.getContent(this.props,this.state);if(this.widgetIds=[],this.shouldRenderJiptPlaceholder(this.props,this.state)&&(this.translationIndex||(this.translationIndex=Y().rendererTranslationComponents.addComponent(this)),!r.isArticle))return g(qe,{children:g("div",{"data-perseus-component-index":this.translationIndex,children:e})});this._isTwoColumn=!1;const n=this.props.inline?$.parseInline(e,{isJipt:this.translationIndex!=null}):$.parse(e,{isJipt:this.translationIndex!=null});if(this.props.linterContext.highlightLint){const s={content:this.props.content,widgets:this.props.widgets,...this.props.linterContext};Ot(n,s,!0),this._translationLinter.applyLintErrors(n,[...this.state.translationLintErrors,...this.props.legacyPerseusLint||[]])}const a=this.outputMarkdown(n,{baseElements:r.baseElements}),i=fe({[ce.RENDERER]:!0,[ce.RESPONSIVE_RENDERER]:!0,[ce.TWO_COLUMN_RENDERER]:this._isTwoColumn});return this.lastRenderedMarkdown=g(qe,{children:g("div",{className:i,children:a})}),this.lastRenderedMarkdown}};ze.defaultProps={content:"",widgets:{},images:{},highlightedWidgets:[],questionCompleted:!1,showSolutions:"none",onRender:B,onInteractWithWidget:function(){},findExternalWidgets:()=>[],alwaysUpdate:!1,reviewMode:!1,serializedState:null,onSerializedStateUpdated:()=>{},linterContext:Ge};let xe=ze;const Ve={mobileZoomableParentFix:{transform:"translate3d(0,0,0)"}};xe.__docgenInfo={description:"",methods:[{name:"getApiOptions",docblock:null,modifiers:[],params:[],returns:null},{name:"_getInitialWidgetState",docblock:null,modifiers:[],params:[{name:"props",optional:!1,type:{name:"intersection",raw:`Partial> & { apiOptions?: APIOptions; alwaysUpdate?: boolean; findExternalWidgets: any; @@ -24361,9 +28772,7 @@ The return value of this function can be sent to the \`restoreSerializedState\` method to restore this state. If an instance of widgetProps is passed in, it generates the serialized -state from that instead of the current widget props.`},{name:"restoreSerializedState",docblock:null,modifiers:[],params:[{name:"serializedState",optional:!1,type:{name:"signature",type:"object",raw:`{ - [id: string]: any; -}`,signature:{properties:[{key:{name:"string"},value:{name:"any",required:!0}}]},alias:"SerializedState"}},{name:"callback",optional:!0,type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}}}],returns:null},{name:"showRationalesForCurrentlySelectedChoices",docblock:`Tell each of the radio widgets to show rationales for each of the +state from that instead of the current widget props.`},{name:"restoreSerializedState",docblock:null,modifiers:[],params:[{name:"serializedState",optional:!1,type:{name:"Record",elements:[{name:"string"},{name:"any"}],raw:"Record",alias:"SerializedState"}},{name:"callback",optional:!0,type:{name:"signature",type:"function",raw:"() => void",signature:{arguments:[],return:{name:"void"}}}}],returns:null},{name:"showRationalesForCurrentlySelectedChoices",docblock:`Tell each of the radio widgets to show rationales for each of the currently selected choices inside of them. If the widget is correct, it shows rationales for all of the choices. This also disables interaction with the choices that we show rationales for.`,modifiers:[],params:[],returns:null,description:`Tell each of the radio widgets to show rationales for each of the @@ -35706,4 +40115,4 @@ the linter and any warnings will be highlighted in the rendered output.`,default }) => string`,signature:{arguments:[{type:{name:"signature",type:"object",raw:`{ questionSymbol: string; questionNumber: string; -}`,signature:{properties:[{key:"questionSymbol",value:{name:"string",required:!0}},{key:"questionNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolQuestion",value:{name:"signature",type:"function",raw:"({sentenceSymbol}: {sentenceSymbol: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{sentenceSymbol: string}",signature:{properties:[{key:"sentenceSymbol",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineLabel",value:{name:"string",required:!0}},{key:"beginningPassage",value:{name:"string",required:!0}},{key:"beginningFootnotes",value:{name:"string",required:!0}},{key:"endPassage",value:{name:"string",required:!0}},{key:"questionMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"circleMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"sentenceMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"dragHandles",value:{name:"string",required:!0}},{key:"tapAddPoints",value:{name:"string",required:!0}},{key:"false",value:{name:"string",required:!0}},{key:"true",value:{name:"string",required:!0}},{key:"no",value:{name:"string",required:!0}},{key:"yes",value:{name:"string",required:!0}},{key:"chooseCorrectNum",value:{name:"string",required:!0}},{key:"notNoneOfTheAbove",value:{name:"string",required:!0}},{key:"noneOfTheAbove",value:{name:"string",required:!0}},{key:"chooseNumAnswers",value:{name:"signature",type:"function",raw:"({numCorrect}: {numCorrect: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{numCorrect: string}",signature:{properties:[{key:"numCorrect",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"chooseAllAnswers",value:{name:"string",required:!0}},{key:"chooseOneAnswer",value:{name:"string",required:!0}},{key:"choiceCheckedCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCheckedIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceChecked",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOut",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"crossOut",value:{name:"string",required:!0}},{key:"crossOutOption",value:{name:"string",required:!0}},{key:"crossOutChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"bringBack",value:{name:"string",required:!0}},{key:"openMenuForChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"letters",value:{name:"string",required:!0}},{key:"rightArrow",value:{name:"string",required:!0}},{key:"dontUnderstandUnits",value:{name:"string",required:!0}},{key:"checkSigFigs",value:{name:"string",required:!0}},{key:"answerNumericallyIncorrect",value:{name:"string",required:!0}},{key:"checkUnits",value:{name:"string",required:!0}},{key:"dontUnderstand",value:{name:"string",required:!0}},{key:"loading",value:{name:"string",required:!0}},{key:"videoTranscript",value:{name:"string",required:!0}},{key:"somethingWrong",value:{name:"string",required:!0}},{key:"videoWrapper",value:{name:"string",required:!0}},{key:"mathInputTitle",value:{name:"string",required:!0}},{key:"mathInputDescription",value:{name:"string",required:!0}},{key:"sin",value:{name:"string",required:!0}},{key:"cos",value:{name:"string",required:!0}},{key:"tan",value:{name:"string",required:!0}},{key:"simulationLoadFail",value:{name:"string",required:!0}},{key:"simulationLocaleWarning",value:{name:"string",required:!0}},{key:"addPoint",value:{name:"string",required:!0}},{key:"removePoint",value:{name:"string",required:!0}},{key:"graphKeyboardPrompt",value:{name:"string",required:!0}}]}},description:""}}};export{ia as D,$e as J,U as P,xe as R,sa as S,la as a,ua as b,da as c,ya as d,ga as e,ha as f,In as g,Cn as h,xn as i,vn as j,ma as k,Ge as l,kn as m,c as n,xt as p,oa as r,pa as s,Wn as u}; +}`,signature:{properties:[{key:"questionSymbol",value:{name:"string",required:!0}},{key:"questionNumber",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"symbolQuestion",value:{name:"signature",type:"function",raw:"({sentenceSymbol}: {sentenceSymbol: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{sentenceSymbol: string}",signature:{properties:[{key:"sentenceSymbol",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"lineLabel",value:{name:"string",required:!0}},{key:"beginningPassage",value:{name:"string",required:!0}},{key:"beginningFootnotes",value:{name:"string",required:!0}},{key:"endPassage",value:{name:"string",required:!0}},{key:"questionMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"circleMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"sentenceMarker",value:{name:"signature",type:"function",raw:"({number}: {number: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{number: string}",signature:{properties:[{key:"number",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"dragHandles",value:{name:"string",required:!0}},{key:"tapAddPoints",value:{name:"string",required:!0}},{key:"false",value:{name:"string",required:!0}},{key:"true",value:{name:"string",required:!0}},{key:"no",value:{name:"string",required:!0}},{key:"yes",value:{name:"string",required:!0}},{key:"chooseCorrectNum",value:{name:"string",required:!0}},{key:"notNoneOfTheAbove",value:{name:"string",required:!0}},{key:"noneOfTheAbove",value:{name:"string",required:!0}},{key:"chooseNumAnswers",value:{name:"signature",type:"function",raw:"({numCorrect}: {numCorrect: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{numCorrect: string}",signature:{properties:[{key:"numCorrect",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"chooseAllAnswers",value:{name:"string",required:!0}},{key:"chooseOneAnswer",value:{name:"string",required:!0}},{key:"choiceCheckedCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCheckedIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOutIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceIncorrect",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceChecked",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choiceCrossedOut",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"choice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"crossOut",value:{name:"string",required:!0}},{key:"crossOutOption",value:{name:"string",required:!0}},{key:"crossOutChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"bringBack",value:{name:"string",required:!0}},{key:"openMenuForChoice",value:{name:"signature",type:"function",raw:"({letter}: {letter: string}) => string",signature:{arguments:[{type:{name:"signature",type:"object",raw:"{letter: string}",signature:{properties:[{key:"letter",value:{name:"string",required:!0}}]}},name:""}],return:{name:"string"}},required:!0}},{key:"letters",value:{name:"string",required:!0}},{key:"rightArrow",value:{name:"string",required:!0}},{key:"dontUnderstandUnits",value:{name:"string",required:!0}},{key:"checkSigFigs",value:{name:"string",required:!0}},{key:"answerNumericallyIncorrect",value:{name:"string",required:!0}},{key:"checkUnits",value:{name:"string",required:!0}},{key:"dontUnderstand",value:{name:"string",required:!0}},{key:"loading",value:{name:"string",required:!0}},{key:"videoTranscript",value:{name:"string",required:!0}},{key:"somethingWrong",value:{name:"string",required:!0}},{key:"videoWrapper",value:{name:"string",required:!0}},{key:"mathInputTitle",value:{name:"string",required:!0}},{key:"mathInputDescription",value:{name:"string",required:!0}},{key:"sin",value:{name:"string",required:!0}},{key:"cos",value:{name:"string",required:!0}},{key:"tan",value:{name:"string",required:!0}},{key:"simulationLoadFail",value:{name:"string",required:!0}},{key:"simulationLocaleWarning",value:{name:"string",required:!0}},{key:"addPoint",value:{name:"string",required:!0}},{key:"removePoint",value:{name:"string",required:!0}},{key:"graphKeyboardPrompt",value:{name:"string",required:!0}}]}},description:""}}};export{ia as D,Ue as J,$ as P,xe as R,sa as S,la as a,ua as b,da as c,ya as d,ga as e,ha as f,In as g,Cn as h,xn as i,vn as j,ma as k,Ge as l,c as m,kn as n,xt as p,oa as r,pa as s,Wn as u}; diff --git a/assets/renderer-with-debug-ui-fbym8U_I.js b/assets/renderer-with-debug-ui-YzY7YHzw.js similarity index 99% rename from assets/renderer-with-debug-ui-fbym8U_I.js rename to assets/renderer-with-debug-ui-YzY7YHzw.js index d691da4ae0..d8b0a4f10f 100644 --- a/assets/renderer-with-debug-ui-fbym8U_I.js +++ b/assets/renderer-with-debug-ui-YzY7YHzw.js @@ -1,4 +1,4 @@ -import{j as e,a,F as v}from"./jsx-runtime-FVsy8kgq.js";import{B as u}from"./choice-E4eyMygy.js";import{V as r}from"./index-6h5t6F0w.js";import{P as w}from"./index-xuPsLuPk.js";import{S as f}from"./index-qUyqkRvh.js";import{S as k}from"./article-renderer-6f7Dak4j.js";import{H as d}from"./index-h_CiYGGb.js";import{r as o}from"./index-TT1qJ6UJ.js";import{S as q,R as y}from"./side-by-side-kpK-8vW0.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import{R as T}from"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import{u as R}from"./i18n-context-hxuRe8oU.js";import{r as A}from"./register-all-widgets-for-testing-qzjCjLVo.js";import"./index-IIMKO4_x.js";const O=""+new URL("device-mobile-o16X2EYh.svg",import.meta.url).href,j=({question:t,apiOptions:m,reviewMode:g=!1,...h})=>{A();const n=o.useRef(null),[i,p]=o.useState(null),[s,c]=o.useState(!1),{strings:b}=R();return e(q,{leftTitle:a(r,{style:{flexDirection:"row",alignItems:"center",width:"100%"},children:["Widget",e(r,{style:{marginLeft:"auto"},children:e(k,{icon:e(w,{icon:O}),checked:s,onChange:c})})]}),left:a(r,{children:[e(r,{className:s?"perseus-mobile":"",children:e(T,{ref:n,content:t.content,images:t.images,widgets:t.widgets,problemNum:0,apiOptions:{...m,isMobile:s},reviewMode:g,strings:b,...h})}),a(r,{style:{flexDirection:"row",alignItems:"center"},children:[e(u,{onClick:()=>{n.current&&p(n.current.guessAndScore())},children:"Check"}),e(f,{size:8}),e(u,{onClick:()=>{var l;(l=n.current)==null||l.showRationalesForCurrentlySelectedChoices()},children:"Show Rationales"})]}),i!=null&&a(v,{children:[e(d,{style:{marginTop:"10px"},children:"Guess"}),e(y,{quotesOnKeys:!1,enableClipboard:!1,src:i[0]}),e(d,{style:{marginTop:"10px"},children:"Score"}),e(y,{quotesOnKeys:!1,enableClipboard:!1,src:i[1]})]})]}),jsonObject:t})};j.__docgenInfo={description:"",methods:[],displayName:"RendererWithDebugUI",props:{question:{required:!0,tsType:{name:"signature",type:"object",raw:`{ +import{j as e,a,F as v}from"./jsx-runtime-FVsy8kgq.js";import{B as u}from"./choice-E4eyMygy.js";import{V as r}from"./index-6h5t6F0w.js";import{P as w}from"./index-xuPsLuPk.js";import{S as f}from"./index-qUyqkRvh.js";import{S as k}from"./article-renderer-TMdCDA85.js";import{H as d}from"./index-h_CiYGGb.js";import{r as o}from"./index-TT1qJ6UJ.js";import{S as q,R as y}from"./side-by-side-kpK-8vW0.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import{R as T}from"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import{u as R}from"./i18n-context-hxuRe8oU.js";import{r as A}from"./register-all-widgets-for-testing-xSlGtLC1.js";import"./index-IIMKO4_x.js";const O=""+new URL("device-mobile-o16X2EYh.svg",import.meta.url).href,j=({question:t,apiOptions:m,reviewMode:g=!1,...h})=>{A();const n=o.useRef(null),[i,p]=o.useState(null),[s,c]=o.useState(!1),{strings:b}=R();return e(q,{leftTitle:a(r,{style:{flexDirection:"row",alignItems:"center",width:"100%"},children:["Widget",e(r,{style:{marginLeft:"auto"},children:e(k,{icon:e(w,{icon:O}),checked:s,onChange:c})})]}),left:a(r,{children:[e(r,{className:s?"perseus-mobile":"",children:e(T,{ref:n,content:t.content,images:t.images,widgets:t.widgets,problemNum:0,apiOptions:{...m,isMobile:s},reviewMode:g,strings:b,...h})}),a(r,{style:{flexDirection:"row",alignItems:"center"},children:[e(u,{onClick:()=>{n.current&&p(n.current.guessAndScore())},children:"Check"}),e(f,{size:8}),e(u,{onClick:()=>{var l;(l=n.current)==null||l.showRationalesForCurrentlySelectedChoices()},children:"Show Rationales"})]}),i!=null&&a(v,{children:[e(d,{style:{marginTop:"10px"},children:"Guess"}),e(y,{quotesOnKeys:!1,enableClipboard:!1,src:i[0]}),e(d,{style:{marginTop:"10px"},children:"Score"}),e(y,{quotesOnKeys:!1,enableClipboard:!1,src:i[1]})]})]}),jsonObject:t})};j.__docgenInfo={description:"",methods:[],displayName:"RendererWithDebugUI",props:{question:{required:!0,tsType:{name:"signature",type:"object",raw:`{ // Translatable Markdown content to be rendered. May include references to // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)). // For each image found in this content, there can be an entry in the diff --git a/assets/section-control-button-c-G3Veu9.js b/assets/section-control-button-J8oVp9bZ.js similarity index 72% rename from assets/section-control-button-c-G3Veu9.js rename to assets/section-control-button-J8oVp9bZ.js index d97c9bbeea..4adda65cf3 100644 --- a/assets/section-control-button-c-G3Veu9.js +++ b/assets/section-control-button-J8oVp9bZ.js @@ -1 +1 @@ -import{j as o}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as i}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{C as p}from"./index-tFzzSRL2.js";import{c as s}from"./index-deFLJwr4.js";import{l as m}from"./index-awljIyHI.js";import{r as a}from"./index-TT1qJ6UJ.js";const{InlineIcon:l}=i;class c extends a.Component{render(){const{icon:r,onClick:e,title:n}=this.props;return o(p,{className:"section-control-button simple-button simple-button--small ",onClick:t=>{t.preventDefault(),e()},role:"button",hideDefaultFocusRing:!0,"aria-label":n,style:u.button,children:({hovered:t,focused:f,pressed:g})=>o(l,{...r})})}}const u=m.StyleSheet.create({button:{backgroundColor:s.gold,margin:2,paddingRight:10,paddingLeft:10,paddingBottom:2}});c.__docgenInfo={description:"",methods:[],displayName:"SectionControlButton",props:{icon:{required:!0,tsType:{name:"PropsFor",elements:[{name:"InlineIcon"}],raw:"PropsFor"},description:""},onClick:{required:!0,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},title:{required:!0,tsType:{name:"string"},description:""}}};export{c as S}; +import{j as o}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as i}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{C as p}from"./index-tFzzSRL2.js";import{c as s}from"./index-deFLJwr4.js";import{l as m}from"./index-awljIyHI.js";import{r as a}from"./index-TT1qJ6UJ.js";const{InlineIcon:l}=i;class c extends a.Component{render(){const{icon:r,onClick:e,title:n}=this.props;return o(p,{className:"section-control-button simple-button simple-button--small ",onClick:t=>{t.preventDefault(),e()},role:"button",hideDefaultFocusRing:!0,"aria-label":n,style:u.button,children:({hovered:t,focused:f,pressed:g})=>o(l,{...r})})}}const u=m.StyleSheet.create({button:{backgroundColor:s.gold,margin:2,paddingRight:10,paddingLeft:10,paddingBottom:2}});c.__docgenInfo={description:"",methods:[],displayName:"SectionControlButton",props:{icon:{required:!0,tsType:{name:"PropsFor",elements:[{name:"InlineIcon"}],raw:"PropsFor"},description:""},onClick:{required:!0,tsType:{name:"signature",type:"function",raw:"() => unknown",signature:{arguments:[],return:{name:"unknown"}}},description:""},title:{required:!0,tsType:{name:"string"},description:""}}};export{c as S}; diff --git a/assets/section-control-button.stories-rjqemyDY.js b/assets/section-control-button.stories-hTGUQWig.js similarity index 70% rename from assets/section-control-button.stories-rjqemyDY.js rename to assets/section-control-button.stories-hTGUQWig.js index 3fc07f6e57..4d8da31b0e 100644 --- a/assets/section-control-button.stories-rjqemyDY.js +++ b/assets/section-control-button.stories-hTGUQWig.js @@ -1,3 +1,3 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{c as p}from"./icon-paths-AuJwhOz7.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{S as e}from"./section-control-button-c-G3Veu9.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-h_CiYGGb.js";import"./index-dnMhQZ-1.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./shared-3pf9YZIg.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./answer-choices-uB4giKvU.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-tmJoP6pY.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./strings-OAjNfY6D.js";import"./bundle.esm-7jAAHVxW.js";import"./components-GHvuFaIn.js";import"./index-tFzzSRL2.js";const Yt={title:"PerseusEditor/Components/Section Control Button"},t=n=>m(e,{icon:p,onClick:()=>{},title:"Remove image widget"});t.__docgenInfo={description:"",methods:[],displayName:"ButtonForEditingSectionsOfContentWithInArticleEditor"};var o,r,i;t.parameters={...t.parameters,docs:{...(o=t.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import{c as p}from"./icon-paths-AuJwhOz7.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{S as e}from"./section-control-button-J8oVp9bZ.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-h_CiYGGb.js";import"./index-dnMhQZ-1.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./shared-3pf9YZIg.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./Popper-kGnKOid7.js";import"./answer-choices-xSqM961S.js";import"./index-xuPsLuPk.js";import"./minus-bold-ONmDo3Ve.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./asset-context-I7yIqWki.js";import"./tiny-invariant-bHgPayXn.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./video-transcript-link-WVgIZGhp.js";import"./arrow-square-out-bold-090vdhrx.js";import"./stub-tag-editor-Hmby24Jq.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./choice-none-above-HXEAXx7K.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./index-QCAhLhLD.js";import"./strings-OAjNfY6D.js";import"./bundle.esm-7jAAHVxW.js";import"./components-h6HHhmoA.js";import"./index-tFzzSRL2.js";const Yt={title:"PerseusEditor/Components/Section Control Button"},t=n=>m(e,{icon:p,onClick:()=>{},title:"Remove image widget"});t.__docgenInfo={description:"",methods:[],displayName:"ButtonForEditingSectionsOfContentWithInArticleEditor"};var o,r,i;t.parameters={...t.parameters,docs:{...(o=t.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return {}} title="Remove image widget" />; }`,...(i=(r=t.parameters)==null?void 0:r.docs)==null?void 0:i.source}}};const Zt=["ButtonForEditingSectionsOfContentWithInArticleEditor"];export{t as ButtonForEditingSectionsOfContentWithInArticleEditor,Zt as __namedExportsOrder,Yt as default}; diff --git a/assets/select-image-cimnxdnG.js b/assets/select-image--koiUF2W.js similarity index 65% rename from assets/select-image-cimnxdnG.js rename to assets/select-image--koiUF2W.js index 784774429b..f8663e1ca4 100644 --- a/assets/select-image-cimnxdnG.js +++ b/assets/select-image--koiUF2W.js @@ -1 +1 @@ -import{a as m,j as e}from"./jsx-runtime-FVsy8kgq.js";import{g as s}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{B as a}from"./choice-E4eyMygy.js";import{l as r}from"./index-awljIyHI.js";import{F as n}from"./form-wrapped-text-field-DtGz9PJ5.js";const{colors:l,typography:d}=s,c=({onChange:i,url:t})=>m("div",{children:[e("div",{className:r.css(o.title),children:"Image"}),m("div",{className:r.css(o.components),children:[e(n,{placeholder:"URL",grow:1,onChange:p=>i(p.target.value),value:t}),e("div",{className:r.css(o.spacer)}),e(a,{disabled:!t,"aria-label":t?"":"Not implemented. Use the 'Add Image' button in the editor to upload image, then copy the URL here.",onClick:()=>i(""),style:o.btn,children:t?"Remove":"Upload"})]})]}),o=r.StyleSheet.create({title:{...d.bodyXsmallBold,marginBottom:6,color:l.gray17},components:{display:"flex"},spacer:{width:16},btn:{minWidth:90}});c.__docgenInfo={description:"",methods:[],displayName:"SelectImage",props:{onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(url: string) => void",signature:{arguments:[{type:{name:"string"},name:"url"}],return:{name:"void"}}},description:""},url:{required:!0,tsType:{name:"string"},description:""}}};export{c as S}; +import{a as m,j as e}from"./jsx-runtime-FVsy8kgq.js";import{g as s}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{B as a}from"./choice-E4eyMygy.js";import{l as r}from"./index-awljIyHI.js";import{F as n}from"./form-wrapped-text-field-BopYavUW.js";const{colors:l,typography:d}=s,c=({onChange:i,url:t})=>m("div",{children:[e("div",{className:r.css(o.title),children:"Image"}),m("div",{className:r.css(o.components),children:[e(n,{placeholder:"URL",grow:1,onChange:p=>i(p.target.value),value:t}),e("div",{className:r.css(o.spacer)}),e(a,{disabled:!t,"aria-label":t?"":"Not implemented. Use the 'Add Image' button in the editor to upload image, then copy the URL here.",onClick:()=>i(""),style:o.btn,children:t?"Remove":"Upload"})]})]}),o=r.StyleSheet.create({title:{...d.bodyXsmallBold,marginBottom:6,color:l.gray17},components:{display:"flex"},spacer:{width:16},btn:{minWidth:90}});c.__docgenInfo={description:"",methods:[],displayName:"SelectImage",props:{onChange:{required:!0,tsType:{name:"signature",type:"function",raw:"(url: string) => void",signature:{arguments:[{type:{name:"string"},name:"url"}],return:{name:"void"}}},description:""},url:{required:!0,tsType:{name:"string"},description:""}}};export{c as S}; diff --git a/assets/select-image.stories-1gYN3jcx.js b/assets/select-image.stories-FuwCWNv6.js similarity index 75% rename from assets/select-image.stories-1gYN3jcx.js rename to assets/select-image.stories-FuwCWNv6.js index 89aafaed10..521ec53b9d 100644 --- a/assets/select-image.stories-1gYN3jcx.js +++ b/assets/select-image.stories-FuwCWNv6.js @@ -1,4 +1,4 @@ -import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{l as i}from"./index-awljIyHI.js";import{r as I}from"./index-TT1qJ6UJ.js";import{S}from"./select-image-cimnxdnG.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./form-wrapped-text-field-DtGz9PJ5.js";const ct={title:"PerseusEditor/Widgets/Label Image/Select Image"},f=i.StyleSheet.create({wrapper:{width:338}}),y=t=>r("div",{className:i.css(f.wrapper),children:r(S,{...t})}),_=()=>{const[t,e]=I.useState("");return r("div",{className:i.css(f.wrapper),children:r(S,{onChange:E=>e(E),url:t})})},o=t=>r(y,{...{url:"",onChange:()=>{}}}),p=t=>r(y,{...{url:"https://ka-perseus-images.s3.amazonaws.com/2ee5fc32e35c5178373b39fd304b325b2994c913.png",onChange:()=>{}}}),m=t=>r(_,{});o.__docgenInfo={description:"",methods:[],displayName:"Empty"};p.__docgenInfo={description:"",methods:[],displayName:"Filled"};m.__docgenInfo={description:"",methods:[],displayName:"Interactive"};var s,a,n;o.parameters={...o.parameters,docs:{...(s=o.parameters)==null?void 0:s.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{l as i}from"./index-awljIyHI.js";import{r as I}from"./index-TT1qJ6UJ.js";import{S}from"./select-image--koiUF2W.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./form-wrapped-text-field-BopYavUW.js";const ct={title:"PerseusEditor/Widgets/Label Image/Select Image"},f=i.StyleSheet.create({wrapper:{width:338}}),y=t=>r("div",{className:i.css(f.wrapper),children:r(S,{...t})}),_=()=>{const[t,e]=I.useState("");return r("div",{className:i.css(f.wrapper),children:r(S,{onChange:E=>e(E),url:t})})},o=t=>r(y,{...{url:"",onChange:()=>{}}}),p=t=>r(y,{...{url:"https://ka-perseus-images.s3.amazonaws.com/2ee5fc32e35c5178373b39fd304b325b2994c913.png",onChange:()=>{}}}),m=t=>r(_,{});o.__docgenInfo={description:"",methods:[],displayName:"Empty"};p.__docgenInfo={description:"",methods:[],displayName:"Filled"};m.__docgenInfo={description:"",methods:[],displayName:"Interactive"};var s,a,n;o.parameters={...o.parameters,docs:{...(s=o.parameters)==null?void 0:s.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const props = ({ url: "", onChange: () => {} diff --git a/assets/server-item-renderer-with-debug-ui-rx6QaX-9.js b/assets/server-item-renderer-with-debug-ui-xomgDBO_.js similarity index 99% rename from assets/server-item-renderer-with-debug-ui-rx6QaX-9.js rename to assets/server-item-renderer-with-debug-ui-xomgDBO_.js index e041105027..cfbb39eb2a 100644 --- a/assets/server-item-renderer-with-debug-ui-rx6QaX-9.js +++ b/assets/server-item-renderer-with-debug-ui-xomgDBO_.js @@ -1,4 +1,4 @@ -import{j as e,a,F as m}from"./jsx-runtime-FVsy8kgq.js";import{B as i}from"./choice-E4eyMygy.js";import{V as g}from"./index-6h5t6F0w.js";import{S as h}from"./index-qUyqkRvh.js";import{r as s}from"./index-TT1qJ6UJ.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import{r as p}from"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{K as c}from"./ke-score-ui-xy7p6xf5.js";import{S as b}from"./side-by-side-kpK-8vW0.js";import{s as v}from"./test-dependencies-UUeUFXqw.js";const w=({item:t,apiOptions:o,keypadElement:l})=>{const r=s.useRef(null),[u,d]=s.useState(null),y=o||Object.freeze({});return e(b,{leftTitle:"Renderer",left:a(m,{children:[e(p,{ref:r,problemNum:0,apiOptions:y,item:t,dependencies:v,keypadElement:l}),a(g,{style:{flexDirection:"row",alignItems:"center"},children:[e(i,{onClick:()=>{r.current&&d(r.current.scoreInput())},children:"Check"}),e(h,{size:8}),e(i,{onClick:()=>{var n;(n=r.current)==null||n.showRationalesForCurrentlySelectedChoices()},children:"Show Rationales"})]}),e(c,{score:u})]}),jsonObject:t})};w.__docgenInfo={description:"",methods:[],displayName:"ServerItemRendererWithDebugUI",props:{item:{required:!0,tsType:{name:"signature",type:"object",raw:`{ +import{j as e,a,F as m}from"./jsx-runtime-FVsy8kgq.js";import{B as i}from"./choice-E4eyMygy.js";import{V as g}from"./index-6h5t6F0w.js";import{S as h}from"./index-qUyqkRvh.js";import{r as s}from"./index-TT1qJ6UJ.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import{r as p}from"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{K as c}from"./ke-score-ui-xy7p6xf5.js";import{S as b}from"./side-by-side-kpK-8vW0.js";import{s as v}from"./test-dependencies-OZugV_HD.js";const w=({item:t,apiOptions:o,keypadElement:l})=>{const r=s.useRef(null),[u,d]=s.useState(null),y=o||Object.freeze({});return e(b,{leftTitle:"Renderer",left:a(m,{children:[e(p,{ref:r,problemNum:0,apiOptions:y,item:t,dependencies:v,keypadElement:l}),a(g,{style:{flexDirection:"row",alignItems:"center"},children:[e(i,{onClick:()=>{r.current&&d(r.current.scoreInput())},children:"Check"}),e(h,{size:8}),e(i,{onClick:()=>{var n;(n=r.current)==null||n.showRationalesForCurrentlySelectedChoices()},children:"Show Rationales"})]}),e(c,{score:u})]}),jsonObject:t})};w.__docgenInfo={description:"",methods:[],displayName:"ServerItemRendererWithDebugUI",props:{item:{required:!0,tsType:{name:"signature",type:"object",raw:`{ // The details of the question being asked to the user. question: PerseusRenderer; // A collection of hints to be offered to the user that support answering the question. diff --git a/assets/server-item-renderer.stories-tNcJTbEd.js b/assets/server-item-renderer.stories-g8W47qak.js similarity index 93% rename from assets/server-item-renderer.stories-tNcJTbEd.js rename to assets/server-item-renderer.stories-g8W47qak.js index 3cfa5e8eb7..93c37ae4ea 100644 --- a/assets/server-item-renderer.stories-tNcJTbEd.js +++ b/assets/server-item-renderer.stories-g8W47qak.js @@ -1,4 +1,4 @@ -import{j as t,a as s,F as K}from"./jsx-runtime-FVsy8kgq.js";import{r as x}from"./index-TT1qJ6UJ.js";import{S as i}from"./server-item-renderer-with-debug-ui-rx6QaX-9.js";import{s as G}from"./test-dependencies-UUeUFXqw.js";import{I as Q}from"./article-renderer-6f7Dak4j.js";import{S as Y}from"./multi-renderer-PglzmXdY.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./dependencies-8XILypbq.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./shared-3pf9YZIg.js";import"./base-radio-ffaiqOwN.js";import"./choice-none-above-tmJoP6pY.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./hud-FI3E3dT_.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./ke-score-ui-xy7p6xf5.js";import"./side-by-side-kpK-8vW0.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";import"./enums-x5qaTru7.js";import"./input-with-examples-x87iVHoc.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./answer-choices-uB4giKvU.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";const X={question:{content:"Enter the number $$-42$$ in the box: [[☃ input-number 1]]",images:{},widgets:{"input-number 1":{type:"input-number",graded:!0,options:{answerType:"number",value:"-42",simplify:"required",size:"normal",inexact:!1,maxError:.1}}}},hints:[{content:"Hint #1",images:{},widgets:{}},{content:"Hint #2",images:{},widgets:{}},{content:"Hint #3",images:{},widgets:{}}],answerArea:null,itemDataVersion:{major:0,minor:0},answer:null},ee={question:{content:`Enter the number $$1$$ in box one: [[☃ input-number 1]] +import{j as t,a as s,F as K}from"./jsx-runtime-FVsy8kgq.js";import{r as x}from"./index-TT1qJ6UJ.js";import{S as i}from"./server-item-renderer-with-debug-ui-xomgDBO_.js";import{s as G}from"./test-dependencies-OZugV_HD.js";import{I as Q}from"./article-renderer-TMdCDA85.js";import{S as Y}from"./multi-renderer-vtdVtdWv.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./dependencies-8XILypbq.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./index-J2t_5nK1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./shared-3pf9YZIg.js";import"./base-radio-TdBv-OLd.js";import"./choice-none-above-HXEAXx7K.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./hud-FI3E3dT_.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./ke-score-ui-xy7p6xf5.js";import"./side-by-side-kpK-8vW0.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";import"./enums-x5qaTru7.js";import"./input-with-examples-YZffrKhM.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./answer-choices-xSqM961S.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";const X={question:{content:"Enter the number $$-42$$ in the box: [[☃ input-number 1]]",images:{},widgets:{"input-number 1":{type:"input-number",graded:!0,options:{answerType:"number",value:"-42",simplify:"required",size:"normal",inexact:!1,maxError:.1}}}},hints:[{content:"Hint #1",images:{},widgets:{}},{content:"Hint #2",images:{},widgets:{}},{content:"Hint #3",images:{},widgets:{}}],answerArea:null,itemDataVersion:{major:0,minor:0},answer:null},ee={question:{content:`Enter the number $$1$$ in box one: [[☃ input-number 1]] Enter the number $$2$$ in box two: [[☃ input-number 2]]`,images:{},widgets:{"input-number 1":{type:"input-number",graded:!0,options:{answerType:"number",value:"1",simplify:"required",size:"normal",inexact:!1,maxError:.1}},"input-number 2":{type:"input-number",graded:!0,options:{answerType:"number",value:"2",simplify:"required",size:"normal",inexact:!1,maxError:.1}}}},hints:[{content:"Hint #1",images:{},widgets:{}},{content:"Hint #2",images:{},widgets:{}},{content:"Hint #3",images:{},widgets:{}}],answerArea:null,itemDataVersion:{major:0,minor:0},answer:null},te={question:{content:`Here's a radio widget: [[☃ radio 1]] diff --git a/assets/simple-keypad-input-zNNuoI83.js b/assets/simple-keypad-input-zNNuoI83.js index fe41a8fc4c..cfe53d5cbd 100644 --- a/assets/simple-keypad-input-zNNuoI83.js +++ b/assets/simple-keypad-input-zNNuoI83.js @@ -1 +1 @@ -import{j as u}from"./jsx-runtime-FVsy8kgq.js";import{k as i,M as a}from"./prop-types-3bOVFRDQ.js";import"./key-translator-IA-2V2LV.js";import"./mobile-keypad-hKjeQGNp.js";import"./button-assets-txIojR3b.js";import{K as m}from"./enums-x5qaTru7.js";import{P as t}from"./index-k-0mNqHS.js";import{r as l}from"./index-TT1qJ6UJ.js";class o extends l.Component{constructor(){super(...arguments),this._isMounted=!1}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1}focus(){this.refs.input.focus()}blur(){var n,e;typeof((n=this.refs.input)==null?void 0:n.blur)=="function"&&((e=this.refs.input)==null||e.blur())}getValue(){return this.props.value}render(){const n=this,{keypadElement:e,onFocus:r,value:s,...p}=n.props;return u(a,{ref:"input",keypadElement:e,onFocus:()=>{e?e.configure({keypadType:m.FRACTION},()=>{n._isMounted&&r&&r()}):r&&r()},value:s==null?"":""+s,...p})}}o.propTypes={keypadElement:i,onFocus:t.func,value:t.oneOfType([t.string,t.number])};o.__docgenInfo={description:"",methods:[{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"blur",docblock:null,modifiers:[],params:[],returns:null},{name:"getValue",docblock:null,modifiers:[],params:[],returns:{type:{name:"union",raw:"string | number",elements:[{name:"string"},{name:"number"}]}}}],displayName:"SimpleKeypadInput",props:{keypadElement:{description:"",type:{name:"custom",raw:"keypadElementPropType"},required:!1},onFocus:{description:"",type:{name:"func"},required:!1},value:{description:"",type:{name:"union",value:[{name:"string"},{name:"number"}]},required:!1}}};export{o as S}; +import{j as u}from"./jsx-runtime-FVsy8kgq.js";import{k as i,M as a}from"./prop-types-3bOVFRDQ.js";import"./key-translator-IA-2V2LV.js";import"./mobile-keypad-hKjeQGNp.js";import"./button-assets-txIojR3b.js";import{K as m}from"./enums-x5qaTru7.js";import{P as t}from"./index-0C4KXdeC.js";import{r as l}from"./index-TT1qJ6UJ.js";class o extends l.Component{constructor(){super(...arguments),this._isMounted=!1}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1}focus(){this.refs.input.focus()}blur(){var n,e;typeof((n=this.refs.input)==null?void 0:n.blur)=="function"&&((e=this.refs.input)==null||e.blur())}getValue(){return this.props.value}render(){const n=this,{keypadElement:e,onFocus:r,value:s,...p}=n.props;return u(a,{ref:"input",keypadElement:e,onFocus:()=>{e?e.configure({keypadType:m.FRACTION},()=>{n._isMounted&&r&&r()}):r&&r()},value:s==null?"":""+s,...p})}}o.propTypes={keypadElement:i,onFocus:t.func,value:t.oneOfType([t.string,t.number])};o.__docgenInfo={description:"",methods:[{name:"focus",docblock:null,modifiers:[],params:[],returns:null},{name:"blur",docblock:null,modifiers:[],params:[],returns:null},{name:"getValue",docblock:null,modifiers:[],params:[],returns:{type:{name:"union",raw:"string | number",elements:[{name:"string"},{name:"number"}]}}}],displayName:"SimpleKeypadInput",props:{keypadElement:{description:"",type:{name:"custom",raw:"keypadElementPropType"},required:!1},onFocus:{description:"",type:{name:"func"},required:!1},value:{description:"",type:{name:"union",value:[{name:"string"},{name:"number"}]},required:!1}}};export{o as S}; diff --git a/assets/simple-keypad-input.stories-tZsmCiIG.js b/assets/simple-keypad-input.stories-tZsmCiIG.js index 1dd1a80ba7..24e8c347d4 100644 --- a/assets/simple-keypad-input.stories-tZsmCiIG.js +++ b/assets/simple-keypad-input.stories-tZsmCiIG.js @@ -1,4 +1,4 @@ -import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{S as n}from"./simple-keypad-input-zNNuoI83.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./prop-types-3bOVFRDQ.js";import"./version-akiLXZts.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-k-0mNqHS.js";const c={onChange:()=>{},onFocus:()=>{},onBlur:()=>{}},w={title:"Perseus/Components/Simple Keypad Input"},t=u=>i(n,{...c}),r=u=>i(n,{...c,value:"Test value"});t.__docgenInfo={description:"",methods:[],displayName:"EmptyPropsObject"};r.__docgenInfo={description:"",methods:[],displayName:"CustomValue"};var e,o,p;t.parameters={...t.parameters,docs:{...(e=t.parameters)==null?void 0:e.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{S as n}from"./simple-keypad-input-zNNuoI83.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./prop-types-3bOVFRDQ.js";import"./version-akiLXZts.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./index-0C4KXdeC.js";const c={onChange:()=>{},onFocus:()=>{},onBlur:()=>{}},w={title:"Perseus/Components/Simple Keypad Input"},t=u=>i(n,{...c}),r=u=>i(n,{...c,value:"Test value"});t.__docgenInfo={description:"",methods:[],displayName:"EmptyPropsObject"};r.__docgenInfo={description:"",methods:[],displayName:"CustomValue"};var e,o,p;t.parameters={...t.parameters,docs:{...(e=t.parameters)==null?void 0:e.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(p=(o=t.parameters)==null?void 0:o.docs)==null?void 0:p.source}}};var m,s,a;r.parameters={...r.parameters,docs:{...(m=r.parameters)==null?void 0:m.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/sortable-MNMZ70x0.js b/assets/sortable-1zDjBYMZ.js similarity index 98% rename from assets/sortable-MNMZ70x0.js rename to assets/sortable-1zDjBYMZ.js index 6cd24c4c39..13cc263e5b 100644 --- a/assets/sortable-MNMZ70x0.js +++ b/assets/sortable-1zDjBYMZ.js @@ -1,4 +1,4 @@ -import{j as c,a as A,F as I}from"./jsx-runtime-FVsy8kgq.js";import{l as S,R as T,p as P}from"./renderer-vBOYiNCS.js";import{C as D}from"./svg-image-VUqtnnD6.js";import{l as k}from"./index-awljIyHI.js";import{$ as d,_ as i}from"./jquery-yG1GhClm.js";import{r as x}from"./index-TT1qJ6UJ.js";import{R as g}from"./index-7vsPyIck.js";import{g as U}from"./dependencies-8XILypbq.js";import{C as O}from"./perseus-api-mOiZT07d.js";import{U as v}from"./util-XcxTwqb0.js";import{P as F}from"./i18n-context-hxuRe8oU.js";const C=(R,e)=>{const t=R.offsetParent();return{top:e.top+t.scrollTop(),left:e.left+t.scrollLeft()}};class E extends x.Component{render(){const{layout:e}=this.props,t=k.css(p.card,p.placeholder,e==="horizontal"&&p.horizontalCard),n={width:this.props.width,height:this.props.height};return this.props.margin!=null&&(n.margin=this.props.margin),c("li",{className:t,style:n})}}const M=class M extends x.Component{constructor(){super(...arguments),this.animationFrameRequest=null,this.state={startPosition:{left:0,top:0},startMouse:{left:0,top:0},mouse:{left:0,top:0},dragging:!1},this.getCurrentPosition=()=>({left:this.state.startPosition.left+this.state.mouse.left-this.state.startMouse.left,top:this.state.startPosition.top+this.state.mouse.top-this.state.startMouse.top}),this.bindMouseMoveUp=()=>{this.isMouseMoveUpBound=!0,d(document).on("mousemove",this.onMouseMove),d(document).on("mouseup",this.onMouseUp)},this.unbindMouseMoveUp=()=>{this.isMouseMoveUpBound=!1,d(document).off("mousemove",this.onMouseMove),d(document).off("mouseup",this.onMouseUp)},this.onMouseDown=e=>{if(this.props.state!=="static"||!(e.button===0||e.touches!=null&&e.touches.length===1))return;e.preventDefault();const t=v.extractPointerLocation(e);this.animationFrameRequest=requestAnimationFrame(()=>{const n=d(g.findDOMNode(this)),o=n.position(),r=C(n,o);t&&this._mounted&&this.setState({startPosition:r,startMouse:t,mouse:t,dragging:!0},function(){this.bindMouseMoveUp(),this.props.onMouseDown()})})},this.onMouseMove=e=>{if(this.props.state!=="dragging"||!this.state.dragging)return;e.preventDefault();const n=v.extractPointerLocation(e);n&&(this.animationFrameRequest=requestAnimationFrame(()=>{this.setState({mouse:n},this.props.onMouseMove)}))},this.onMouseUp=e=>{if(this.props.state!=="dragging"||!this.state.dragging)return;e.preventDefault(),v.extractPointerLocation(e)&&(this.setState({dragging:!1}),this.unbindMouseMoveUp(),this.props.onMouseUp())}}componentDidMount(){this._mounted=!0,this.isMouseMoveUpBound=!1,document.addEventListener("touchmove",this.onMouseMove,v.supportsPassiveEvents()?{passive:!1}:!1)}componentDidUpdate(e){if(this.props.state!==e.state)if(this.props.state==="animating"&&this.props.endPosition){const t=this.getCurrentPosition(),n=15*Math.sqrt(Math.sqrt(Math.pow(this.props.endPosition.left-t.left,2)+Math.pow(this.props.endPosition.top-t.top,2)));d(g.findDOMNode(this)).animate(this.props.endPosition,{duration:Math.max(n,1),complete:this.props.onAnimationEnd})}else this.props.state==="static"&&d(g.findDOMNode(this)).finish()}componentWillUnmount(){this._mounted=!1,this.isMouseMoveUpBound&&this.unbindMouseMoveUp(),this.animationFrameRequest&&cancelAnimationFrame(this.animationFrameRequest),document.removeEventListener("touchmove",this.onMouseMove)}render(){const{includePadding:e,layout:t,state:n}=this.props;let o=k.css(p.card,p.draggable,t==="horizontal"&&p.horizontalCard,t==="vertical"&&p.verticalCard,n==="dragging"&&p.dragging,n==="disabled"&&p.disabled,!e&&p.unpaddedCard)+" "+O.INTERACTIVE+" perseus-sortable-draggable";e||(o+=" perseus-sortable-draggable-unpadded");const r={position:"static"};return(this.props.state==="dragging"||this.props.state==="animating")&&i.extend(r,{position:"absolute"},this.getCurrentPosition()),this.props.width&&(r.width=this.props.width+1),this.props.height&&(r.height=this.props.height),this.props.margin!=null&&(r.margin=this.props.margin),c("li",{className:o,style:r,onMouseDown:this.onMouseDown,onTouchStart:this.onMouseDown,onTouchMove:this.onMouseMove,onTouchEnd:this.onMouseUp,onTouchCancel:this.onMouseUp,children:c(T,{content:this.props.content,linterContext:P(this.props.linterContext,"draggable"),onRender:this.props.onRender,strings:this.context.strings})})}};M.contextType=F,M.defaultProps={includePadding:!0,type:"static",linterContext:S};let w=M;const f=class f extends x.Component{constructor(e){super(e),this.remeasureItems=i.debounce(()=>{this.setState({items:f.clearItemMeasurements(this.state.items)})},20),this.state={items:f.itemsFromProps(this.props),texRendererLoaded:!1}}static itemsFromProps(e){const t=e.disabled?"disabled":"static";return e.options.map((n,o)=>({option:n,key:o,state:t,width:0,height:0}))}static clearItemMeasurements(e){return e.map(t=>({...t,width:0,height:0}))}UNSAFE_componentWillReceiveProps(e){const t=this.props;i.isEqual(e.options,t.options)?(e.layout!==t.layout||e.padding!==t.padding||e.disabled!==t.disabled||!i.isEqual(e.constraints,t.constraints))&&this.setState({items:f.clearItemMeasurements(this.state.items)}):this.setState({items:f.itemsFromProps(e)})}componentDidUpdate(){this.state.items.length&&!this.state.items[0].width&&!this.state.items[0].height&&setTimeout(()=>{this.measureItems()},0)}measureItems(){let e=[...this.state.items];const t=i.map(e,function(l){return d(g.findDOMNode(this.refs[l.key]))},this),n=i.invoke(t,"outerWidth"),o=i.invoke(t,"outerHeight"),{constraints:r,layout:u}=this.props;let a=null;r!=null&&r.width?a=i.max(n.concat(r.width)):u==="vertical"&&(a=i.max(n));let s=null;r!=null&&r.height?s=i.max(o.concat(r.height)):u==="horizontal"&&(s=i.max(o)),e=i.map(e,function(l,m){return l.width=a||n[m],l.height=s||o[m],l}),this.setState({items:e},()=>{this.props.onMeasure&&this.props.onMeasure({widths:n,heights:o})})}onMouseDown(e){const t=i.map(this.state.items,function(n){return n.key===e&&(n.state="dragging"),n});this.setState({items:t})}moveOptionToIndex(e,t){const{items:n}=this.state;if(t<0||t>n.length)throw new Error(`index ${t} out of bounds`);const o=i.clone(n),r=n.filter(a=>a.option===e)[0];if(r==null)throw new Error(`option ${e} not found`);const u=n.findIndex(a=>a.key===r.key);o.splice(u,1),o.splice(t,0,r),this.setState({items:o}),this.props.onChange&&this.props.onChange({})}onMouseMove(e){const t=d(g.findDOMNode(this.refs[e])),n=d(g.findDOMNode(this)),o=i.clone(this.state.items),r=i.findWhere(this.state.items,{key:e}),u=this.props.margin||0,a=i.indexOf(o,r);let s=0;if(o.splice(a,1),this.props.layout==="horizontal"){const l=t.offset().left-n.offset().left;let m=0,h;i.each(o,function(y){h=y.width,l>m+h/2&&(s+=1),m+=h+u})}else{const l=t.offset().top-n.offset().top;let m=0,h;i.each(o,function(y){h=y.height,l>m+h/2&&(s+=1),m+=h+u})}s!==a&&(o.splice(s,0,r),this.setState({items:o}))}onMouseUp(e){const t=requestAnimationFrame(()=>{const n=i.map(this.state.items,function(o){if(o.key===e){o.state="animating";const r=d(g.findDOMNode(this.refs["placeholder_"+e])),u=r.position(),a=C(r,u);o.endPosition=a}return o},this);this.setState({items:n}),this.props.onChange&&this.props.onChange({})});this.animationFrameRequest=t}onAnimationEnd(e){const t=i.map(this.state.items,function(n){return n.key===e&&(n.state="static"),n});this.setState({items:t})}getOptions(){return i.pluck(this.state.items,"option")}render(){var u,a;if(this.props.waitForTexRendererToLoad&&!this.state.texRendererLoaded){const{TeX:s}=U();return A(I,{children:[c(D,{}),c("div",{style:{display:"none"},children:c(s,{onRender:()=>this.setState({texRendererLoaded:!0}),children:"1"})})]})}const e=[],{layout:t}=this.props,n=k.css(p.sortable)+" perseus-sortable",o=((u=this.props.constraints)==null?void 0:u.width)||t==="vertical",r=((a=this.props.constraints)==null?void 0:a.height)||t==="horizontal";return i.each(this.state.items,function(s,l,m){const h=l===m.length-1,y=s.state==="static"||s.state==="disabled";let b;this.props.layout==="horizontal"?b="0 "+this.props.margin+"px 0 0":this.props.layout==="vertical"&&(b="0 0 "+this.props.margin+"px 0"),e.push(c(w,{content:s.option,state:s.state,ref:s.key,width:o?s.width:void 0,height:r?s.height:void 0,layout:t,includePadding:this.props.padding,margin:h&&y?0:b,endPosition:s.endPosition,linterContext:P(this.props.linterContext,"sortable"),onRender:this.remeasureItems,onMouseDown:this.onMouseDown.bind(this,s.key),onMouseMove:this.onMouseMove.bind(this,s.key),onMouseUp:this.onMouseUp.bind(this,s.key),onTouchMove:this.onMouseMove.bind(this,s.key),onTouchEnd:this.onMouseUp.bind(this,s.key),onTouchCancel:this.onMouseUp.bind(this,s.key),onAnimationEnd:this.onAnimationEnd.bind(this,s.key)},s.key)),(s.state==="dragging"||s.state==="animating")&&e.push(c(E,{ref:"placeholder_"+s.key,width:s.width,height:s.height,layout:t,margin:h?0:b},"placeholder_"+s.key))},this),c("ul",{className:n,children:e})}};f.defaultProps={layout:"horizontal",padding:!0,disabled:!1,constraints:{},onMeasure:function(){},margin:5,onChange:function(){},linterContext:S,waitForTexRendererToLoad:!0};let q=f;const p=k.StyleSheet.create({sortable:{boxSizing:"border-box",float:"left",padding:0,margin:0},card:{boxSizing:"border-box",background:"#fff",border:"1px solid #ddd",borderRadius:4,cursor:"pointer",minWidth:25,minHeight:44,padding:10,listStyleType:"none",userSelect:"none",touchAction:"none"},placeholder:{background:"#ddd",border:"1px solid #ccc"},draggable:{textAlign:"center"},horizontalCard:{float:"left",cursor:"ew-resize"},verticalCard:{maxWidth:"100%",cursor:"ns-resize"},unpaddedCard:{padding:0},dragging:{background:"#ffedcd",opacity:.8},disabled:{backgroundColor:"inherit",border:"1px solid transparent",cursor:"default"}});q.__docgenInfo={description:"",methods:[{name:"itemsFromProps",docblock:null,modifiers:["static"],params:[{name:"props",optional:!1,type:{name:"signature",type:"object",raw:`{ +import{j as c,a as A,F as I}from"./jsx-runtime-FVsy8kgq.js";import{l as S,R as T,p as P}from"./renderer-hPmI_Chp.js";import{C as D}from"./svg-image-RL9NlJEY.js";import{l as k}from"./index-awljIyHI.js";import{$ as d,_ as i}from"./jquery-yG1GhClm.js";import{r as x}from"./index-TT1qJ6UJ.js";import{R as g}from"./index-7vsPyIck.js";import{g as U}from"./dependencies-8XILypbq.js";import{C as O}from"./perseus-api-mOiZT07d.js";import{U as v}from"./util-YrNvlCNO.js";import{P as F}from"./i18n-context-hxuRe8oU.js";const C=(R,e)=>{const t=R.offsetParent();return{top:e.top+t.scrollTop(),left:e.left+t.scrollLeft()}};class E extends x.Component{render(){const{layout:e}=this.props,t=k.css(p.card,p.placeholder,e==="horizontal"&&p.horizontalCard),n={width:this.props.width,height:this.props.height};return this.props.margin!=null&&(n.margin=this.props.margin),c("li",{className:t,style:n})}}const M=class M extends x.Component{constructor(){super(...arguments),this.animationFrameRequest=null,this.state={startPosition:{left:0,top:0},startMouse:{left:0,top:0},mouse:{left:0,top:0},dragging:!1},this.getCurrentPosition=()=>({left:this.state.startPosition.left+this.state.mouse.left-this.state.startMouse.left,top:this.state.startPosition.top+this.state.mouse.top-this.state.startMouse.top}),this.bindMouseMoveUp=()=>{this.isMouseMoveUpBound=!0,d(document).on("mousemove",this.onMouseMove),d(document).on("mouseup",this.onMouseUp)},this.unbindMouseMoveUp=()=>{this.isMouseMoveUpBound=!1,d(document).off("mousemove",this.onMouseMove),d(document).off("mouseup",this.onMouseUp)},this.onMouseDown=e=>{if(this.props.state!=="static"||!(e.button===0||e.touches!=null&&e.touches.length===1))return;e.preventDefault();const t=v.extractPointerLocation(e);this.animationFrameRequest=requestAnimationFrame(()=>{const n=d(g.findDOMNode(this)),o=n.position(),r=C(n,o);t&&this._mounted&&this.setState({startPosition:r,startMouse:t,mouse:t,dragging:!0},function(){this.bindMouseMoveUp(),this.props.onMouseDown()})})},this.onMouseMove=e=>{if(this.props.state!=="dragging"||!this.state.dragging)return;e.preventDefault();const n=v.extractPointerLocation(e);n&&(this.animationFrameRequest=requestAnimationFrame(()=>{this.setState({mouse:n},this.props.onMouseMove)}))},this.onMouseUp=e=>{if(this.props.state!=="dragging"||!this.state.dragging)return;e.preventDefault(),v.extractPointerLocation(e)&&(this.setState({dragging:!1}),this.unbindMouseMoveUp(),this.props.onMouseUp())}}componentDidMount(){this._mounted=!0,this.isMouseMoveUpBound=!1,document.addEventListener("touchmove",this.onMouseMove,v.supportsPassiveEvents()?{passive:!1}:!1)}componentDidUpdate(e){if(this.props.state!==e.state)if(this.props.state==="animating"&&this.props.endPosition){const t=this.getCurrentPosition(),n=15*Math.sqrt(Math.sqrt(Math.pow(this.props.endPosition.left-t.left,2)+Math.pow(this.props.endPosition.top-t.top,2)));d(g.findDOMNode(this)).animate(this.props.endPosition,{duration:Math.max(n,1),complete:this.props.onAnimationEnd})}else this.props.state==="static"&&d(g.findDOMNode(this)).finish()}componentWillUnmount(){this._mounted=!1,this.isMouseMoveUpBound&&this.unbindMouseMoveUp(),this.animationFrameRequest&&cancelAnimationFrame(this.animationFrameRequest),document.removeEventListener("touchmove",this.onMouseMove)}render(){const{includePadding:e,layout:t,state:n}=this.props;let o=k.css(p.card,p.draggable,t==="horizontal"&&p.horizontalCard,t==="vertical"&&p.verticalCard,n==="dragging"&&p.dragging,n==="disabled"&&p.disabled,!e&&p.unpaddedCard)+" "+O.INTERACTIVE+" perseus-sortable-draggable";e||(o+=" perseus-sortable-draggable-unpadded");const r={position:"static"};return(this.props.state==="dragging"||this.props.state==="animating")&&i.extend(r,{position:"absolute"},this.getCurrentPosition()),this.props.width&&(r.width=this.props.width+1),this.props.height&&(r.height=this.props.height),this.props.margin!=null&&(r.margin=this.props.margin),c("li",{className:o,style:r,onMouseDown:this.onMouseDown,onTouchStart:this.onMouseDown,onTouchMove:this.onMouseMove,onTouchEnd:this.onMouseUp,onTouchCancel:this.onMouseUp,children:c(T,{content:this.props.content,linterContext:P(this.props.linterContext,"draggable"),onRender:this.props.onRender,strings:this.context.strings})})}};M.contextType=F,M.defaultProps={includePadding:!0,type:"static",linterContext:S};let w=M;const f=class f extends x.Component{constructor(e){super(e),this.remeasureItems=i.debounce(()=>{this.setState({items:f.clearItemMeasurements(this.state.items)})},20),this.state={items:f.itemsFromProps(this.props),texRendererLoaded:!1}}static itemsFromProps(e){const t=e.disabled?"disabled":"static";return e.options.map((n,o)=>({option:n,key:o,state:t,width:0,height:0}))}static clearItemMeasurements(e){return e.map(t=>({...t,width:0,height:0}))}UNSAFE_componentWillReceiveProps(e){const t=this.props;i.isEqual(e.options,t.options)?(e.layout!==t.layout||e.padding!==t.padding||e.disabled!==t.disabled||!i.isEqual(e.constraints,t.constraints))&&this.setState({items:f.clearItemMeasurements(this.state.items)}):this.setState({items:f.itemsFromProps(e)})}componentDidUpdate(){this.state.items.length&&!this.state.items[0].width&&!this.state.items[0].height&&setTimeout(()=>{this.measureItems()},0)}measureItems(){let e=[...this.state.items];const t=i.map(e,function(l){return d(g.findDOMNode(this.refs[l.key]))},this),n=i.invoke(t,"outerWidth"),o=i.invoke(t,"outerHeight"),{constraints:r,layout:u}=this.props;let a=null;r!=null&&r.width?a=i.max(n.concat(r.width)):u==="vertical"&&(a=i.max(n));let s=null;r!=null&&r.height?s=i.max(o.concat(r.height)):u==="horizontal"&&(s=i.max(o)),e=i.map(e,function(l,m){return l.width=a||n[m],l.height=s||o[m],l}),this.setState({items:e},()=>{this.props.onMeasure&&this.props.onMeasure({widths:n,heights:o})})}onMouseDown(e){const t=i.map(this.state.items,function(n){return n.key===e&&(n.state="dragging"),n});this.setState({items:t})}moveOptionToIndex(e,t){const{items:n}=this.state;if(t<0||t>n.length)throw new Error(`index ${t} out of bounds`);const o=i.clone(n),r=n.filter(a=>a.option===e)[0];if(r==null)throw new Error(`option ${e} not found`);const u=n.findIndex(a=>a.key===r.key);o.splice(u,1),o.splice(t,0,r),this.setState({items:o}),this.props.onChange&&this.props.onChange({})}onMouseMove(e){const t=d(g.findDOMNode(this.refs[e])),n=d(g.findDOMNode(this)),o=i.clone(this.state.items),r=i.findWhere(this.state.items,{key:e}),u=this.props.margin||0,a=i.indexOf(o,r);let s=0;if(o.splice(a,1),this.props.layout==="horizontal"){const l=t.offset().left-n.offset().left;let m=0,h;i.each(o,function(y){h=y.width,l>m+h/2&&(s+=1),m+=h+u})}else{const l=t.offset().top-n.offset().top;let m=0,h;i.each(o,function(y){h=y.height,l>m+h/2&&(s+=1),m+=h+u})}s!==a&&(o.splice(s,0,r),this.setState({items:o}))}onMouseUp(e){const t=requestAnimationFrame(()=>{const n=i.map(this.state.items,function(o){if(o.key===e){o.state="animating";const r=d(g.findDOMNode(this.refs["placeholder_"+e])),u=r.position(),a=C(r,u);o.endPosition=a}return o},this);this.setState({items:n}),this.props.onChange&&this.props.onChange({})});this.animationFrameRequest=t}onAnimationEnd(e){const t=i.map(this.state.items,function(n){return n.key===e&&(n.state="static"),n});this.setState({items:t})}getOptions(){return i.pluck(this.state.items,"option")}render(){var u,a;if(this.props.waitForTexRendererToLoad&&!this.state.texRendererLoaded){const{TeX:s}=U();return A(I,{children:[c(D,{}),c("div",{style:{display:"none"},children:c(s,{onRender:()=>this.setState({texRendererLoaded:!0}),children:"1"})})]})}const e=[],{layout:t}=this.props,n=k.css(p.sortable)+" perseus-sortable",o=((u=this.props.constraints)==null?void 0:u.width)||t==="vertical",r=((a=this.props.constraints)==null?void 0:a.height)||t==="horizontal";return i.each(this.state.items,function(s,l,m){const h=l===m.length-1,y=s.state==="static"||s.state==="disabled";let b;this.props.layout==="horizontal"?b="0 "+this.props.margin+"px 0 0":this.props.layout==="vertical"&&(b="0 0 "+this.props.margin+"px 0"),e.push(c(w,{content:s.option,state:s.state,ref:s.key,width:o?s.width:void 0,height:r?s.height:void 0,layout:t,includePadding:this.props.padding,margin:h&&y?0:b,endPosition:s.endPosition,linterContext:P(this.props.linterContext,"sortable"),onRender:this.remeasureItems,onMouseDown:this.onMouseDown.bind(this,s.key),onMouseMove:this.onMouseMove.bind(this,s.key),onMouseUp:this.onMouseUp.bind(this,s.key),onTouchMove:this.onMouseMove.bind(this,s.key),onTouchEnd:this.onMouseUp.bind(this,s.key),onTouchCancel:this.onMouseUp.bind(this,s.key),onAnimationEnd:this.onAnimationEnd.bind(this,s.key)},s.key)),(s.state==="dragging"||s.state==="animating")&&e.push(c(E,{ref:"placeholder_"+s.key,width:s.width,height:s.height,layout:t,margin:h?0:b},"placeholder_"+s.key))},this),c("ul",{className:n,children:e})}};f.defaultProps={layout:"horizontal",padding:!0,disabled:!1,constraints:{},onMeasure:function(){},margin:5,onChange:function(){},linterContext:S,waitForTexRendererToLoad:!0};let q=f;const p=k.StyleSheet.create({sortable:{boxSizing:"border-box",float:"left",padding:0,margin:0},card:{boxSizing:"border-box",background:"#fff",border:"1px solid #ddd",borderRadius:4,cursor:"pointer",minWidth:25,minHeight:44,padding:10,listStyleType:"none",userSelect:"none",touchAction:"none"},placeholder:{background:"#ddd",border:"1px solid #ccc"},draggable:{textAlign:"center"},horizontalCard:{float:"left",cursor:"ew-resize"},verticalCard:{maxWidth:"100%",cursor:"ns-resize"},unpaddedCard:{padding:0},dragging:{background:"#ffedcd",opacity:.8},disabled:{backgroundColor:"inherit",border:"1px solid transparent",cursor:"default"}});q.__docgenInfo={description:"",methods:[{name:"itemsFromProps",docblock:null,modifiers:["static"],params:[{name:"props",optional:!1,type:{name:"signature",type:"object",raw:`{ disabled: boolean; options: ReadonlyArray; }`,signature:{properties:[{key:"disabled",value:{name:"boolean",required:!0}},{key:"options",value:{name:"ReadonlyArray",elements:[{name:"string"}],raw:"ReadonlyArray",required:!0}}]}}}],returns:{type:{name:"ReadonlyArray",elements:[{name:"signature",type:"object",raw:`{ diff --git a/assets/sortable.stories-QYY7vNb_.js b/assets/sortable.stories-0t9Q6btI.js similarity index 92% rename from assets/sortable.stories-QYY7vNb_.js rename to assets/sortable.stories-0t9Q6btI.js index 4fb87c36a0..a6602f31a7 100644 --- a/assets/sortable.stories-QYY7vNb_.js +++ b/assets/sortable.stories-0t9Q6btI.js @@ -1,4 +1,4 @@ -import{j as t}from"./jsx-runtime-FVsy8kgq.js";import{S as r}from"./sortable-MNMZ70x0.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./renderer-vBOYiNCS.js";import"./version-akiLXZts.js";import"./util-XcxTwqb0.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";const m=["Option 1","Option 2","Option 3"],lt={title:"Perseus/Components/Sortable"},o=e=>t(r,{layout:"horizontal",options:["a","b","c"],waitForTexRendererToLoad:!1}),a=e=>t(r,{layout:"vertical",options:["a","b","c"],waitForTexRendererToLoad:!1}),s=e=>t(r,{options:m}),i=e=>t(r,{options:m,padding:!1}),n=e=>t(r,{options:m,margin:64}),p=e=>t(r,{options:m,disabled:!0}),c=e=>t(r,{options:m,constraints:{height:128,width:256}});o.__docgenInfo={description:"",methods:[],displayName:"SortableHorizontalExample"};a.__docgenInfo={description:"",methods:[],displayName:"SortableVerticalExample"};s.__docgenInfo={description:"",methods:[],displayName:"BasicSortableOptionsTest"};i.__docgenInfo={description:"",methods:[],displayName:"BasicSortableOptionsTestWithNoPadding"};n.__docgenInfo={description:"",methods:[],displayName:"BasicSortableOptionsTestWithLargeMargin"};p.__docgenInfo={description:"",methods:[],displayName:"BasicSortableOptionsTestDisabled"};c.__docgenInfo={description:"",methods:[],displayName:"BasicSortableOptionsTestWithWidthAndHeightConstraints"};var d,l,g;o.parameters={...o.parameters,docs:{...(d=o.parameters)==null?void 0:d.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as t}from"./jsx-runtime-FVsy8kgq.js";import{S as r}from"./sortable-1zDjBYMZ.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./renderer-hPmI_Chp.js";import"./version-akiLXZts.js";import"./util-YrNvlCNO.js";import"./jquery-yG1GhClm.js";import"./invariant-bu5zBsRS.js";import"./index-J2t_5nK1.js";import"./index-dnMhQZ-1.js";import"./index-7vsPyIck.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";const m=["Option 1","Option 2","Option 3"],lt={title:"Perseus/Components/Sortable"},o=e=>t(r,{layout:"horizontal",options:["a","b","c"],waitForTexRendererToLoad:!1}),a=e=>t(r,{layout:"vertical",options:["a","b","c"],waitForTexRendererToLoad:!1}),s=e=>t(r,{options:m}),i=e=>t(r,{options:m,padding:!1}),n=e=>t(r,{options:m,margin:64}),p=e=>t(r,{options:m,disabled:!0}),c=e=>t(r,{options:m,constraints:{height:128,width:256}});o.__docgenInfo={description:"",methods:[],displayName:"SortableHorizontalExample"};a.__docgenInfo={description:"",methods:[],displayName:"SortableVerticalExample"};s.__docgenInfo={description:"",methods:[],displayName:"BasicSortableOptionsTest"};i.__docgenInfo={description:"",methods:[],displayName:"BasicSortableOptionsTestWithNoPadding"};n.__docgenInfo={description:"",methods:[],displayName:"BasicSortableOptionsTestWithLargeMargin"};p.__docgenInfo={description:"",methods:[],displayName:"BasicSortableOptionsTestDisabled"};c.__docgenInfo={description:"",methods:[],displayName:"BasicSortableOptionsTestWithWidthAndHeightConstraints"};var d,l,g;o.parameters={...o.parameters,docs:{...(d=o.parameters)==null?void 0:d.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(g=(l=o.parameters)==null?void 0:l.docs)==null?void 0:g.source}}};var u,S,b;a.parameters={...a.parameters,docs:{...(u=a.parameters)==null?void 0:u.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/sorter-editor-5DYvFg1M.js b/assets/sorter-editor-rLrUJXLc.js similarity index 81% rename from assets/sorter-editor-5DYvFg1M.js rename to assets/sorter-editor-rLrUJXLc.js index 0a66e2b055..e1cf037ce8 100644 --- a/assets/sorter-editor-5DYvFg1M.js +++ b/assets/sorter-editor-rLrUJXLc.js @@ -1 +1 @@ -import{a as t,j as e}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import{_ as c}from"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as h}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{C as u}from"./index-QCAhLhLD.js";import{P as i}from"./index-0C4KXdeC.js";import{r as m}from"./index-TT1qJ6UJ.js";const{InfoTip:n,TextListEditor:f}=h,s="horizontal",p="vertical",o=class o extends m.Component{constructor(){super(...arguments),this.onLayoutChange=r=>{this.props.onChange({layout:r.target.value})},this.serialize=()=>c.pick(this.props,"correct","layout","padding")}render(){const r=this;return t("div",{children:[t("div",{children:[" ","Correct answer:"," ",e(n,{children:e("p",{children:"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."})})]}),e(f,{options:this.props.correct,onChange:function(a,d){r.props.onChange({correct:a},d)},layout:this.props.layout}),t("div",{children:[t("label",{children:[" ","Layout:"," ",t("select",{value:this.props.layout,onChange:this.onLayoutChange,children:[e("option",{value:s,children:"Horizontal"}),e("option",{value:p,children:"Vertical"})]})]}),e(n,{children:e("p",{children:"Use the horizontal layout for short text and small images. The vertical layout is best for longer text and larger images."})})]}),t("div",{children:[e(u,{label:"Padding:",checked:this.props.padding,onChange:a=>{this.props.onChange({padding:a})}}),e(n,{children:e("p",{children:"Padding is good for text, but not needed for images."})})]})]})}};o.propTypes={correct:i.array,layout:i.oneOf([s,p]),padding:i.bool},o.widgetName="sorter",o.defaultProps={correct:["$x$","$y$","$z$"],layout:s,padding:!0};let l=o;l.__docgenInfo={description:"",methods:[{name:"onLayoutChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"SorterEditor",props:{correct:{defaultValue:{value:'["$x$", "$y$", "$z$"]',computed:!1},description:"",type:{name:"array"},required:!1},layout:{defaultValue:{value:'"horizontal"',computed:!1},description:"",type:{name:"enum",value:[{value:'"horizontal"',computed:!1},{value:'"vertical"',computed:!1}]},required:!1},padding:{defaultValue:{value:"true",computed:!1},description:"",type:{name:"bool"},required:!1}}};export{l as S}; +import{a as t,j as e}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import{_ as c}from"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as h}from"./components-h6HHhmoA.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";import{C as u}from"./index-QCAhLhLD.js";import{P as i}from"./index-k-0mNqHS.js";import{r as m}from"./index-TT1qJ6UJ.js";const{InfoTip:n,TextListEditor:f}=h,s="horizontal",p="vertical",o=class o extends m.Component{constructor(){super(...arguments),this.onLayoutChange=r=>{this.props.onChange({layout:r.target.value})},this.serialize=()=>c.pick(this.props,"correct","layout","padding")}render(){const r=this;return t("div",{children:[t("div",{children:[" ","Correct answer:"," ",e(n,{children:e("p",{children:"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."})})]}),e(f,{options:this.props.correct,onChange:function(a,d){r.props.onChange({correct:a},d)},layout:this.props.layout}),t("div",{children:[t("label",{children:[" ","Layout:"," ",t("select",{value:this.props.layout,onChange:this.onLayoutChange,children:[e("option",{value:s,children:"Horizontal"}),e("option",{value:p,children:"Vertical"})]})]}),e(n,{children:e("p",{children:"Use the horizontal layout for short text and small images. The vertical layout is best for longer text and larger images."})})]}),t("div",{children:[e(u,{label:"Padding:",checked:this.props.padding,onChange:a=>{this.props.onChange({padding:a})}}),e(n,{children:e("p",{children:"Padding is good for text, but not needed for images."})})]})]})}};o.propTypes={correct:i.array,layout:i.oneOf([s,p]),padding:i.bool},o.widgetName="sorter",o.defaultProps={correct:["$x$","$y$","$z$"],layout:s,padding:!0};let l=o;l.__docgenInfo={description:"",methods:[{name:"onLayoutChange",docblock:null,modifiers:[],params:[{name:"e",optional:!1,type:null}],returns:null},{name:"serialize",docblock:null,modifiers:[],params:[],returns:null}],displayName:"SorterEditor",props:{correct:{defaultValue:{value:'["$x$", "$y$", "$z$"]',computed:!1},description:"",type:{name:"array"},required:!1},layout:{defaultValue:{value:'"horizontal"',computed:!1},description:"",type:{name:"enum",value:[{value:'"horizontal"',computed:!1},{value:'"vertical"',computed:!1}]},required:!1},padding:{defaultValue:{value:"true",computed:!1},description:"",type:{name:"bool"},required:!1}}};export{l as S}; diff --git a/assets/sorter-editor.stories-sdFaYK7b.js b/assets/sorter-editor.stories-DTCULt_I.js similarity index 66% rename from assets/sorter-editor.stories-sdFaYK7b.js rename to assets/sorter-editor.stories-DTCULt_I.js index c32445ac30..8c60646c71 100644 --- a/assets/sorter-editor.stories-sdFaYK7b.js +++ b/assets/sorter-editor.stories-DTCULt_I.js @@ -1,3 +1,3 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{S as e}from"./sorter-editor-5DYvFg1M.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./index-0C4KXdeC.js";const ro={title:"PerseusEditor/Widgets/Sorter Editor"},r=a=>m(e,{onChange:p("onChange")});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var o,t,i;r.parameters={...r.parameters,docs:{...(o=r.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{a as p}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{S as e}from"./sorter-editor-rLrUJXLc.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./index-k-0mNqHS.js";const ro={title:"PerseusEditor/Widgets/Sorter Editor"},r=a=>m(e,{onChange:p("onChange")});r.__docgenInfo={description:"",methods:[],displayName:"Default"};var o,t,i;r.parameters={...r.parameters,docs:{...(o=r.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(i=(t=r.parameters)==null?void 0:t.docs)==null?void 0:i.source}}};const oo=["Default"];export{r as Default,oo as __namedExportsOrder,ro as default}; diff --git a/assets/sorter.stories-5TQM9e08.js b/assets/sorter.stories-9GJvf9nP.js similarity index 66% rename from assets/sorter.stories-5TQM9e08.js rename to assets/sorter.stories-9GJvf9nP.js index a36aa268a9..5c2b7d3ff7 100644 --- a/assets/sorter.stories-5TQM9e08.js +++ b/assets/sorter.stories-9GJvf9nP.js @@ -1,4 +1,4 @@ -import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{R as p}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const e={content:`**Arrange the following measurements in order from smallest to largest.** +import{j as m}from"./jsx-runtime-FVsy8kgq.js";import{R as p}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const e={content:`**Arrange the following measurements in order from smallest to largest.** [[☃ sorter 1]]`,images:{},widgets:{"sorter 1":{version:{major:0,minor:0},type:"sorter",graded:!0,options:{padding:!0,layout:"horizontal",correct:["$0.005$ kilograms","$15$ grams","$55$ grams"]}}}},Xr={title:"Perseus/Widgets/Sorter"},r=s=>m(p,{question:e});r.__docgenInfo={description:"",methods:[],displayName:"Question1"};var t,o,i;r.parameters={...r.parameters,docs:{...(t=r.parameters)==null?void 0:t.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/structured-item-diff-cBK7G-UD.js b/assets/structured-item-diff-eXkE0zlp.js similarity index 92% rename from assets/structured-item-diff-cBK7G-UD.js rename to assets/structured-item-diff-eXkE0zlp.js index 9665ad77a9..7e1105f525 100644 --- a/assets/structured-item-diff-cBK7G-UD.js +++ b/assets/structured-item-diff-eXkE0zlp.js @@ -1,4 +1,4 @@ -import{j as d,a as k}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import{_ as y}from"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import{d as U,e as W,g as B,s as $}from"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import{g as ie,s as ae}from"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{r as N}from"./index-TT1qJ6UJ.js";import{T as oe}from"./text-diff-2XL6ZGXE.js";import{c as de}from"./components-GHvuFaIn.js";import{c as A}from"./index-dnMhQZ-1.js";import{P as i}from"./index-0C4KXdeC.js";import{T as pe}from"./tags-diff-2P1jpY0i.js";const V="unchanged",Y="changed",Z="added",_="removed",le=function(s,e,t){let n;return s===e?n=V:s===void 0?n=Z:e===void 0?n=_:n=Y,{after:JSON.stringify(e),before:JSON.stringify(s),children:[],key:t,status:n}},ce=function(s,e,t){const n=y.isObject(s)?y(s).keys():[],r=y.isObject(e)?y(e).keys():[],o=y.union(n,r),a=y.map(o,function(c){return ee((s||{})[c],(e||{})[c],c)});let p;return s===void 0?p=Z:e===void 0?p=_:p=y.any(a,function(h){return h.status!==V})?Y:V,{after:"",before:"",children:a,key:t,status:p}},ee=function(s,e,t){return typeof s=="object"||typeof e=="object"?ce(s,e,t):le(s,e,t)},{SvgImage:z}=de,te=function(s){return(s-1)*20},C="before",j="after",ue="unchanged",F=class F extends N.Component{render(){const e=A(this.props.className,{"diff-row":!0,before:this.props.side===C,after:this.props.side===j});return d("div",{className:e,children:k("div",{style:{paddingLeft:te(this.props.depth)},children:[this.props.showKey&&this.props.propKey+": ",d("span",{className:"inner-value dark "+this.props.className,children:this.props.value})]})})}};F.propTypes={className:i.string.isRequired,depth:i.number.isRequired,propKey:i.string.isRequired,showKey:i.bool.isRequired,side:i.oneOf([C,j]).isRequired,value:i.string};let S=F;const K=class K extends N.Component{render(){const e=this;return d("div",{onClick:e.props.onClick,style:{clear:"both"},children:y.map([C,j],function(t){return d("div",{className:"diff-row collapsed "+t,children:d("div",{style:{paddingLeft:te(e.props.depth)},children:d("span",{children:" [ show unmodified ] "})})},t)})})}};K.propTypes={depth:i.number,onClick:i.func.isRequired},K.defaultProps={depth:0};let I=K;const R=class R extends N.Component{constructor(){super(...arguments),this.state={expanded:this.props.expanded},this.expand=()=>{this.setState({expanded:!0})}}render(){const e=this.props.entry,t=e.status==="removed",n=e.status==="added",r=e.status==="changed",o=e.children.length>0,a=A({removed:t||r&&!o,dark:t,"blank-space":n}),p=A({added:n||r&&!o,dark:n,"blank-space":t});let c;this.state.expanded?c=e.children:c=y(e.children).select(function(m){return m.status!==ue});let h=c.length1&&(a.alignment=t),o==="transformer"&&(a.graded=n),ae(o)&&(a.static=(s==null?void 0:s.static)??void 0),a},J=class J extends N.Component{render(){const{after:e,before:t,showAlignmentOptions:n,showSeparator:r,title:o}=this.props;let a,p;(t.content||e.content)&&(a=d(oe,{before:t.content,after:e.content,title:o}));const c=Object.keys(t.widgets??{}).filter(w=>t.content.includes(w)),h=Object.keys(e.widgets??{}).filter(w=>e.content.includes(w));return(c.length||h.length)&&(p=y.union(c,h).map(m=>{var l,f,u,P;return d(E,{before:Q((l=t.widgets)==null?void 0:l[m],n),after:Q((f=e.widgets)==null?void 0:f[m],n),title:m,type:(((u=t.widgets)==null?void 0:u[m])??{}).type||(((P=e.widgets)==null?void 0:P[m])??{}).type},m)})),k("div",{children:[a,p,r&&d("div",{className:"diff-separator"})]})}};J.defaultProps={after:{content:"",images:{},widgets:{}},before:{content:"",images:{},widgets:{}},showAlignmentOptions:!1,showSeparator:!1};let M=J;M.__docgenInfo={description:"",methods:[],displayName:"RendererDiff",props:{after:{required:!1,tsType:{name:"signature",type:"object",raw:`{ +import{j as d,a as k}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import{_ as y}from"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import{d as U,e as W,g as B,s as $}from"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import{g as ie,s as ae}from"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{r as N}from"./index-TT1qJ6UJ.js";import{T as oe}from"./text-diff-VQhvkbai.js";import{c as de}from"./components-h6HHhmoA.js";import{c as A}from"./index-dnMhQZ-1.js";import{P as i}from"./index-k-0mNqHS.js";import{T as pe}from"./tags-diff-QpgBeBx_.js";const V="unchanged",Y="changed",Z="added",_="removed",le=function(s,e,t){let n;return s===e?n=V:s===void 0?n=Z:e===void 0?n=_:n=Y,{after:JSON.stringify(e),before:JSON.stringify(s),children:[],key:t,status:n}},ce=function(s,e,t){const n=y.isObject(s)?y(s).keys():[],r=y.isObject(e)?y(e).keys():[],o=y.union(n,r),a=y.map(o,function(c){return ee((s||{})[c],(e||{})[c],c)});let p;return s===void 0?p=Z:e===void 0?p=_:p=y.any(a,function(h){return h.status!==V})?Y:V,{after:"",before:"",children:a,key:t,status:p}},ee=function(s,e,t){return typeof s=="object"||typeof e=="object"?ce(s,e,t):le(s,e,t)},{SvgImage:z}=de,te=function(s){return(s-1)*20},C="before",j="after",ue="unchanged",F=class F extends N.Component{render(){const e=A(this.props.className,{"diff-row":!0,before:this.props.side===C,after:this.props.side===j});return d("div",{className:e,children:k("div",{style:{paddingLeft:te(this.props.depth)},children:[this.props.showKey&&this.props.propKey+": ",d("span",{className:"inner-value dark "+this.props.className,children:this.props.value})]})})}};F.propTypes={className:i.string.isRequired,depth:i.number.isRequired,propKey:i.string.isRequired,showKey:i.bool.isRequired,side:i.oneOf([C,j]).isRequired,value:i.string};let S=F;const K=class K extends N.Component{render(){const e=this;return d("div",{onClick:e.props.onClick,style:{clear:"both"},children:y.map([C,j],function(t){return d("div",{className:"diff-row collapsed "+t,children:d("div",{style:{paddingLeft:te(e.props.depth)},children:d("span",{children:" [ show unmodified ] "})})},t)})})}};K.propTypes={depth:i.number,onClick:i.func.isRequired},K.defaultProps={depth:0};let I=K;const R=class R extends N.Component{constructor(){super(...arguments),this.state={expanded:this.props.expanded},this.expand=()=>{this.setState({expanded:!0})}}render(){const e=this.props.entry,t=e.status==="removed",n=e.status==="added",r=e.status==="changed",o=e.children.length>0,a=A({removed:t||r&&!o,dark:t,"blank-space":n}),p=A({added:n||r&&!o,dark:n,"blank-space":t});let c;this.state.expanded?c=e.children:c=y(e.children).select(function(m){return m.status!==ue});let h=c.length1&&(a.alignment=t),o==="transformer"&&(a.graded=n),ae(o)&&(a.static=(s==null?void 0:s.static)??void 0),a},J=class J extends N.Component{render(){const{after:e,before:t,showAlignmentOptions:n,showSeparator:r,title:o}=this.props;let a,p;(t.content||e.content)&&(a=d(oe,{before:t.content,after:e.content,title:o}));const c=Object.keys(t.widgets??{}).filter(w=>t.content.includes(w)),h=Object.keys(e.widgets??{}).filter(w=>e.content.includes(w));return(c.length||h.length)&&(p=y.union(c,h).map(m=>{var l,f,u,P;return d(E,{before:Q((l=t.widgets)==null?void 0:l[m],n),after:Q((f=e.widgets)==null?void 0:f[m],n),title:m,type:(((u=t.widgets)==null?void 0:u[m])??{}).type||(((P=e.widgets)==null?void 0:P[m])??{}).type},m)})),k("div",{children:[a,p,r&&d("div",{className:"diff-separator"})]})}};J.defaultProps={after:{content:"",images:{},widgets:{}},before:{content:"",images:{},widgets:{}},showAlignmentOptions:!1,showSeparator:!1};let M=J;M.__docgenInfo={description:"",methods:[],displayName:"RendererDiff",props:{after:{required:!1,tsType:{name:"signature",type:"object",raw:`{ content: string; // NOTE: images and widgets may not be set for some items hints, // specifically in old revisions, which may only be loaded for diffing. diff --git a/assets/structured-item-diff.stories-mVax7sIn.js b/assets/structured-item-diff.stories--rCdXtlp.js similarity index 95% rename from assets/structured-item-diff.stories-mVax7sIn.js rename to assets/structured-item-diff.stories--rCdXtlp.js index 9a9c4d9b3b..cddc7f076b 100644 --- a/assets/structured-item-diff.stories-mVax7sIn.js +++ b/assets/structured-item-diff.stories--rCdXtlp.js @@ -1,4 +1,4 @@ -import{_ as I}from"./iframe-sjDFBNDn.js";import{j as t}from"./jsx-runtime-FVsy8kgq.js";import{S as a}from"./structured-item-diff-cBK7G-UD.js";import{W as b}from"./perseus-diff-wrapper-dJxBlkDd.js";import"../sb-preview/runtime.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./text-diff-2XL6ZGXE.js";import"./components-GHvuFaIn.js";import"./index-0C4KXdeC.js";import"./tags-diff-2P1jpY0i.js";I(()=>Promise.resolve({}),__vite__mapDeps([0]),import.meta.url);const _t={title:"PerseusEditor/Diffs/Structured Item Diff",decorators:[e=>t(b,{children:t(e,{})})]},c={a:"a tag",b:"b tag",c:"c tag"},i=e=>t(a,{...{before:{_multi:{directions:{__type:"content",content:"",images:{},widgets:{}},passage:{type:"content",content:"",images:{},widgets:{}},overview:{type:"content",content:"",images:{},widgets:{}},hints:[],questions:[]}},after:{_multi:{directions:{type:"content",content:"directions",images:{},widgets:{}},passage:{type:"content",content:"passage",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},hints:[{type:"hint",content:"hint 1",images:{},widgets:{}}],questions:[{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]}]}},shape:{type:"object",shape:{directions:{type:"content"},overview:{type:"content"},passage:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}},questions:{type:"array",elementShape:{type:"object",shape:{tags:{type:"tags"},question:{type:"content"},overview:{type:"content"},keepInMind:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}}}}}}},tags:{idToName:n=>c[n],nameToId:n=>n[0],names:["a tag","b tag","c tag"]}}}),s=e=>t(a,{...{before:{_multi:{directions:{__type:"content",content:"directions",images:{},widgets:{}},passage:{type:"content",content:"passage",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},hints:[{type:"hint",content:"hint 1",images:{},widgets:{}},{type:"hint",content:"hint 2",images:{},widgets:{}}],questions:[{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]}]}},after:{_multi:{directions:{type:"content",content:"directions",images:{},widgets:{}},passage:{type:"content",content:"passage",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},hints:[{type:"hint",content:"hint 1",images:{},widgets:{}}],questions:[{hints:[],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question edited",images:{},widgets:{}},tags:["a","c"]},{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]}]}},shape:{type:"object",shape:{directions:{type:"content"},overview:{type:"content"},passage:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}},questions:{type:"array",elementShape:{type:"object",shape:{tags:{type:"tags"},question:{type:"content"},overview:{type:"content"},keepInMind:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}}}}}}},tags:{idToName:n=>c[n],nameToId:n=>n[0],names:["a tag","b tag","c tag"]}}}),o=e=>t(a,{...{before:{_multi:{directions:{__type:"content",content:"directions",images:{},widgets:{}},passage:{type:"content",content:"passage",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},hints:[{type:"hint",content:"hint 1",images:{},widgets:{}},{type:"hint",content:"hint 2",images:{},widgets:{}},{type:"hint",content:"hint 3",images:{},widgets:{}}],questions:[{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}},{type:"hint",content:"question hint 2",images:{},widgets:{}},{type:"hint",content:"question hint 3",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question edited",images:{},widgets:{}},tags:["a","c"]},{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]},{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]}]}},after:{_multi:{directions:{__type:"content",content:"directions",images:{},widgets:{}},passage:{type:"content",content:"passage",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},hints:[{type:"hint",content:"hint 1",images:{},widgets:{}},{type:"hint",content:"hint 2",images:{},widgets:{}}],questions:[{hints:[{type:"hint",content:"question hint 1 edited",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question edited",images:{},widgets:{}},tags:["a","c"]},{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]}]}},shape:{type:"object",shape:{directions:{type:"content"},overview:{type:"content"},passage:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}},questions:{type:"array",elementShape:{type:"object",shape:{tags:{type:"tags"},question:{type:"content"},overview:{type:"content"},keepInMind:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}}}}}}},tags:{idToName:n=>c[n],nameToId:n=>n[0],names:["a tag","b tag","c tag"]}}}),p=e=>t(a,{...{before:{_multi:{directions:{__type:"content",content:"directions",images:{},widgets:{}},passage:{type:"content",content:"passage",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},hints:[{type:"hint",content:"hint 1",images:{},widgets:{}},{type:"hint",content:"hint 2",images:{},widgets:{}}],questions:[{hints:[{type:"hint",content:"question hint 1 edited",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question edited",images:{},widgets:{}},tags:["a","c"]},{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]}]}},after:{_multi:{directions:{__type:"content",content:"",images:{},widgets:{}},passage:{type:"content",content:"",images:{},widgets:{}},overview:{type:"content",content:"",images:{},widgets:{}},hints:[],questions:[]}},shape:{type:"object",shape:{directions:{type:"content"},overview:{type:"content"},passage:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}},questions:{type:"array",elementShape:{type:"object",shape:{tags:{type:"tags"},question:{type:"content"},overview:{type:"content"},keepInMind:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}}}}}}},tags:{idToName:n=>c[n],nameToId:n=>n[0],names:["a tag","b tag","c tag"]}}});i.__docgenInfo={description:"",methods:[],displayName:"ContentAdded"};s.__docgenInfo={description:"",methods:[],displayName:"ContentAddedRemovedAndChanged"};o.__docgenInfo={description:"",methods:[],displayName:"MiscContentChanges"};p.__docgenInfo={description:"",methods:[],displayName:"ContentRemoved"};var r,m,d;i.parameters={...i.parameters,docs:{...(r=i.parameters)==null?void 0:r.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{_ as I}from"./iframe-uulHRm1N.js";import{j as t}from"./jsx-runtime-FVsy8kgq.js";import{S as a}from"./structured-item-diff-eXkE0zlp.js";import{W as b}from"./perseus-diff-wrapper-dJxBlkDd.js";import"../sb-preview/runtime.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./text-diff-VQhvkbai.js";import"./components-h6HHhmoA.js";import"./index-k-0mNqHS.js";import"./tags-diff-QpgBeBx_.js";I(()=>Promise.resolve({}),__vite__mapDeps([0]),import.meta.url);const _t={title:"PerseusEditor/Diffs/Structured Item Diff",decorators:[e=>t(b,{children:t(e,{})})]},c={a:"a tag",b:"b tag",c:"c tag"},i=e=>t(a,{...{before:{_multi:{directions:{__type:"content",content:"",images:{},widgets:{}},passage:{type:"content",content:"",images:{},widgets:{}},overview:{type:"content",content:"",images:{},widgets:{}},hints:[],questions:[]}},after:{_multi:{directions:{type:"content",content:"directions",images:{},widgets:{}},passage:{type:"content",content:"passage",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},hints:[{type:"hint",content:"hint 1",images:{},widgets:{}}],questions:[{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]}]}},shape:{type:"object",shape:{directions:{type:"content"},overview:{type:"content"},passage:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}},questions:{type:"array",elementShape:{type:"object",shape:{tags:{type:"tags"},question:{type:"content"},overview:{type:"content"},keepInMind:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}}}}}}},tags:{idToName:n=>c[n],nameToId:n=>n[0],names:["a tag","b tag","c tag"]}}}),s=e=>t(a,{...{before:{_multi:{directions:{__type:"content",content:"directions",images:{},widgets:{}},passage:{type:"content",content:"passage",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},hints:[{type:"hint",content:"hint 1",images:{},widgets:{}},{type:"hint",content:"hint 2",images:{},widgets:{}}],questions:[{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]}]}},after:{_multi:{directions:{type:"content",content:"directions",images:{},widgets:{}},passage:{type:"content",content:"passage",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},hints:[{type:"hint",content:"hint 1",images:{},widgets:{}}],questions:[{hints:[],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question edited",images:{},widgets:{}},tags:["a","c"]},{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]}]}},shape:{type:"object",shape:{directions:{type:"content"},overview:{type:"content"},passage:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}},questions:{type:"array",elementShape:{type:"object",shape:{tags:{type:"tags"},question:{type:"content"},overview:{type:"content"},keepInMind:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}}}}}}},tags:{idToName:n=>c[n],nameToId:n=>n[0],names:["a tag","b tag","c tag"]}}}),o=e=>t(a,{...{before:{_multi:{directions:{__type:"content",content:"directions",images:{},widgets:{}},passage:{type:"content",content:"passage",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},hints:[{type:"hint",content:"hint 1",images:{},widgets:{}},{type:"hint",content:"hint 2",images:{},widgets:{}},{type:"hint",content:"hint 3",images:{},widgets:{}}],questions:[{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}},{type:"hint",content:"question hint 2",images:{},widgets:{}},{type:"hint",content:"question hint 3",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question edited",images:{},widgets:{}},tags:["a","c"]},{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]},{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]}]}},after:{_multi:{directions:{__type:"content",content:"directions",images:{},widgets:{}},passage:{type:"content",content:"passage",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},hints:[{type:"hint",content:"hint 1",images:{},widgets:{}},{type:"hint",content:"hint 2",images:{},widgets:{}}],questions:[{hints:[{type:"hint",content:"question hint 1 edited",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question edited",images:{},widgets:{}},tags:["a","c"]},{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]}]}},shape:{type:"object",shape:{directions:{type:"content"},overview:{type:"content"},passage:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}},questions:{type:"array",elementShape:{type:"object",shape:{tags:{type:"tags"},question:{type:"content"},overview:{type:"content"},keepInMind:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}}}}}}},tags:{idToName:n=>c[n],nameToId:n=>n[0],names:["a tag","b tag","c tag"]}}}),p=e=>t(a,{...{before:{_multi:{directions:{__type:"content",content:"directions",images:{},widgets:{}},passage:{type:"content",content:"passage",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},hints:[{type:"hint",content:"hint 1",images:{},widgets:{}},{type:"hint",content:"hint 2",images:{},widgets:{}}],questions:[{hints:[{type:"hint",content:"question hint 1 edited",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question edited",images:{},widgets:{}},tags:["a","c"]},{hints:[{type:"hint",content:"question hint 1",images:{},widgets:{}}],keepInMind:{type:"content",content:"keep in mind",images:{},widgets:{}},overview:{type:"content",content:"overview",images:{},widgets:{}},question:{type:"content",content:"question",images:{},widgets:{}},tags:["a","b"]}]}},after:{_multi:{directions:{__type:"content",content:"",images:{},widgets:{}},passage:{type:"content",content:"",images:{},widgets:{}},overview:{type:"content",content:"",images:{},widgets:{}},hints:[],questions:[]}},shape:{type:"object",shape:{directions:{type:"content"},overview:{type:"content"},passage:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}},questions:{type:"array",elementShape:{type:"object",shape:{tags:{type:"tags"},question:{type:"content"},overview:{type:"content"},keepInMind:{type:"content"},hints:{type:"array",elementShape:{type:"hint"}}}}}}},tags:{idToName:n=>c[n],nameToId:n=>n[0],names:["a tag","b tag","c tag"]}}});i.__docgenInfo={description:"",methods:[],displayName:"ContentAdded"};s.__docgenInfo={description:"",methods:[],displayName:"ContentAddedRemovedAndChanged"};o.__docgenInfo={description:"",methods:[],displayName:"MiscContentChanges"};p.__docgenInfo={description:"",methods:[],displayName:"ContentRemoved"};var r,m,d;i.parameters={...i.parameters,docs:{...(r=i.parameters)==null?void 0:r.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { const props = ({ before: { _multi: { diff --git a/assets/stub-tag-editor-Hmby24Jq.js b/assets/stub-tag-editor-Hmby24Jq.js index c9a3d392be..adc7a4ed03 100644 --- a/assets/stub-tag-editor-Hmby24Jq.js +++ b/assets/stub-tag-editor-Hmby24Jq.js @@ -1 +1 @@ -import{a,j as t}from"./jsx-runtime-FVsy8kgq.js";import{P as e}from"./index-k-0mNqHS.js";import{r as i}from"./index-TT1qJ6UJ.js";import{T as n}from"./text-list-editor-pe7AGDAl.js";const o=[],s=class s extends i.Component{render(){return a("div",{children:[this.props.showTitle&&t("div",{style:{fontSize:14},children:"Tags:"}),t(n,{options:this.props.value||o,layout:"vertical",onChange:this.props.onChange})]})}};s.propTypes={value:e.arrayOf(e.string),onChange:e.func.isRequired,showTitle:e.bool.isRequired},s.defaultProps={value:o,showTitle:!0};let r=s;r.__docgenInfo={description:"",methods:[],displayName:"StubTagEditor",props:{value:{defaultValue:{value:"[]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"string"}},required:!1},showTitle:{defaultValue:{value:"true",computed:!1},description:"",type:{name:"bool"},required:!1},onChange:{description:"",type:{name:"func"},required:!0}}};export{r as S}; +import{a,j as t}from"./jsx-runtime-FVsy8kgq.js";import{P as e}from"./index-0C4KXdeC.js";import{r as i}from"./index-TT1qJ6UJ.js";import{T as n}from"./text-list-editor-pe7AGDAl.js";const o=[],s=class s extends i.Component{render(){return a("div",{children:[this.props.showTitle&&t("div",{style:{fontSize:14},children:"Tags:"}),t(n,{options:this.props.value||o,layout:"vertical",onChange:this.props.onChange})]})}};s.propTypes={value:e.arrayOf(e.string),onChange:e.func.isRequired,showTitle:e.bool.isRequired},s.defaultProps={value:o,showTitle:!0};let r=s;r.__docgenInfo={description:"",methods:[],displayName:"StubTagEditor",props:{value:{defaultValue:{value:"[]",computed:!1},description:"",type:{name:"arrayOf",value:{name:"string"}},required:!1},showTitle:{defaultValue:{value:"true",computed:!1},description:"",type:{name:"bool"},required:!1},onChange:{description:"",type:{name:"func"},required:!0}}};export{r as S}; diff --git a/assets/stub-tag-editor.stories-L-kojrKS.js b/assets/stub-tag-editor.stories-L-kojrKS.js index 296185a940..3fc48c2b11 100644 --- a/assets/stub-tag-editor.stories-L-kojrKS.js +++ b/assets/stub-tag-editor.stories-L-kojrKS.js @@ -1,4 +1,4 @@ -import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{S as s}from"./stub-tag-editor-Hmby24Jq.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./index-7vsPyIck.js";const W={title:"Perseus/Components/name"},f=["Test value 1","Test value 2","Test value 3"],e=i=>a(s,{onChange:()=>{},showTitle:!0}),t=i=>a(s,{onChange:()=>{},showTitle:!1}),o=i=>a(s,{onChange:()=>{},showTitle:!0,value:f}),r=i=>a(s,{onChange:()=>{},showTitle:!1,value:f});e.__docgenInfo={description:"",methods:[],displayName:"ShowingTitle"};t.__docgenInfo={description:"",methods:[],displayName:"NotShowingTitle"};o.__docgenInfo={description:"",methods:[],displayName:"ShowingTitleWithValue"};r.__docgenInfo={description:"",methods:[],displayName:"NotShowingTitleWithValue"};var n,l,u;e.parameters={...e.parameters,docs:{...(n=e.parameters)==null?void 0:n.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{S as s}from"./stub-tag-editor-Hmby24Jq.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./index-7vsPyIck.js";const W={title:"Perseus/Components/name"},f=["Test value 1","Test value 2","Test value 3"],e=i=>a(s,{onChange:()=>{},showTitle:!0}),t=i=>a(s,{onChange:()=>{},showTitle:!1}),o=i=>a(s,{onChange:()=>{},showTitle:!0,value:f}),r=i=>a(s,{onChange:()=>{},showTitle:!1,value:f});e.__docgenInfo={description:"",methods:[],displayName:"ShowingTitle"};t.__docgenInfo={description:"",methods:[],displayName:"NotShowingTitle"};o.__docgenInfo={description:"",methods:[],displayName:"ShowingTitleWithValue"};r.__docgenInfo={description:"",methods:[],displayName:"NotShowingTitleWithValue"};var n,l,u;e.parameters={...e.parameters,docs:{...(n=e.parameters)==null?void 0:n.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return {}} showTitle={true} />; }`,...(u=(l=e.parameters)==null?void 0:l.docs)==null?void 0:u.source}}};var c,g,m;t.parameters={...t.parameters,docs:{...(c=t.parameters)==null?void 0:c.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return {}} showTitle={false} />; diff --git a/assets/svg-image-VUqtnnD6.js b/assets/svg-image-RL9NlJEY.js similarity index 99% rename from assets/svg-image-VUqtnnD6.js rename to assets/svg-image-RL9NlJEY.js index b55dfaf863..0e07dc60c8 100644 --- a/assets/svg-image-VUqtnnD6.js +++ b/assets/svg-image-RL9NlJEY.js @@ -1,4 +1,4 @@ -var Vn=(i,t,e)=>{if(!t.has(i))throw TypeError("Cannot "+e)};var Ee=(i,t,e)=>(Vn(i,t,"read from private field"),e?e.call(i):t.get(i)),Ti=(i,t,e)=>{if(t.has(i))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(i):t.set(i,e)},_i=(i,t,e,o)=>(Vn(i,t,"write to private field"),o?o.call(i,e):t.set(i,e),e);import{j as zt,a as ki}from"./jsx-runtime-FVsy8kgq.js";import"./version-akiLXZts.js";import{b as eo,e as cs,c as io,f as no,d as so,P as $t,E as Ft,K as Xt,r as oo,s as ro,U as kt}from"./util-XcxTwqb0.js";import{r as ie}from"./index-TT1qJ6UJ.js";import{l as ao}from"./index-awljIyHI.js";import{b as lo,V as co,R as ho}from"./index-6h5t6F0w.js";import{c as ae}from"./index-deFLJwr4.js";import{c as uo}from"./index-dnMhQZ-1.js";import{$ as P,_ as y}from"./jquery-yG1GhClm.js";import{g as se}from"./dependencies-8XILypbq.js";import{F as Gn}from"./fixed-to-responsive-1fSZ1n--.js";import{R as fo}from"./index-7vsPyIck.js";import{e as po}from"./index-J2t_5nK1.js";import{a as mo}from"./client-rbWgHzHN.js";import{I as go}from"./inline-icon-tKY1iMkH.js";import{c as vo}from"./icon-paths-AuJwhOz7.js";import{I as Qe}from"./image-loader-mgyZcN0j.js";const Fe={log:(i,t)=>{se().Log.log(i,t)},error:(i,t,e)=>{se().Log.error(i,t,e)}};function hs(i){return i.reduce((t,e)=>t+e,0)}function bo(i){return i.reduce((t,e)=>t*e,1)}function Be(...i){const t=Math.min(...i.map(o=>o.length)),e=[];for(let o=0;oa[o]));return e}function ha(i,t){return[t(i[0],0),t(i[1],1)]}function yo(i,t){return!Array.isArray(i)||t!==void 0&&i.length!==t?!1:i.every(eo)}function Di(i){return Pt(i,1/Zi(i))}function Zi(i){return Math.sqrt(Ni(i,i))}function Ni(i,t){const o=Be(i,t).map(bo);return hs(o)}function ct(...i){return Be(...i).map(hs)}function ht(i,t){return Be(i,t).map(e=>e[0]-e[1])}function wo(i){return i.map(t=>-t)}function Pt(i,t){return i.map(e=>e*t)}function xo(i,t,e){return i.length===t.length&&Be(i,t).every(o=>cs(o[0],o[1],e))}function Mo(i){const t=Zi(i);let e=Math.atan2(i[1],i[0]);return e<0&&(e+=2*Math.PI),[t,e]}function qt(i){const t=Mo(i);return[t[0],t[1]*180/Math.PI]}function So(i,t=0){return[i*Math.cos(t),i*Math.sin(t)]}function ve(i,t=0){return So(i,t*Math.PI/180)}function ti(i,t){const e=qt(i),o=e[1]+t;return ve(e[0],o)}function To(i,t){const e=Ni(i,t)/Ni(t,t);return Pt(t,e)}function _o(i,t){return i.map((e,o)=>io(e,t[o]||t))}function ko(i,t){return i.map((e,o)=>no(e,t[o]||t))}function Co(i,t){return i.map((e,o)=>so(e,t[o]||t))}function us(i,t){return Zi(ht(i,t))}function ua(i,t){const e=ht(t[1],t[0]),o=ht(i,t[0]),a=To(o,e),h=ht(Pt(a,2),o);return ct(t[0],h)}const Jt=yo,On=ct,ge=ct,Wi=xo,$i=_o,Ki=ko,ji=Co;function zn(i){return[(i[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2]}const Ao={xsmall:16,small:24,medium:48,large:96},Po={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"},Hn={light:ae.white,dark:ae.offBlack16},Eo=lo("path");class ds extends ie.Component{render(){const{size:t,light:e,style:o,testId:a}=this.props,h=Ao[t],d=Po[t],g=e?Hn.light:Hn.dark,w=ie.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:h,height:h,viewBox:`0 0 ${h} ${h}`,"data-testid":a},ie.createElement(Eo,{style:[Yn.loadingSpinner,{fill:g}],fillRule:"nonzero",d}));return ie.createElement(co,{style:[Yn.spinnerContainer,o]},w)}}ds.defaultProps={size:"large",light:!1};const Lo={"0%":{transform:"rotate(0deg)"},"50%":{transform:"rotate(180deg)"},"100%":{transform:"rotate(360deg)"}},Yn=ao.StyleSheet.create({spinnerContainer:{justifyContent:"center"},loadingSpinner:{transformOrigin:"50% 50%",animationName:Lo,animationDuration:"1.1s",animationIterationCount:"infinite",animationTimingFunction:"linear"}});function Ro(){const i=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(const e in t)if(i.style[e]!==void 0)return{end:t[e]};return!1}P.fn.emulateTransitionEnd=function(i){let t=!1;const e=this;return P(this).one("bsTransitionEnd",function(){t=!0}),setTimeout(function(){t||P(e).trigger(P.support.transition.end)},i),this};P(function(){P.support.transition=Ro(),P.support.transition&&(P.event.special.bsTransitionEnd={bindType:P.support.transition.end,delegateType:P.support.transition.end,handle:function(i){if(P(i.target).is(this))return i.handleObj.handler.apply(this,arguments)}})});function fs(i,t){const e=window.scrollX,o=window.scrollY,a=document.querySelector("meta[name=viewport]");a?a.setAttribute("content",i):P("head").append(``),document.body.style.opacity=.9999,setTimeout(()=>{document.body.style.opacity=1,window.scrollTo(e,o),t&&setTimeout(t,0)},0)}function Ut(){}Ut.prototype._initialize=function(i){this._$document||(this._activeZoom=this._initialScrollPosition=this._initialTouchPosition=this._touchMoveListener=null,this._$document=P(document),this._$window=P(window),this._$body=P(document.body),this._boundClick=P.proxy(this._clickHandler,this),this._enableMobilePinch=i)};Ut.prototype.handleZoomClick=function(i,t){this._initialize(t);const e=i.target;if(!(!e||e.tagName!=="IMG")&&!this._$body.hasClass("zoom-overlay-open")){if(i.metaKey||i.ctrlKey)return window.open(i.target.src,"_blank");!t&&e.width>=window.innerWidth-Et.getOffset()||(this._activeZoomClose(!0),t?fs("width=device-width, initial-scale=1, minimum-scale=1",()=>this._zoom(e)):this._zoom(e),t||(this._$window.on("scroll.zoom",P.proxy(this._scrollHandler,this)),this._$document.on("keyup.zoom",P.proxy(this._keyHandler,this)),this._$document.on("touchstart.zoom",P.proxy(this._touchStart,this))),document.addEventListener("click",this._boundClick,!0),i.stopPropagation())}};Ut.prototype._zoom=function(i){this._activeZoom=new Et(i,this._enableMobilePinch),this._activeZoom.zoomImage()};Ut.prototype._activeZoomClose=function(i){this._activeZoom&&(i?(this._activeZoom.dispose(),this._disposeActiveZoom()):fs(`width=device-width, initial-scale=1, minimum-scale=1, +var Vn=(i,t,e)=>{if(!t.has(i))throw TypeError("Cannot "+e)};var Ee=(i,t,e)=>(Vn(i,t,"read from private field"),e?e.call(i):t.get(i)),Ti=(i,t,e)=>{if(t.has(i))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(i):t.set(i,e)},_i=(i,t,e,o)=>(Vn(i,t,"write to private field"),o?o.call(i,e):t.set(i,e),e);import{j as zt,a as ki}from"./jsx-runtime-FVsy8kgq.js";import"./version-akiLXZts.js";import{b as eo,e as cs,c as io,f as no,d as so,P as $t,E as Ft,K as Xt,r as oo,s as ro,U as kt}from"./util-YrNvlCNO.js";import{r as ie}from"./index-TT1qJ6UJ.js";import{l as ao}from"./index-awljIyHI.js";import{b as lo,V as co,R as ho}from"./index-6h5t6F0w.js";import{c as ae}from"./index-deFLJwr4.js";import{c as uo}from"./index-dnMhQZ-1.js";import{$ as P,_ as y}from"./jquery-yG1GhClm.js";import{g as se}from"./dependencies-8XILypbq.js";import{F as Gn}from"./fixed-to-responsive-1fSZ1n--.js";import{R as fo}from"./index-7vsPyIck.js";import{e as po}from"./index-J2t_5nK1.js";import{a as mo}from"./client-rbWgHzHN.js";import{I as go}from"./inline-icon-tKY1iMkH.js";import{c as vo}from"./icon-paths-AuJwhOz7.js";import{I as Qe}from"./image-loader-mgyZcN0j.js";const Fe={log:(i,t)=>{se().Log.log(i,t)},error:(i,t,e)=>{se().Log.error(i,t,e)}};function hs(i){return i.reduce((t,e)=>t+e,0)}function bo(i){return i.reduce((t,e)=>t*e,1)}function Be(...i){const t=Math.min(...i.map(o=>o.length)),e=[];for(let o=0;oa[o]));return e}function ha(i,t){return[t(i[0],0),t(i[1],1)]}function yo(i,t){return!Array.isArray(i)||t!==void 0&&i.length!==t?!1:i.every(eo)}function Di(i){return Pt(i,1/Zi(i))}function Zi(i){return Math.sqrt(Ni(i,i))}function Ni(i,t){const o=Be(i,t).map(bo);return hs(o)}function ct(...i){return Be(...i).map(hs)}function ht(i,t){return Be(i,t).map(e=>e[0]-e[1])}function wo(i){return i.map(t=>-t)}function Pt(i,t){return i.map(e=>e*t)}function xo(i,t,e){return i.length===t.length&&Be(i,t).every(o=>cs(o[0],o[1],e))}function Mo(i){const t=Zi(i);let e=Math.atan2(i[1],i[0]);return e<0&&(e+=2*Math.PI),[t,e]}function qt(i){const t=Mo(i);return[t[0],t[1]*180/Math.PI]}function So(i,t=0){return[i*Math.cos(t),i*Math.sin(t)]}function ve(i,t=0){return So(i,t*Math.PI/180)}function ti(i,t){const e=qt(i),o=e[1]+t;return ve(e[0],o)}function To(i,t){const e=Ni(i,t)/Ni(t,t);return Pt(t,e)}function _o(i,t){return i.map((e,o)=>io(e,t[o]||t))}function ko(i,t){return i.map((e,o)=>no(e,t[o]||t))}function Co(i,t){return i.map((e,o)=>so(e,t[o]||t))}function us(i,t){return Zi(ht(i,t))}function ua(i,t){const e=ht(t[1],t[0]),o=ht(i,t[0]),a=To(o,e),h=ht(Pt(a,2),o);return ct(t[0],h)}const Jt=yo,On=ct,ge=ct,Wi=xo,$i=_o,Ki=ko,ji=Co;function zn(i){return[(i[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2]}const Ao={xsmall:16,small:24,medium:48,large:96},Po={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"},Hn={light:ae.white,dark:ae.offBlack16},Eo=lo("path");class ds extends ie.Component{render(){const{size:t,light:e,style:o,testId:a}=this.props,h=Ao[t],d=Po[t],g=e?Hn.light:Hn.dark,w=ie.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:h,height:h,viewBox:`0 0 ${h} ${h}`,"data-testid":a},ie.createElement(Eo,{style:[Yn.loadingSpinner,{fill:g}],fillRule:"nonzero",d}));return ie.createElement(co,{style:[Yn.spinnerContainer,o]},w)}}ds.defaultProps={size:"large",light:!1};const Lo={"0%":{transform:"rotate(0deg)"},"50%":{transform:"rotate(180deg)"},"100%":{transform:"rotate(360deg)"}},Yn=ao.StyleSheet.create({spinnerContainer:{justifyContent:"center"},loadingSpinner:{transformOrigin:"50% 50%",animationName:Lo,animationDuration:"1.1s",animationIterationCount:"infinite",animationTimingFunction:"linear"}});function Ro(){const i=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(const e in t)if(i.style[e]!==void 0)return{end:t[e]};return!1}P.fn.emulateTransitionEnd=function(i){let t=!1;const e=this;return P(this).one("bsTransitionEnd",function(){t=!0}),setTimeout(function(){t||P(e).trigger(P.support.transition.end)},i),this};P(function(){P.support.transition=Ro(),P.support.transition&&(P.event.special.bsTransitionEnd={bindType:P.support.transition.end,delegateType:P.support.transition.end,handle:function(i){if(P(i.target).is(this))return i.handleObj.handler.apply(this,arguments)}})});function fs(i,t){const e=window.scrollX,o=window.scrollY,a=document.querySelector("meta[name=viewport]");a?a.setAttribute("content",i):P("head").append(``),document.body.style.opacity=.9999,setTimeout(()=>{document.body.style.opacity=1,window.scrollTo(e,o),t&&setTimeout(t,0)},0)}function Ut(){}Ut.prototype._initialize=function(i){this._$document||(this._activeZoom=this._initialScrollPosition=this._initialTouchPosition=this._touchMoveListener=null,this._$document=P(document),this._$window=P(window),this._$body=P(document.body),this._boundClick=P.proxy(this._clickHandler,this),this._enableMobilePinch=i)};Ut.prototype.handleZoomClick=function(i,t){this._initialize(t);const e=i.target;if(!(!e||e.tagName!=="IMG")&&!this._$body.hasClass("zoom-overlay-open")){if(i.metaKey||i.ctrlKey)return window.open(i.target.src,"_blank");!t&&e.width>=window.innerWidth-Et.getOffset()||(this._activeZoomClose(!0),t?fs("width=device-width, initial-scale=1, minimum-scale=1",()=>this._zoom(e)):this._zoom(e),t||(this._$window.on("scroll.zoom",P.proxy(this._scrollHandler,this)),this._$document.on("keyup.zoom",P.proxy(this._keyHandler,this)),this._$document.on("touchstart.zoom",P.proxy(this._touchStart,this))),document.addEventListener("click",this._boundClick,!0),i.stopPropagation())}};Ut.prototype._zoom=function(i){this._activeZoom=new Et(i,this._enableMobilePinch),this._activeZoom.zoomImage()};Ut.prototype._activeZoomClose=function(i){this._activeZoom&&(i?(this._activeZoom.dispose(),this._disposeActiveZoom()):fs(`width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1`,()=>{this._activeZoom&&(this._activeZoom.close(),this._disposeActiveZoom())}))};Ut.prototype._disposeActiveZoom=function(){this._$window.off(".zoom"),this._$document.off(".zoom"),document.removeEventListener("click",this._boundClick,!0),this._activeZoom=null};Ut.prototype._scrollHandler=function(i){this._initialScrollPosition===null&&(this._initialScrollPosition=window.scrollY);const t=this._initialScrollPosition-window.scrollY;Math.abs(t)>=40&&this._activeZoomClose()};Ut.prototype._keyHandler=function(i){i.keyCode===27&&this._activeZoomClose()};Ut.prototype._clickHandler=function(i){i.stopPropagation(),i.preventDefault(),this._activeZoomClose()};Ut.prototype._touchStart=function(i){this._initialTouchPosition=i.originalEvent.touches[0].pageY,P(i.target).on("touchmove.zoom",P.proxy(this._touchMove,this))};Ut.prototype._touchMove=function(i){Math.abs(i.originalEvent.touches[0].pageY-this._initialTouchPosition)>10&&(this._activeZoomClose(),P(i.target).off("touchmove.zoom"))};function Et(i,t){this._fullHeight=this._fullWidth=this._overlay=null,this._targetImage=i,this._enableMobilePinch=t,this._$body=P(document.body)}Et._OFFSET=80;Et._MAX_WIDTH=2560;Et._MAX_HEIGHT=4096;Et.getOffset=function(i){return i?0:Et._OFFSET};Et.prototype.getOffset=function(){return Et.getOffset(this._enableMobilePinch)};Et.prototype.zoomImage=function(){const i=document.createElement("img"),t=P(i);i.onload=(function(){this._fullHeight=Number(i.height),this._fullWidth=Number(i.width);const e=this._imageOffset=P(this._targetImage).offset(),o=this._left=e.left-P(window).scrollLeft(),a=this._top=e.top-P(window).scrollTop();t.css({left:o,top:a,width:this._targetImage.width,height:this._targetImage.height}),this._zoomOriginal()}).bind(this),i.src=this._targetImage.src,this.$zoomedImage=t};Et.prototype._zoomOriginal=function(){var i,t,e;this.$zoomedImage.addClass("zoom-img").attr("data-action","zoom-out"),P(this._targetImage).css("visibility","hidden"),this._backdrop=document.createElement("div"),this._backdrop.className="zoom-backdrop",(i=document.body)==null||i.appendChild(this._backdrop),this._overlay=document.createElement("div"),this._overlay.className="zoom-overlay",(t=document.body)==null||t.appendChild(this._overlay),(e=this._overlay)==null||e.appendChild(this.$zoomedImage[0]),this._calculateZoom(),this._triggerAnimation()};Et.prototype._calculateZoom=function(){const i=this._fullWidth,t=this._fullHeight,e=window.innerHeight-this.getOffset(),o=window.innerWidth-this.getOffset(),a=i/this._targetImage.width,h=i/t,d=o/e;ie(r,{alt:"ALT"}),s=a=>e(r,{alt:"ALT",height:100,width:500,src:"http://httpstat.us/200?sleep=1000000"}),o=a=>e(r,{src:p,alt:"ALT"}),g=a=>e(r,{height:50,src:p,alt:"ALT"}),c=a=>e(r,{src:p,width:50,alt:"ALT"}),m=a=>e(r,{extraGraphie:{box:[200,200],range:[[0,10],[0,10]],labels:["ok"]},src:p,alt:"ALT"}),i=a=>e(r,{src:j,alt:"ALT"}),n=a=>e(r,{src:k,alt:"ALT"});t.__docgenInfo={description:"",methods:[],displayName:"MostlyEmptyPropsObject"};s.__docgenInfo={description:"",methods:[],displayName:"SvgImageThatDoesntLoad"};o.__docgenInfo={description:"",methods:[],displayName:"SvgImageBasic"};g.__docgenInfo={description:"",methods:[],displayName:"SvgImageWithFixedHeight"};c.__docgenInfo={description:"",methods:[],displayName:"SvgImageWithFixedWidth"};m.__docgenInfo={description:"",methods:[],displayName:"SvgImageWithExtraGraphieProps"};i.__docgenInfo={description:"",methods:[],displayName:"PngImage"};n.__docgenInfo={description:"",methods:[],displayName:"GraphieImage"};var d,h,l;t.parameters={...t.parameters,docs:{...(d=t.parameters)==null?void 0:d.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as e}from"./jsx-runtime-FVsy8kgq.js";import{S as r}from"./svg-image-RL9NlJEY.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./version-akiLXZts.js";import"./util-YrNvlCNO.js";import"./jquery-yG1GhClm.js";import"./index-awljIyHI.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./index-dnMhQZ-1.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./index-7vsPyIck.js";import"./index-J2t_5nK1.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";const se={title:"Perseus/Components/SVG Image"},p="http://www.khanacademy.org/images/ohnoes-concerned.svg",j="https://www.khanacademy.org/images/hand-tree.new.png",k="web+graphie://ka-perseus-graphie.s3.amazonaws.com/1e06f6d4071f30cee2cc3ccb7435b3a66a62fe3f",t=a=>e(r,{alt:"ALT"}),s=a=>e(r,{alt:"ALT",height:100,width:500,src:"http://httpstat.us/200?sleep=1000000"}),o=a=>e(r,{src:p,alt:"ALT"}),g=a=>e(r,{height:50,src:p,alt:"ALT"}),c=a=>e(r,{src:p,width:50,alt:"ALT"}),m=a=>e(r,{extraGraphie:{box:[200,200],range:[[0,10],[0,10]],labels:["ok"]},src:p,alt:"ALT"}),i=a=>e(r,{src:j,alt:"ALT"}),n=a=>e(r,{src:k,alt:"ALT"});t.__docgenInfo={description:"",methods:[],displayName:"MostlyEmptyPropsObject"};s.__docgenInfo={description:"",methods:[],displayName:"SvgImageThatDoesntLoad"};o.__docgenInfo={description:"",methods:[],displayName:"SvgImageBasic"};g.__docgenInfo={description:"",methods:[],displayName:"SvgImageWithFixedHeight"};c.__docgenInfo={description:"",methods:[],displayName:"SvgImageWithFixedWidth"};m.__docgenInfo={description:"",methods:[],displayName:"SvgImageWithExtraGraphieProps"};i.__docgenInfo={description:"",methods:[],displayName:"PngImage"};n.__docgenInfo={description:"",methods:[],displayName:"GraphieImage"};var d,h,l;t.parameters={...t.parameters,docs:{...(d=t.parameters)==null?void 0:d.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(l=(h=t.parameters)==null?void 0:h.docs)==null?void 0:l.source}}};var u,S,I;s.parameters={...s.parameters,docs:{...(u=s.parameters)==null?void 0:u.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; diff --git a/assets/syntaxhighlighter-B5GMVT5T-miRWAUdB.js b/assets/syntaxhighlighter-B5GMVT5T-IV_pqN5-.js similarity index 76% rename from assets/syntaxhighlighter-B5GMVT5T-miRWAUdB.js rename to assets/syntaxhighlighter-B5GMVT5T-IV_pqN5-.js index e1601544f9..dc6317b4bb 100644 --- a/assets/syntaxhighlighter-B5GMVT5T-miRWAUdB.js +++ b/assets/syntaxhighlighter-B5GMVT5T-IV_pqN5-.js @@ -1 +1 @@ -import{S as g,c as h,s as u}from"./DocsRenderer-NNNQARDV-ONpjav1a.js";import"./iframe-sjDFBNDn.js";import"../sb-preview/runtime.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./react-18-N0svEjlN.js";import"./client-rbWgHzHN.js";import"./index-7vsPyIck.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./bundle.esm-7jAAHVxW.js";import"./index-ogXoivrg.js";import"./_getPrototype-bjD8Yebc.js";import"./index-PPLHz8o0.js";export{g as SyntaxHighlighter,h as createCopyToClipboardFunction,u as default}; +import{S as g,c as h,s as u}from"./DocsRenderer-NNNQARDV-AKp_79_j.js";import"./iframe-uulHRm1N.js";import"../sb-preview/runtime.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./react-18-N0svEjlN.js";import"./client-rbWgHzHN.js";import"./index-7vsPyIck.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./bundle.esm-7jAAHVxW.js";import"./index-ogXoivrg.js";import"./_getPrototype-bjD8Yebc.js";import"./index-PPLHz8o0.js";export{g as SyntaxHighlighter,h as createCopyToClipboardFunction,u as default}; diff --git a/assets/tabbar.stories-XOe59aSK.js b/assets/tabbar.stories-XOe59aSK.js index 5404962ee2..4b4767a913 100644 --- a/assets/tabbar.stories-XOe59aSK.js +++ b/assets/tabbar.stories-XOe59aSK.js @@ -1,4 +1,4 @@ -import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{r as i}from"./index-TT1qJ6UJ.js";import{T as n}from"./tabbar-WYCYDof0.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-deFLJwr4.js";const O={title:"math-input/components/Tab Bar",component:n};function l(e){const[p,c]=i.useState("Numbers");return a(n,{...e,selectedItem:p,onSelectItem:r=>{e.onSelectItem(r),c(r)}})}const t={argTypes:{selectedItem:{options:["Numbers","Geometry","Operators"]}},args:{items:["Numbers","Geometry","Operators"]},parameters:{controls:{exclude:["items","onSelectItem","selectedItem","onClickClose"]}},render:e=>a(l,{...e})};var o,s,m;t.parameters={...t.parameters,docs:{...(o=t.parameters)==null?void 0:o.docs,source:{originalSource:`{ +import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{r as i}from"./index-TT1qJ6UJ.js";import{T as n}from"./tabbar-WYCYDof0.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-deFLJwr4.js";const O={title:"math-input/components/Tab Bar",component:n};function l(e){const[p,c]=i.useState("Numbers");return a(n,{...e,selectedItem:p,onSelectItem:r=>{e.onSelectItem(r),c(r)}})}const t={argTypes:{selectedItem:{options:["Numbers","Geometry","Operators"]}},args:{items:["Numbers","Geometry","Operators"]},parameters:{controls:{exclude:["items","onSelectItem","selectedItem","onClickClose"]}},render:e=>a(l,{...e})};var o,s,m;t.parameters={...t.parameters,docs:{...(o=t.parameters)==null?void 0:o.docs,source:{originalSource:`{ argTypes: { selectedItem: { options: ["Numbers", "Geometry", "Operators"] diff --git a/assets/tabbaritem.stories-mdibAqRo.js b/assets/tabbaritem.stories-mdibAqRo.js index b7ee914b8a..a216874ffc 100644 --- a/assets/tabbaritem.stories-mdibAqRo.js +++ b/assets/tabbaritem.stories-mdibAqRo.js @@ -1,4 +1,4 @@ -import{T as o}from"./item-X9tjzx12.js";import"./jsx-runtime-FVsy8kgq.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-WNT3sUKf.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-deFLJwr4.js";const g={title:"math-input/components/Tab Bar Item",component:o},t={args:{itemState:"inactive",itemType:"Numbers"}};var e,r,m;t.parameters={...t.parameters,docs:{...(e=t.parameters)==null?void 0:e.docs,source:{originalSource:`{ +import{T as o}from"./item-X9tjzx12.js";import"./jsx-runtime-FVsy8kgq.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./index-2dmvOE3q.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-deFLJwr4.js";const g={title:"math-input/components/Tab Bar Item",component:o},t={args:{itemState:"inactive",itemType:"Numbers"}};var e,r,m;t.parameters={...t.parameters,docs:{...(e=t.parameters)==null?void 0:e.docs,source:{originalSource:`{ args: { itemState: ("inactive" as const), itemType: "Numbers" diff --git a/assets/tags-diff-2P1jpY0i.js b/assets/tags-diff-QpgBeBx_.js similarity index 90% rename from assets/tags-diff-2P1jpY0i.js rename to assets/tags-diff-QpgBeBx_.js index 67f533fe30..fcbe74cb6e 100644 --- a/assets/tags-diff-2P1jpY0i.js +++ b/assets/tags-diff-QpgBeBx_.js @@ -1,4 +1,4 @@ -import{a as d,j as t}from"./jsx-runtime-FVsy8kgq.js";import{r as p}from"./index-TT1qJ6UJ.js";import{T as f}from"./text-diff-2XL6ZGXE.js";const a=class a extends p.Component{render(){const{afterOnly:s,beforeOnly:n,intersection:r,showSeparator:o}=this.props,i=r.concat(n).join(` +import{a as d,j as t}from"./jsx-runtime-FVsy8kgq.js";import{r as p}from"./index-TT1qJ6UJ.js";import{T as f}from"./text-diff-VQhvkbai.js";const a=class a extends p.Component{render(){const{afterOnly:s,beforeOnly:n,intersection:r,showSeparator:o}=this.props,i=r.concat(n).join(` `)+` `,l=r.concat(s).join(` `)+` diff --git a/assets/tags-diff.stories-IJbiGITL.js b/assets/tags-diff.stories-B5Hjkrkm.js similarity index 68% rename from assets/tags-diff.stories-IJbiGITL.js rename to assets/tags-diff.stories-B5Hjkrkm.js index 6698054cae..16c21f4340 100644 --- a/assets/tags-diff.stories-IJbiGITL.js +++ b/assets/tags-diff.stories-B5Hjkrkm.js @@ -1,3 +1,3 @@ -import{j as t}from"./jsx-runtime-FVsy8kgq.js";import{T as e}from"./tags-diff-2P1jpY0i.js";import{W as s}from"./perseus-diff-wrapper-dJxBlkDd.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./text-diff-2XL6ZGXE.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./index-0C4KXdeC.js";const $r={title:"PerseusEditor/Diffs/Tags Diff",decorators:[o=>t(s,{children:t(o,{})})]},r=o=>t(e,{title:"tags",beforeOnly:["Math","Biology","History"],afterOnly:["World War I"],intersection:["Physics","Chemistry"]});r.__docgenInfo={description:"",methods:[],displayName:"Example"};var i,m,p;r.parameters={...r.parameters,docs:{...(i=r.parameters)==null?void 0:i.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as t}from"./jsx-runtime-FVsy8kgq.js";import{T as e}from"./tags-diff-QpgBeBx_.js";import{W as s}from"./perseus-diff-wrapper-dJxBlkDd.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./text-diff-VQhvkbai.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./index-k-0mNqHS.js";const $r={title:"PerseusEditor/Diffs/Tags Diff",decorators:[o=>t(s,{children:t(o,{})})]},r=o=>t(e,{title:"tags",beforeOnly:["Math","Biology","History"],afterOnly:["World War I"],intersection:["Physics","Chemistry"]});r.__docgenInfo={description:"",methods:[],displayName:"Example"};var i,m,p;r.parameters={...r.parameters,docs:{...(i=r.parameters)==null?void 0:i.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(p=(m=r.parameters)==null?void 0:m.docs)==null?void 0:p.source}}};const rt=["Example"];export{r as Example,rt as __namedExportsOrder,$r as default}; diff --git a/assets/test-dependencies-UUeUFXqw.js b/assets/test-dependencies-OZugV_HD.js similarity index 96% rename from assets/test-dependencies-UUeUFXqw.js rename to assets/test-dependencies-OZugV_HD.js index c7c0e360f0..16e1d9959d 100644 --- a/assets/test-dependencies-UUeUFXqw.js +++ b/assets/test-dependencies-OZugV_HD.js @@ -1 +1 @@ -import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{r as u}from"./register-all-widgets-for-testing-qzjCjLVo.js";import{d as c}from"./key-translator-IA-2V2LV.js";import{r as n}from"./index-TT1qJ6UJ.js";const s=new c.MathJaxRenderer({shouldFixUnicodeLayout:!0,fontURL:"https://cdn.kastatic.org/fonts/mathjax",locale:"en"});function a({children:e,onRender:t}){const o=n.useRef(null),{domElement:i,addLabelWhenPresentational:d}=n.useMemo(()=>s.render(e),[e]);return n.useLayoutEffect(()=>{o.current&&(d(o.current),o.current.innerHTML="",o.current.appendChild(i))}),n.useEffect(()=>{s.updateStyles(),t==null||t()},[e,t]),r("span",{ref:o})}a.__docgenInfo={description:"",methods:[],displayName:"TestMathjax",props:{children:{required:!0,tsType:{name:"string"},description:""},onRender:{required:!1,tsType:{name:"signature",type:"function",raw:"(root?: any) => unknown",signature:{arguments:[{type:{name:"any"},name:"root"}],return:{name:"unknown"}}},description:""}}};u();const l={log:()=>{},error:()=>{}},p={JIPT:{useJIPT:!1},graphieMovablesJiptLabels:{addLabel:(e,t)=>{}},svgImageJiptLabels:{addLabel:(e,t)=>{}},rendererTranslationComponents:{addComponent:e=>-1,removeComponentAtIndex:e=>{}},logKaTeXError:(e,t)=>Promise.resolve({}),TeX:({children:e})=>r("span",{className:"mock-TeX",children:e}),staticUrl:e=>`mockStaticUrl(${e})`,useVideo:(e,t)=>e==="YoutubeId"&&t==="YOUTUBE_ID"?{status:"success",data:{video:{id:"YoutubeVideo",contentId:"contentId",youtubeId:"YoutubeId",title:"Youtube Video Title",__typename:"Video"}}}:e==="slug-video-id"&&t==="READABLE_ID"?{status:"success",data:{video:{title:"Slug Video Title",id:"VideoId",youtubeId:"YoutubeId",contentId:"contentId",__typename:"Video"}}}:{status:"loading"},InitialRequestUrl:{origin:"origin-test-interface",host:"host-test-interface",protocol:"protocol-test-interface"},isDevServer:!1,kaLocale:"en",isMobile:!1,Log:l},b={...p,TeX:a,staticUrl:e=>e},I={analytics:{onAnalyticsEvent:async e=>{console.log("⚡️ Sending analytics event:",e)}}};export{b as a,I as s}; +import{j as r}from"./jsx-runtime-FVsy8kgq.js";import{r as u}from"./register-all-widgets-for-testing-xSlGtLC1.js";import{d as c}from"./key-translator-IA-2V2LV.js";import{r as n}from"./index-TT1qJ6UJ.js";const s=new c.MathJaxRenderer({shouldFixUnicodeLayout:!0,fontURL:"https://cdn.kastatic.org/fonts/mathjax",locale:"en"});function a({children:e,onRender:t}){const o=n.useRef(null),{domElement:i,addLabelWhenPresentational:d}=n.useMemo(()=>s.render(e),[e]);return n.useLayoutEffect(()=>{o.current&&(d(o.current),o.current.innerHTML="",o.current.appendChild(i))}),n.useEffect(()=>{s.updateStyles(),t==null||t()},[e,t]),r("span",{ref:o})}a.__docgenInfo={description:"",methods:[],displayName:"TestMathjax",props:{children:{required:!0,tsType:{name:"string"},description:""},onRender:{required:!1,tsType:{name:"signature",type:"function",raw:"(root?: any) => unknown",signature:{arguments:[{type:{name:"any"},name:"root"}],return:{name:"unknown"}}},description:""}}};u();const l={log:()=>{},error:()=>{}},p={JIPT:{useJIPT:!1},graphieMovablesJiptLabels:{addLabel:(e,t)=>{}},svgImageJiptLabels:{addLabel:(e,t)=>{}},rendererTranslationComponents:{addComponent:e=>-1,removeComponentAtIndex:e=>{}},logKaTeXError:(e,t)=>Promise.resolve({}),TeX:({children:e})=>r("span",{className:"mock-TeX",children:e}),staticUrl:e=>`mockStaticUrl(${e})`,useVideo:(e,t)=>e==="YoutubeId"&&t==="YOUTUBE_ID"?{status:"success",data:{video:{id:"YoutubeVideo",contentId:"contentId",youtubeId:"YoutubeId",title:"Youtube Video Title",__typename:"Video"}}}:e==="slug-video-id"&&t==="READABLE_ID"?{status:"success",data:{video:{title:"Slug Video Title",id:"VideoId",youtubeId:"YoutubeId",contentId:"contentId",__typename:"Video"}}}:{status:"loading"},InitialRequestUrl:{origin:"origin-test-interface",host:"host-test-interface",protocol:"protocol-test-interface"},isDevServer:!1,kaLocale:"en",isMobile:!1,Log:l},b={...p,TeX:a,staticUrl:e=>e},I={analytics:{onAnalyticsEvent:async e=>{console.log("⚡️ Sending analytics event:",e)}}};export{b as a,I as s}; diff --git a/assets/text-diff-2XL6ZGXE.js b/assets/text-diff-VQhvkbai.js similarity index 93% rename from assets/text-diff-2XL6ZGXE.js rename to assets/text-diff-VQhvkbai.js index 2a8eb0db56..8ae2d2991d 100644 --- a/assets/text-diff-2XL6ZGXE.js +++ b/assets/text-diff-VQhvkbai.js @@ -1,4 +1,4 @@ -import{j as c,a as b}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import{_ as d}from"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as Q}from"./components-GHvuFaIn.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";import{c as R}from"./index-dnMhQZ-1.js";import{P as E}from"./index-0C4KXdeC.js";import{r as U}from"./index-TT1qJ6UJ.js";function M(t){return{newPos:t.newPos,components:t.components.slice(0)}}function V(t){for(var e=[],n=0;n/g,">"),e=e.replace(/"/g,"""),e}var C=function(t){this.ignoreWhitespace=t};C.prototype={diff:function(t,e){if(e===t)return[{value:e}];if(!e)return[{value:t,removed:!0}];if(!t)return[{value:e,added:!0}];e=this.tokenize(e),t=this.tokenize(t);var n=e.length,r=t.length,f=n+r,i=[{newPos:-1,components:[]}],s=this.extractCommon(i[0],e,t,0);if(i[0].newPos+1>=n&&s+1>=r)return i[0].components;for(var p=1;p<=f;p++)for(var o=-1*p;o<=p;o+=2){var a,l=i[o-1],u=i[o+1];s=(u?u.newPos:0)-o,l&&(i[o-1]=void 0);var m=l&&l.newPos+1=n&&s+1>=r)return a.components;i[o]=a}},pushComponent:function(t,e,n,r){var f=t[t.length-1];f&&f.added===n&&f.removed===r?t[t.length-1]={value:this.join(f.value,e),added:n,removed:r}:t.push({value:e,added:n,removed:r})},extractCommon:function(t,e,n,r){for(var f=e.length,i=n.length,s=t.newPos,p=s-r;s+1/g,">"),e=e.replace(/"/g,"""),e}var C=function(t){this.ignoreWhitespace=t};C.prototype={diff:function(t,e){if(e===t)return[{value:e}];if(!e)return[{value:t,removed:!0}];if(!t)return[{value:e,added:!0}];e=this.tokenize(e),t=this.tokenize(t);var n=e.length,r=t.length,f=n+r,i=[{newPos:-1,components:[]}],s=this.extractCommon(i[0],e,t,0);if(i[0].newPos+1>=n&&s+1>=r)return i[0].components;for(var p=1;p<=f;p++)for(var o=-1*p;o<=p;o+=2){var a,l=i[o-1],u=i[o+1];s=(u?u.newPos:0)-o,l&&(i[o-1]=void 0);var m=l&&l.newPos+1=n&&s+1>=r)return a.components;i[o]=a}},pushComponent:function(t,e,n,r){var f=t[t.length-1];f&&f.added===n&&f.removed===r?t[t.length-1]={value:this.join(f.value,e),added:n,removed:r}:t.push({value:e,added:n,removed:r})},extractCommon:function(t,e,n,r){for(var f=e.length,i=n.length,s=t.newPos,p=s-r;s+1"u"?"":" "+r)),i.push("+++ "+t+(typeof f>"u"?"":" "+f));var s=F.diff(e,n);s[s.length-1].value||s.pop(),s.push({value:"",lines:[]});function p(N){return N.map(function(y){return" "+y})}function o(N,y,W){var A=s[s.length-2],J=y===s.length-2,K=y===s.length-3&&(W.added!==A.added||W.removed!==A.removed);!/\n$/.test(W.value)&&(J||K)&&N.push("\\ No newline at end of file")}for(var a=0,l=0,u=[],m=1,v=1,w=0;wt(a,{children:t(o,{})})]},r=o=>t(e,{title:"A day in the life of a text diff",before:"🥱 Hello world!",after:"😴 Goodbye world!"});r.__docgenInfo={description:"",methods:[],displayName:"Example"};var i,m,p;r.parameters={...r.parameters,docs:{...(i=r.parameters)==null?void 0:i.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as t}from"./jsx-runtime-FVsy8kgq.js";import{T as e}from"./text-diff-VQhvkbai.js";import{W as a}from"./perseus-diff-wrapper-dJxBlkDd.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./index-k-0mNqHS.js";const Zr={title:"PerseusEditor/Diffs/Text Diff",decorators:[o=>t(a,{children:t(o,{})})]},r=o=>t(e,{title:"A day in the life of a text diff",before:"🥱 Hello world!",after:"😴 Goodbye world!"});r.__docgenInfo={description:"",methods:[],displayName:"Example"};var i,m,p;r.parameters={...r.parameters,docs:{...(i=r.parameters)==null?void 0:i.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ; }`,...(p=(m=r.parameters)==null?void 0:m.docs)==null?void 0:p.source}}};const $r=["Example"];export{r as Example,$r as __namedExportsOrder,Zr as default}; diff --git a/assets/text-list-editor-pe7AGDAl.js b/assets/text-list-editor-pe7AGDAl.js index a220be9fa7..0c253ae941 100644 --- a/assets/text-list-editor-pe7AGDAl.js +++ b/assets/text-list-editor-pe7AGDAl.js @@ -1 +1 @@ -import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{_ as i,$ as f}from"./jquery-yG1GhClm.js";import{P as c}from"./index-k-0mNqHS.js";import{r as m}from"./index-TT1qJ6UJ.js";import{R as l}from"./index-7vsPyIck.js";const u={};function d(a){if(!u[a]){const t=f("").text(a).appendTo("body");u[a]=t.width()+5,t.remove()}return u[a]}const r=class r extends m.Component{constructor(){super(...arguments),this.state={items:this.props.options.concat("")},this.onChange=(t,o)=>{let s=i.clone(this.state.items);s[t]=o.target.value,t===s.length-1&&(s=s.concat("")),this.setState({items:s}),this.props.onChange(i.compact(s))},this.onKeyDown=(t,o)=>{const s=o.nativeEvent.keyCode;if(s===8&&this.state.items[t]===""){o.preventDefault();const e=i.clone(this.state.items),n=t===0?0:t-1;t===e.length-1&&(t===0||e[n]!=="")?l.findDOMNode(this.refs["input_"+n]).focus():(e.splice(t,1),this.setState({items:e},function(){l.findDOMNode(this.refs["input_"+n]).focus()}))}else if(s===8&&this.state.items[t].length===1&&t===this.state.items.length-2){o.preventDefault();const e=i.clone(this.state.items);e.splice(t,1),this.setState({items:e}),this.props.onChange(i.compact(e))}else if(s===13){o.preventDefault();const e=i.clone(this.state.items),n=t+1;t===e.length-2?l.findDOMNode(this.refs["input_"+n]).focus():(e.splice(n,0,""),this.setState({items:e},function(){l.findDOMNode(this.refs["input_"+n]).focus()}))}}}UNSAFE_componentWillReceiveProps(t){this.setState({items:t.options.concat("")})}render(){const t=["perseus-text-list-editor","perseus-clearfix","layout-"+this.props.layout].join(" "),o=i.map(this.state.items,function(s,e){return p("li",{children:p("input",{ref:"input_"+e,type:"text",value:s,onChange:this.onChange.bind(this,e),onKeyDown:this.onKeyDown.bind(this,e),style:{width:d(s)}})},e)},this);return p("ul",{className:t,children:o})}};r.propTypes={options:c.array,layout:c.string,onChange:c.func.isRequired},r.defaultProps={options:[],layout:"horizontal"};let h=r;h.__docgenInfo={description:"",methods:[{name:"onChange",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:null},{name:"event",optional:!1,type:null}],returns:null},{name:"onKeyDown",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:null},{name:"event",optional:!1,type:null}],returns:null}],displayName:"TextListEditor",props:{options:{defaultValue:{value:"[]",computed:!1},description:"",type:{name:"array"},required:!1},layout:{defaultValue:{value:'"horizontal"',computed:!1},description:"",type:{name:"string"},required:!1},onChange:{description:"",type:{name:"func"},required:!0}}};export{h as T}; +import{j as p}from"./jsx-runtime-FVsy8kgq.js";import{_ as i,$ as f}from"./jquery-yG1GhClm.js";import{P as c}from"./index-0C4KXdeC.js";import{r as m}from"./index-TT1qJ6UJ.js";import{R as l}from"./index-7vsPyIck.js";const u={};function d(a){if(!u[a]){const t=f("").text(a).appendTo("body");u[a]=t.width()+5,t.remove()}return u[a]}const r=class r extends m.Component{constructor(){super(...arguments),this.state={items:this.props.options.concat("")},this.onChange=(t,o)=>{let s=i.clone(this.state.items);s[t]=o.target.value,t===s.length-1&&(s=s.concat("")),this.setState({items:s}),this.props.onChange(i.compact(s))},this.onKeyDown=(t,o)=>{const s=o.nativeEvent.keyCode;if(s===8&&this.state.items[t]===""){o.preventDefault();const e=i.clone(this.state.items),n=t===0?0:t-1;t===e.length-1&&(t===0||e[n]!=="")?l.findDOMNode(this.refs["input_"+n]).focus():(e.splice(t,1),this.setState({items:e},function(){l.findDOMNode(this.refs["input_"+n]).focus()}))}else if(s===8&&this.state.items[t].length===1&&t===this.state.items.length-2){o.preventDefault();const e=i.clone(this.state.items);e.splice(t,1),this.setState({items:e}),this.props.onChange(i.compact(e))}else if(s===13){o.preventDefault();const e=i.clone(this.state.items),n=t+1;t===e.length-2?l.findDOMNode(this.refs["input_"+n]).focus():(e.splice(n,0,""),this.setState({items:e},function(){l.findDOMNode(this.refs["input_"+n]).focus()}))}}}UNSAFE_componentWillReceiveProps(t){this.setState({items:t.options.concat("")})}render(){const t=["perseus-text-list-editor","perseus-clearfix","layout-"+this.props.layout].join(" "),o=i.map(this.state.items,function(s,e){return p("li",{children:p("input",{ref:"input_"+e,type:"text",value:s,onChange:this.onChange.bind(this,e),onKeyDown:this.onKeyDown.bind(this,e),style:{width:d(s)}})},e)},this);return p("ul",{className:t,children:o})}};r.propTypes={options:c.array,layout:c.string,onChange:c.func.isRequired},r.defaultProps={options:[],layout:"horizontal"};let h=r;h.__docgenInfo={description:"",methods:[{name:"onChange",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:null},{name:"event",optional:!1,type:null}],returns:null},{name:"onKeyDown",docblock:null,modifiers:[],params:[{name:"index",optional:!1,type:null},{name:"event",optional:!1,type:null}],returns:null}],displayName:"TextListEditor",props:{options:{defaultValue:{value:"[]",computed:!1},description:"",type:{name:"array"},required:!1},layout:{defaultValue:{value:'"horizontal"',computed:!1},description:"",type:{name:"string"},required:!1},onChange:{description:"",type:{name:"func"},required:!0}}};export{h as T}; diff --git a/assets/text-list-editor.stories-IcrK9bTU.js b/assets/text-list-editor.stories-IcrK9bTU.js index 2bd1fcc608..fcc70911ac 100644 --- a/assets/text-list-editor.stories-IcrK9bTU.js +++ b/assets/text-list-editor.stories-IcrK9bTU.js @@ -1,4 +1,4 @@ -import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{a as n}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{T as a}from"./text-list-editor-pe7AGDAl.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./jquery-yG1GhClm.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./index-7vsPyIck.js";const S={title:"Perseus/Components/Text List Editor"},p={onChange:(...e)=>{n("onChange")(...e)},options:["Test option 1","Test option 2","Test option 3"]},m="framework-perseus orderer",t=e=>s("div",{class:m,children:s(a,{...p})});t.__docgenInfo={description:"",methods:[],displayName:"SimpleListOfOptions"};var o,r,i;t.parameters={...t.parameters,docs:{...(o=t.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { +import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{a as n}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{T as a}from"./text-list-editor-pe7AGDAl.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./jquery-yG1GhClm.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./index-7vsPyIck.js";const S={title:"Perseus/Components/Text List Editor"},p={onChange:(...e)=>{n("onChange")(...e)},options:["Test option 1","Test option 2","Test option 3"]},m="framework-perseus orderer",t=e=>s("div",{class:m,children:s(a,{...p})});t.__docgenInfo={description:"",methods:[],displayName:"SimpleListOfOptions"};var o,r,i;t.parameters={...t.parameters,docs:{...(o=t.parameters)==null?void 0:o.docs,source:{originalSource:`(args: StoryArgs): React.ReactElement => { return ( // @ts-expect-error [FEI-5003] - TS2322 - Type '{ children: Element; class: string; }' is not assignable to type 'DetailedHTMLProps, HTMLDivElement>'.
diff --git a/assets/util-XcxTwqb0.js b/assets/util-YrNvlCNO.js similarity index 92% rename from assets/util-XcxTwqb0.js rename to assets/util-YrNvlCNO.js index 7189fffefe..df4fb95ecf 100644 --- a/assets/util-XcxTwqb0.js +++ b/assets/util-YrNvlCNO.js @@ -1,36 +1,36 @@ -import{a as rt}from"./version-akiLXZts.js";import{$ as fe,_ as te}from"./jquery-yG1GhClm.js";import{c as it,g as st}from"./_commonjsHelpers-4gQjN7DL.js";const De=Object.freeze({Unknown:"Unknown",Internal:"Internal",InvalidInput:"InvalidInput",NotAllowed:"NotAllowed",TransientService:"TransientService",Service:"Service"});class qe extends Error{constructor(n,a,c){super(n),this.kind=a,this.metadata=c==null?void 0:c.metadata}}const dt="@khanacademy/kas",vt="__lib_version__";rt(dt,vt);var Ce={exports:{}};(function(e,n){(function(){var a=this,c=a._,o={},l=Array.prototype,p=Object.prototype,v=Function.prototype,y=l.push,w=l.slice,g=l.concat,d=p.toString,x=p.hasOwnProperty,m=l.forEach,O=l.map,E=l.reduce,D=l.reduceRight,P=l.filter,Z=l.every,X=l.some,ue=l.indexOf,de=l.lastIndexOf,J=Array.isArray,Q=Object.keys,ie=v.bind,i=function(t){if(t instanceof i)return t;if(!(this instanceof i))return new i(t);this._wrapped=t};e.exports&&(n=e.exports=i),n._=i,i.VERSION="1.4.4";var L=i.each=i.forEach=function(t,r,s){if(t!=null){if(m&&t.forEach===m)t.forEach(r,s);else if(t.length===+t.length){for(var u=0,h=t.length;u2;if(t==null&&(t=[]),E&&t.reduce===E)return u&&(r=i.bind(r,u)),h?t.reduce(r,s):t.reduce(r);if(L(t,function(M,_,F){h?s=r.call(u,s,M,_,F):(s=M,h=!0)}),!h)throw new TypeError(ge);return s},i.reduceRight=i.foldr=function(t,r,s,u){var h=arguments.length>2;if(t==null&&(t=[]),D&&t.reduceRight===D)return u&&(r=i.bind(r,u)),h?t.reduceRight(r,s):t.reduceRight(r);var M=t.length;if(M!==+M){var _=i.keys(t);M=_.length}if(L(t,function(F,R,W){R=_?_[--M]:--M,h?s=r.call(u,s,t[R],R,W):(s=t[R],h=!0)}),!h)throw new TypeError(ge);return s},i.find=i.detect=function(t,r,s){var u;return K(t,function(h,M,_){if(r.call(s,h,M,_))return u=h,!0}),u},i.filter=i.select=function(t,r,s){var u=[];return t==null?u:P&&t.filter===P?t.filter(r,s):(L(t,function(h,M,_){r.call(s,h,M,_)&&(u[u.length]=h)}),u)},i.reject=function(t,r,s){return i.filter(t,function(u,h,M){return!r.call(s,u,h,M)},s)},i.every=i.all=function(t,r,s){r||(r=i.identity);var u=!0;return t==null?u:Z&&t.every===Z?t.every(r,s):(L(t,function(h,M,_){if(!(u=u&&r.call(s,h,M,_)))return o}),!!u)};var K=i.some=i.any=function(t,r,s){r||(r=i.identity);var u=!1;return t==null?u:X&&t.some===X?t.some(r,s):(L(t,function(h,M,_){if(u||(u=r.call(s,h,M,_)))return o}),!!u)};i.contains=i.include=function(t,r){return t==null?!1:ue&&t.indexOf===ue?t.indexOf(r)!=-1:K(t,function(s){return s===r})},i.invoke=function(t,r){var s=w.call(arguments,2),u=i.isFunction(r);return i.map(t,function(h){return(u?r:h[r]).apply(h,s)})},i.pluck=function(t,r){return i.map(t,function(s){return s[r]})},i.where=function(t,r,s){return i.isEmpty(r)?s?null:[]:i[s?"find":"filter"](t,function(u){for(var h in r)if(r[h]!==u[h])return!1;return!0})},i.findWhere=function(t,r){return i.where(t,r,!0)},i.max=function(t,r,s){if(!r&&i.isArray(t)&&t[0]===+t[0]&&t.length<65535)return Math.max.apply(Math,t);if(!r&&i.isEmpty(t))return-1/0;var u={computed:-1/0,value:-1/0};return L(t,function(h,M,_){var F=r?r.call(s,h,M,_):h;F>=u.computed&&(u={value:h,computed:F})}),u.value},i.min=function(t,r,s){if(!r&&i.isArray(t)&&t[0]===+t[0]&&t.length<65535)return Math.min.apply(Math,t);if(!r&&i.isEmpty(t))return 1/0;var u={computed:1/0,value:1/0};return L(t,function(h,M,_){var F=r?r.call(s,h,M,_):h;FF||_===void 0)return 1;if(_>>1;s.call(u,t[F])=0})})},i.difference=function(t){var r=g.apply(l,w.call(arguments,1));return i.filter(t,function(s){return!i.contains(r,s)})},i.zip=function(){for(var t=w.call(arguments),r=i.max(i.pluck(t,"length")),s=new Array(r),u=0;u=0;s--)r=[t[s].apply(this,r)];return r[0]}},i.after=function(t,r){return t<=0?r():function(){if(--t<1)return r.apply(this,arguments)}},i.keys=Q||function(t){if(t!==Object(t))throw new TypeError("Invalid object");var r=[];for(var s in t)i.has(t,s)&&(r[r.length]=s);return r},i.values=function(t){var r=[];for(var s in t)i.has(t,s)&&r.push(t[s]);return r},i.pairs=function(t){var r=[];for(var s in t)i.has(t,s)&&r.push([s,t[s]]);return r},i.invert=function(t){var r={};for(var s in t)i.has(t,s)&&(r[t[s]]=s);return r},i.functions=i.methods=function(t){var r=[];for(var s in t)i.isFunction(t[s])&&r.push(s);return r.sort()},i.extend=function(t){return L(w.call(arguments,1),function(r){if(r)for(var s in r)t[s]=r[s]}),t},i.pick=function(t){var r={},s=g.apply(l,w.call(arguments,1));return L(s,function(u){u in t&&(r[u]=t[u])}),r},i.omit=function(t){var r={},s=g.apply(l,w.call(arguments,1));for(var u in t)i.contains(s,u)||(r[u]=t[u]);return r},i.defaults=function(t){return L(w.call(arguments,1),function(r){if(r)for(var s in r)t[s]==null&&(t[s]=r[s])}),t},i.clone=function(t){return i.isObject(t)?i.isArray(t)?t.slice():i.extend({},t):t},i.tap=function(t,r){return r(t),t};var b=function(t,r,s,u){if(t===r)return t!==0||1/t==1/r;if(t==null||r==null)return t===r;t instanceof i&&(t=t._wrapped),r instanceof i&&(r=r._wrapped);var h=d.call(t);if(h!=d.call(r))return!1;switch(h){case"[object String]":return t==String(r);case"[object Number]":return t!=+t?r!=+r:t==0?1/t==1/r:t==+r;case"[object Date]":case"[object Boolean]":return+t==+r;case"[object RegExp]":return t.source==r.source&&t.global==r.global&&t.multiline==r.multiline&&t.ignoreCase==r.ignoreCase}if(typeof t!="object"||typeof r!="object")return!1;for(var M=s.length;M--;)if(s[M]==t)return u[M]==r;s.push(t),u.push(r);var _=0,F=!0;if(h=="[object Array]"){if(_=t.length,F=_==r.length,F)for(;_--&&(F=b(t[_],r[_],s,u)););}else{var R=t.constructor,W=r.constructor;if(R!==W&&!(i.isFunction(R)&&R instanceof R&&i.isFunction(W)&&W instanceof W))return!1;for(var $ in t)if(i.has(t,$)&&(_++,!(F=i.has(r,$)&&b(t[$],r[$],s,u))))break;if(F){for($ in r)if(i.has(r,$)&&!_--)break;F=!_}}return s.pop(),u.pop(),F};i.isEqual=function(t,r){return b(t,r,[],[])},i.isEmpty=function(t){if(t==null)return!0;if(i.isArray(t)||i.isString(t))return t.length===0;for(var r in t)if(i.has(t,r))return!1;return!0},i.isElement=function(t){return!!(t&&t.nodeType===1)},i.isArray=J||function(t){return d.call(t)=="[object Array]"},i.isObject=function(t){return t===Object(t)},L(["Arguments","Function","String","Number","Date","RegExp"],function(t){i["is"+t]=function(r){return d.call(r)=="[object "+t+"]"}}),i.isArguments(arguments)||(i.isArguments=function(t){return!!(t&&i.has(t,"callee"))}),typeof/./!="function"&&(i.isFunction=function(t){return typeof t=="function"}),i.isFinite=function(t){return isFinite(t)&&!isNaN(parseFloat(t))},i.isNaN=function(t){return i.isNumber(t)&&t!=+t},i.isBoolean=function(t){return t===!0||t===!1||d.call(t)=="[object Boolean]"},i.isNull=function(t){return t===null},i.isUndefined=function(t){return t===void 0},i.has=function(t,r){return x.call(t,r)},i.noConflict=function(){return a._=c,this},i.identity=function(t){return t},i.times=function(t,r,s){for(var u=Array(t),h=0;h":">",'"':""","'":"'","/":"/"}};S.unescape=i.invert(S.escape);var G={escape:new RegExp("["+i.keys(S.escape).join("")+"]","g"),unescape:new RegExp("("+i.keys(S.unescape).join("|")+")","g")};i.each(["escape","unescape"],function(t){i[t]=function(r){return r==null?"":(""+r).replace(G[t],function(s){return S[t][s]})}}),i.result=function(t,r){if(t==null)return null;var s=t[r];return i.isFunction(s)?s.call(t):s},i.mixin=function(t){L(i.functions(t),function(r){var s=i[r]=t[r];i.prototype[r]=function(){var u=[this._wrapped];return y.apply(u,arguments),me.call(this,s.apply(i,u))}})};var q=0;i.uniqueId=function(t){var r=++q+"";return t?t+r:r},i.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var ce=/(.)^/,C={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},le=/\\|'|\r|\n|\t|\u2028|\u2029/g;i.template=function(t,r,s){var u;s=i.defaults({},s,i.templateSettings);var h=new RegExp([(s.escape||ce).source,(s.interpolate||ce).source,(s.evaluate||ce).source].join("|")+"|$","g"),M=0,_="__p+='";t.replace(h,function(R,W,$,ye,he){return _+=t.slice(M,he).replace(le,function(Me){return"\\"+C[Me]}),W&&(_+=`'+ +import{a as rt}from"./version-akiLXZts.js";import{$ as fe,_ as te}from"./jquery-yG1GhClm.js";import{c as it,g as st}from"./_commonjsHelpers-4gQjN7DL.js";const De=Object.freeze({Unknown:"Unknown",Internal:"Internal",InvalidInput:"InvalidInput",NotAllowed:"NotAllowed",TransientService:"TransientService",Service:"Service"});class qe extends Error{constructor(n,a,c){super(n),this.kind=a,this.metadata=c==null?void 0:c.metadata}}const dt="@khanacademy/kas",vt="__lib_version__";rt(dt,vt);var Ce={exports:{}};(function(e,n){(function(){var a=this,c=a._,o={},l=Array.prototype,p=Object.prototype,v=Function.prototype,y=l.push,w=l.slice,g=l.concat,d=p.toString,x=p.hasOwnProperty,m=l.forEach,O=l.map,E=l.reduce,D=l.reduceRight,P=l.filter,Z=l.every,X=l.some,ue=l.indexOf,de=l.lastIndexOf,J=Array.isArray,Q=Object.keys,ie=v.bind,i=function(t){if(t instanceof i)return t;if(!(this instanceof i))return new i(t);this._wrapped=t};e.exports&&(n=e.exports=i),n._=i,i.VERSION="1.4.4";var L=i.each=i.forEach=function(t,r,s){if(t!=null){if(m&&t.forEach===m)t.forEach(r,s);else if(t.length===+t.length){for(var u=0,h=t.length;u2;if(t==null&&(t=[]),E&&t.reduce===E)return u&&(r=i.bind(r,u)),h?t.reduce(r,s):t.reduce(r);if(L(t,function(M,_,F){h?s=r.call(u,s,M,_,F):(s=M,h=!0)}),!h)throw new TypeError(ge);return s},i.reduceRight=i.foldr=function(t,r,s,u){var h=arguments.length>2;if(t==null&&(t=[]),D&&t.reduceRight===D)return u&&(r=i.bind(r,u)),h?t.reduceRight(r,s):t.reduceRight(r);var M=t.length;if(M!==+M){var _=i.keys(t);M=_.length}if(L(t,function(F,S,W){S=_?_[--M]:--M,h?s=r.call(u,s,t[S],S,W):(s=t[S],h=!0)}),!h)throw new TypeError(ge);return s},i.find=i.detect=function(t,r,s){var u;return K(t,function(h,M,_){if(r.call(s,h,M,_))return u=h,!0}),u},i.filter=i.select=function(t,r,s){var u=[];return t==null?u:P&&t.filter===P?t.filter(r,s):(L(t,function(h,M,_){r.call(s,h,M,_)&&(u[u.length]=h)}),u)},i.reject=function(t,r,s){return i.filter(t,function(u,h,M){return!r.call(s,u,h,M)},s)},i.every=i.all=function(t,r,s){r||(r=i.identity);var u=!0;return t==null?u:Z&&t.every===Z?t.every(r,s):(L(t,function(h,M,_){if(!(u=u&&r.call(s,h,M,_)))return o}),!!u)};var K=i.some=i.any=function(t,r,s){r||(r=i.identity);var u=!1;return t==null?u:X&&t.some===X?t.some(r,s):(L(t,function(h,M,_){if(u||(u=r.call(s,h,M,_)))return o}),!!u)};i.contains=i.include=function(t,r){return t==null?!1:ue&&t.indexOf===ue?t.indexOf(r)!=-1:K(t,function(s){return s===r})},i.invoke=function(t,r){var s=w.call(arguments,2),u=i.isFunction(r);return i.map(t,function(h){return(u?r:h[r]).apply(h,s)})},i.pluck=function(t,r){return i.map(t,function(s){return s[r]})},i.where=function(t,r,s){return i.isEmpty(r)?s?null:[]:i[s?"find":"filter"](t,function(u){for(var h in r)if(r[h]!==u[h])return!1;return!0})},i.findWhere=function(t,r){return i.where(t,r,!0)},i.max=function(t,r,s){if(!r&&i.isArray(t)&&t[0]===+t[0]&&t.length<65535)return Math.max.apply(Math,t);if(!r&&i.isEmpty(t))return-1/0;var u={computed:-1/0,value:-1/0};return L(t,function(h,M,_){var F=r?r.call(s,h,M,_):h;F>=u.computed&&(u={value:h,computed:F})}),u.value},i.min=function(t,r,s){if(!r&&i.isArray(t)&&t[0]===+t[0]&&t.length<65535)return Math.min.apply(Math,t);if(!r&&i.isEmpty(t))return 1/0;var u={computed:1/0,value:1/0};return L(t,function(h,M,_){var F=r?r.call(s,h,M,_):h;FF||_===void 0)return 1;if(_>>1;s.call(u,t[F])=0})})},i.difference=function(t){var r=g.apply(l,w.call(arguments,1));return i.filter(t,function(s){return!i.contains(r,s)})},i.zip=function(){for(var t=w.call(arguments),r=i.max(i.pluck(t,"length")),s=new Array(r),u=0;u=0;s--)r=[t[s].apply(this,r)];return r[0]}},i.after=function(t,r){return t<=0?r():function(){if(--t<1)return r.apply(this,arguments)}},i.keys=Q||function(t){if(t!==Object(t))throw new TypeError("Invalid object");var r=[];for(var s in t)i.has(t,s)&&(r[r.length]=s);return r},i.values=function(t){var r=[];for(var s in t)i.has(t,s)&&r.push(t[s]);return r},i.pairs=function(t){var r=[];for(var s in t)i.has(t,s)&&r.push([s,t[s]]);return r},i.invert=function(t){var r={};for(var s in t)i.has(t,s)&&(r[t[s]]=s);return r},i.functions=i.methods=function(t){var r=[];for(var s in t)i.isFunction(t[s])&&r.push(s);return r.sort()},i.extend=function(t){return L(w.call(arguments,1),function(r){if(r)for(var s in r)t[s]=r[s]}),t},i.pick=function(t){var r={},s=g.apply(l,w.call(arguments,1));return L(s,function(u){u in t&&(r[u]=t[u])}),r},i.omit=function(t){var r={},s=g.apply(l,w.call(arguments,1));for(var u in t)i.contains(s,u)||(r[u]=t[u]);return r},i.defaults=function(t){return L(w.call(arguments,1),function(r){if(r)for(var s in r)t[s]==null&&(t[s]=r[s])}),t},i.clone=function(t){return i.isObject(t)?i.isArray(t)?t.slice():i.extend({},t):t},i.tap=function(t,r){return r(t),t};var b=function(t,r,s,u){if(t===r)return t!==0||1/t==1/r;if(t==null||r==null)return t===r;t instanceof i&&(t=t._wrapped),r instanceof i&&(r=r._wrapped);var h=d.call(t);if(h!=d.call(r))return!1;switch(h){case"[object String]":return t==String(r);case"[object Number]":return t!=+t?r!=+r:t==0?1/t==1/r:t==+r;case"[object Date]":case"[object Boolean]":return+t==+r;case"[object RegExp]":return t.source==r.source&&t.global==r.global&&t.multiline==r.multiline&&t.ignoreCase==r.ignoreCase}if(typeof t!="object"||typeof r!="object")return!1;for(var M=s.length;M--;)if(s[M]==t)return u[M]==r;s.push(t),u.push(r);var _=0,F=!0;if(h=="[object Array]"){if(_=t.length,F=_==r.length,F)for(;_--&&(F=b(t[_],r[_],s,u)););}else{var S=t.constructor,W=r.constructor;if(S!==W&&!(i.isFunction(S)&&S instanceof S&&i.isFunction(W)&&W instanceof W))return!1;for(var $ in t)if(i.has(t,$)&&(_++,!(F=i.has(r,$)&&b(t[$],r[$],s,u))))break;if(F){for($ in r)if(i.has(r,$)&&!_--)break;F=!_}}return s.pop(),u.pop(),F};i.isEqual=function(t,r){return b(t,r,[],[])},i.isEmpty=function(t){if(t==null)return!0;if(i.isArray(t)||i.isString(t))return t.length===0;for(var r in t)if(i.has(t,r))return!1;return!0},i.isElement=function(t){return!!(t&&t.nodeType===1)},i.isArray=J||function(t){return d.call(t)=="[object Array]"},i.isObject=function(t){return t===Object(t)},L(["Arguments","Function","String","Number","Date","RegExp"],function(t){i["is"+t]=function(r){return d.call(r)=="[object "+t+"]"}}),i.isArguments(arguments)||(i.isArguments=function(t){return!!(t&&i.has(t,"callee"))}),typeof/./!="function"&&(i.isFunction=function(t){return typeof t=="function"}),i.isFinite=function(t){return isFinite(t)&&!isNaN(parseFloat(t))},i.isNaN=function(t){return i.isNumber(t)&&t!=+t},i.isBoolean=function(t){return t===!0||t===!1||d.call(t)=="[object Boolean]"},i.isNull=function(t){return t===null},i.isUndefined=function(t){return t===void 0},i.has=function(t,r){return x.call(t,r)},i.noConflict=function(){return a._=c,this},i.identity=function(t){return t},i.times=function(t,r,s){for(var u=Array(t),h=0;h":">",'"':""","'":"'","/":"/"}};R.unescape=i.invert(R.escape);var G={escape:new RegExp("["+i.keys(R.escape).join("")+"]","g"),unescape:new RegExp("("+i.keys(R.unescape).join("|")+")","g")};i.each(["escape","unescape"],function(t){i[t]=function(r){return r==null?"":(""+r).replace(G[t],function(s){return R[t][s]})}}),i.result=function(t,r){if(t==null)return null;var s=t[r];return i.isFunction(s)?s.call(t):s},i.mixin=function(t){L(i.functions(t),function(r){var s=i[r]=t[r];i.prototype[r]=function(){var u=[this._wrapped];return y.apply(u,arguments),me.call(this,s.apply(i,u))}})};var q=0;i.uniqueId=function(t){var r=++q+"";return t?t+r:r},i.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var ce=/(.)^/,C={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},le=/\\|'|\r|\n|\t|\u2028|\u2029/g;i.template=function(t,r,s){var u;s=i.defaults({},s,i.templateSettings);var h=new RegExp([(s.escape||ce).source,(s.interpolate||ce).source,(s.evaluate||ce).source].join("|")+"|$","g"),M=0,_="__p+='";t.replace(h,function(S,W,$,ye,he){return _+=t.slice(M,he).replace(le,function(Me){return"\\"+C[Me]}),W&&(_+=`'+ ((__t=(`+W+`))==null?'':_.escape(__t))+ '`),$&&(_+=`'+ ((__t=(`+$+`))==null?'':__t)+ '`),ye&&(_+=`'; `+ye+` -__p+='`),M=he+R.length,R}),_+=`'; +__p+='`),M=he+S.length,S}),_+=`'; `,s.variable||(_=`with(obj||{}){ `+_+`} `),_=`var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');}; `+_+`return __p; -`;try{u=new Function(s.variable||"obj","_",_)}catch(R){throw R.source=_,R}if(r)return u(r,i);var F=function(R){return u.call(this,R,i)};return F.source="function("+(s.variable||"obj")+`){ -`+_+"}",F},i.chain=function(t){return i(t).chain()};var me=function(t){return this._chain?i(t).chain():t};i.mixin(i),L(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var r=l[t];i.prototype[t]=function(){var s=this._wrapped;return r.apply(s,arguments),(t=="shift"||t=="splice")&&s.length===0&&delete s[0],me.call(this,s)}}),L(["concat","join","slice"],function(t){var r=l[t];i.prototype[t]=function(){return me.call(this,r.apply(this._wrapped,arguments))}}),i.extend(i.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(it)})(Ce,Ce.exports);var gt=Ce.exports;const f=st(gt);(function(){var e=function(w,g,d,x){for(d=d||{},x=w.length;x--;d[w[x]]=g);return d},n=[1,11],a=[1,9],c=[8,17],o=[6,11],l=[6,11,13,17],p={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(g,d,x,m,O,E,D){var P=E.length-1;switch(O){case 1:return{type:"unitMagnitude",magnitude:E[P-2],unit:E[P-1]};case 2:return{type:"unitStandalone",unit:E[P-1]};case 3:this.$=E[P-2]+"e"+E[P];break;case 4:case 13:case 14:case 15:case 17:this.$=E[P];break;case 5:this.$={num:E[P-2],denom:E[P]};break;case 6:this.$={num:E[P],denom:null};break;case 7:this.$=[E[P-2]].concat(E[P]);break;case 8:this.$=[E[P-1]].concat(E[P]);break;case 9:this.$=[E[P]];break;case 10:this.$={name:E[P-2],pow:E[P]};break;case 11:this.$={name:E[P],pow:1};break;case 12:this.$=g;break;case 16:this.$="-"+E[P];break}},table:[{3:1,4:2,5:3,7:4,10:5,12:8,14:10,16:7,17:n,18:[1,6],19:a},{1:[3]},{5:12,10:5,12:8,14:10,17:n},{6:[1,13]},{8:[1,14],17:[2,4]},{6:[2,6],11:[1,15]},e(c,[2,13]),e(c,[2,14]),e(o,[2,9],{12:8,14:10,10:17,13:[1,16],17:n}),e([6,8,11,13,17],[2,15]),e(l,[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:n},{10:24,12:8,14:10,17:n},e(o,[2,8]),{16:25,19:a},{1:[2,1]},{17:[2,3]},{19:[1,26]},{17:[2,17]},{6:[2,5]},e(o,[2,7]),e(l,[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(g,d){if(d.recoverable)this.trace(g);else throw new Error(g)},parse:function(g){var d=this,x=[0],m=[null],O=[],E=this.table,D="",P=0,Z=0,X=2,ue=1,de=O.slice.call(arguments,1),J=Object.create(this.lexer),Q={yy:{}};for(var ie in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ie)&&(Q.yy[ie]=this.yy[ie]);J.setInput(g,Q.yy),Q.yy.lexer=J,Q.yy.parser=this,typeof J.yylloc>"u"&&(J.yylloc={});var i=J.yylloc;O.push(i);var L=J.options&&J.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ge(){var le;return le=J.lex()||ue,typeof le!="number"&&(le=d.symbols_[le]||le),le}for(var K,Y,N,V,b={},S,G,q,ce;;){if(Y=x[x.length-1],this.defaultActions[Y]?N=this.defaultActions[Y]:((K===null||typeof K>"u")&&(K=ge()),N=E[Y]&&E[Y][K]),typeof N>"u"||!N.length||!N[0]){var C="";ce=[];for(S in E[Y])this.terminals_[S]&&S>X&&ce.push("'"+this.terminals_[S]+"'");J.showPosition?C="Parse error on line "+(P+1)+`: +`;try{u=new Function(s.variable||"obj","_",_)}catch(S){throw S.source=_,S}if(r)return u(r,i);var F=function(S){return u.call(this,S,i)};return F.source="function("+(s.variable||"obj")+`){ +`+_+"}",F},i.chain=function(t){return i(t).chain()};var me=function(t){return this._chain?i(t).chain():t};i.mixin(i),L(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var r=l[t];i.prototype[t]=function(){var s=this._wrapped;return r.apply(s,arguments),(t=="shift"||t=="splice")&&s.length===0&&delete s[0],me.call(this,s)}}),L(["concat","join","slice"],function(t){var r=l[t];i.prototype[t]=function(){return me.call(this,r.apply(this._wrapped,arguments))}}),i.extend(i.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(it)})(Ce,Ce.exports);var gt=Ce.exports;const f=st(gt);(function(){var e=function(w,g,d,x){for(d=d||{},x=w.length;x--;d[w[x]]=g);return d},n=[1,11],a=[1,9],c=[8,17],o=[6,11],l=[6,11,13,17],p={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(g,d,x,m,O,E,D){var P=E.length-1;switch(O){case 1:return{type:"unitMagnitude",magnitude:E[P-2],unit:E[P-1]};case 2:return{type:"unitStandalone",unit:E[P-1]};case 3:this.$=E[P-2]+"e"+E[P];break;case 4:case 13:case 14:case 15:case 17:this.$=E[P];break;case 5:this.$={num:E[P-2],denom:E[P]};break;case 6:this.$={num:E[P],denom:null};break;case 7:this.$=[E[P-2]].concat(E[P]);break;case 8:this.$=[E[P-1]].concat(E[P]);break;case 9:this.$=[E[P]];break;case 10:this.$={name:E[P-2],pow:E[P]};break;case 11:this.$={name:E[P],pow:1};break;case 12:this.$=g;break;case 16:this.$="-"+E[P];break}},table:[{3:1,4:2,5:3,7:4,10:5,12:8,14:10,16:7,17:n,18:[1,6],19:a},{1:[3]},{5:12,10:5,12:8,14:10,17:n},{6:[1,13]},{8:[1,14],17:[2,4]},{6:[2,6],11:[1,15]},e(c,[2,13]),e(c,[2,14]),e(o,[2,9],{12:8,14:10,10:17,13:[1,16],17:n}),e([6,8,11,13,17],[2,15]),e(l,[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:n},{10:24,12:8,14:10,17:n},e(o,[2,8]),{16:25,19:a},{1:[2,1]},{17:[2,3]},{19:[1,26]},{17:[2,17]},{6:[2,5]},e(o,[2,7]),e(l,[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(g,d){if(d.recoverable)this.trace(g);else throw new Error(g)},parse:function(g){var d=this,x=[0],m=[null],O=[],E=this.table,D="",P=0,Z=0,X=2,ue=1,de=O.slice.call(arguments,1),J=Object.create(this.lexer),Q={yy:{}};for(var ie in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ie)&&(Q.yy[ie]=this.yy[ie]);J.setInput(g,Q.yy),Q.yy.lexer=J,Q.yy.parser=this,typeof J.yylloc>"u"&&(J.yylloc={});var i=J.yylloc;O.push(i);var L=J.options&&J.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ge(){var le;return le=J.lex()||ue,typeof le!="number"&&(le=d.symbols_[le]||le),le}for(var K,Y,N,V,b={},R,G,q,ce;;){if(Y=x[x.length-1],this.defaultActions[Y]?N=this.defaultActions[Y]:((K===null||typeof K>"u")&&(K=ge()),N=E[Y]&&E[Y][K]),typeof N>"u"||!N.length||!N[0]){var C="";ce=[];for(R in E[Y])this.terminals_[R]&&R>X&&ce.push("'"+this.terminals_[R]+"'");J.showPosition?C="Parse error on line "+(P+1)+`: `+J.showPosition()+` Expecting `+ce.join(", ")+", got '"+(this.terminals_[K]||K)+"'":C="Parse error on line "+(P+1)+": Unexpected "+(K==ue?"end of input":"'"+(this.terminals_[K]||K)+"'"),this.parseError(C,{text:J.match,token:this.terminals_[K]||K,line:J.yylineno,loc:i,expected:ce})}if(N[0]instanceof Array&&N.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Y+", token: "+K);switch(N[0]){case 1:x.push(K),m.push(J.yytext),O.push(J.yylloc),x.push(N[1]),K=null,Z=J.yyleng,D=J.yytext,P=J.yylineno,i=J.yylloc;break;case 2:if(G=this.productions_[N[1]][1],b.$=m[m.length-G],b._$={first_line:O[O.length-(G||1)].first_line,last_line:O[O.length-1].last_line,first_column:O[O.length-(G||1)].first_column,last_column:O[O.length-1].last_column},L&&(b._$.range=[O[O.length-(G||1)].range[0],O[O.length-1].range[1]]),V=this.performAction.apply(b,[D,Z,P,Q.yy,N[1],m,O].concat(de)),typeof V<"u")return V;G&&(x=x.slice(0,-1*G*2),m=m.slice(0,-1*G),O=O.slice(0,-1*G)),x.push(this.productions_[N[1]][0]),m.push(b.$),O.push(b._$),q=E[x[x.length-2]][x[x.length-1]],x.push(q);break;case 3:return!0}}return!0}},v=function(){var w={EOF:1,parseError:function(d,x){if(this.yy.parser)this.yy.parser.parseError(d,x);else throw new Error(d)},setInput:function(g,d){return this.yy=d||this.yy||{},this._input=g,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 g=this._input[0];this.yytext+=g,this.yyleng++,this.offset++,this.match+=g,this.matched+=g;var d=g.match(/(?:\r\n?|\n).*/g);return d?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),g},unput:function(g){var d=g.length,x=g.split(/(?:\r\n?|\n)/g);this._input=g+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-d),this.offset-=d;var m=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),x.length-1&&(this.yylineno-=x.length-1);var O=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:x?(x.length===m.length?this.yylloc.first_column:0)+m[m.length-x.length].length-x[0].length:this.yylloc.first_column-d},this.options.ranges&&(this.yylloc.range=[O[0],O[0]+this.yyleng-d]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return 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). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(g){this.unput(this.match.slice(g))},pastInput:function(){var g=this.matched.substr(0,this.matched.length-this.match.length);return(g.length>20?"...":"")+g.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var g=this.match;return g.length<20&&(g+=this._input.substr(0,20-g.length)),(g.substr(0,20)+(g.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var g=this.pastInput(),d=new Array(g.length+1).join("-");return g+this.upcomingInput()+` `+d+"^"},test_match:function(g,d){var x,m,O;if(this.options.backtrack_lexer&&(O={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&&(O.yylloc.range=this.yylloc.range.slice(0))),m=g[0].match(/(?:\r\n?|\n).*/g),m&&(this.yylineno+=m.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:m?m[m.length-1].length-m[m.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+g[0].length},this.yytext+=g[0],this.match+=g[0],this.matches=g,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(g[0].length),this.matched+=g[0],x=this.performAction.call(this,this.yy,this,d,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),x)return x;if(this._backtrack){for(var E in O)this[E]=O[E];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var g,d,x,m;this._more||(this.yytext="",this.match="");for(var O=this._currentRules(),E=0;Ed[0].length)){if(d=x,m=E,this.options.backtrack_lexer){if(g=this.test_match(x,O[E]),g!==!1)return g;if(this._backtrack){d=!1;continue}else return!1}else if(!this.options.flex)break}return d?(g=this.test_match(d,O[m]),g!==!1?g:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var d=this.next();return d||this.lex()},begin:function(d){this.conditionStack.push(d)},popState:function(){var d=this.conditionStack.length-1;return d>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(d){return d=this.conditionStack.length-1-Math.abs(d||0),d>=0?this.conditionStack[d]:"INITIAL"},pushState:function(d){this.begin(d)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(d,x,m,O){switch(m){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:return 17;case 10:return 17;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}}};return w}();p.lexer=v;function y(){this.yy={}}return y.prototype=p,p.Parser=y,new y})();var be=function(){var e=function(Y,N,V,b){for(V=V||{},b=Y.length;b--;V[Y[b]]=N);return V},n=[1,7],a=[1,17],c=[1,13],o=[1,14],l=[1,15],p=[1,32],v=[1,22],y=[1,23],w=[1,24],g=[1,25],d=[1,26],x=[1,33],m=[1,27],O=[1,28],E=[1,29],D=[1,30],P=[1,20],Z=[1,36],X=[1,37],ue=[5,6,8,10,33,35,41,43,45],de=[1,39],J=[1,40],Q=[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],ie=[10,16,19,21,22,28,29,30,31,32,34,37,39,42,43,44,46],i=[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],L={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(N,V,b,S,G,q,ce){var C=q.length-1;switch(G){case 1:return new S.Eq(q[C-3],q[C-2],q[C-1]);case 2:return q[C-1];case 3:return new S.Add([]);case 4:case 7:case 11:case 13:case 15:case 20:case 23:case 25:case 42:case 43:this.$=q[C];break;case 5:this.$=S.Add.createOrAppend(q[C-2],q[C]);break;case 6:this.$=S.Add.createOrAppend(q[C-2],S.Mul.handleNegative(q[C],"subtract"));break;case 8:this.$=S.Mul.fold(S.Mul.createOrAppend(q[C-1],q[C]));break;case 9:this.$=S.Mul.fold(S.Mul.createOrAppend(q[C-2],q[C]));break;case 10:this.$=S.Mul.fold(S.Mul.handleDivide(q[C-2],q[C]));break;case 12:this.$=S.Mul.handleNegative(q[C]);break;case 14:case 17:this.$=[N];break;case 16:this.$=q[C-2].concat(q[C]);break;case 18:this.$=S.Log.natural();break;case 19:this.$=S.Log.common();break;case 21:this.$=S.Trig.create(q[C-1],q[C]);break;case 22:this.$=S.Log.create(q[C-1],q[C]);break;case 24:this.$=new S.Pow(q[C-2],q[C]);break;case 26:case 34:this.$=N;break;case 27:this.$=new S.Var(q[C-2],q[C]);break;case 28:this.$=new S.Var(q[C]);break;case 29:this.$=new S.Const(N.toLowerCase());break;case 30:this.$=S.Int.create(Number(N));break;case 31:this.$=S.Float.create(Number(N));break;case 32:this.$=q[C-1].completeParse();break;case 33:this.$=q[C-1].completeParse().addHint("parens");break;case 35:case 36:this.$=S.Pow.sqrt(q[C-1]);break;case 37:this.$=new S.Pow.nthroot(q[C-1],q[C-4]);break;case 38:case 39:case 40:this.$=new S.Abs(q[C-1]);break;case 41:this.$=new S.Func(q[C-3],q[C-1]);break;case 44:this.$=S.Mul.handleDivide(q[C-4],q[C-1]);break}},table:[{3:1,4:2,6:[1,3],7:4,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{1:[3]},{5:[1,34],6:[1,35]},{1:[2,3]},e([5,6],[2,4],{8:Z,10:X}),e(ue,[2,7],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:de,14:J,16:a,19:c,21:o,22:l,28:p,29:v,30:y,31:w,32:g,34:d,37:x,39:m,42:O,44:D,46:P}),e(Q,[2,11]),{10:n,11:8,13:41,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},e(Q,[2,13]),{10:n,11:8,13:42,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{10:n,11:8,13:43,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},e(Q,[2,23]),e(ie,[2,15],{18:[1,44]}),e(ie,[2,17]),e(ie,[2,18]),e(ie,[2,19],{23:[1,45]}),e(Q,[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(i,[2,42]),e(i,[2,43]),{32:[1,47]},e(i,[2,28],{23:[1,48]}),e(i,[2,29]),e(i,[2,30]),e(i,[2,31]),{7:49,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:50,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{32:[1,52],34:[1,51],40:[1,53]},{34:[1,54]},{7:55,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:56,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{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:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{1:[2,2]},{9:59,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{9:60,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},e(Q,[2,8]),{10:n,11:8,13:61,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{10:n,11:8,13:62,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},e(Q,[2,12]),e(Q,[2,21]),e(Q,[2,22]),{10:n,11:8,13:63,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{24:64,27:21,28:p,29:v,30:y,31:w,32:g,34:d},{10:n,11:8,13:65,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:66,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{24:67,27:21,28:p,29:v,30:y,31:w,32:g,34:d},{8:Z,10:X,33:[1,68]},{8:Z,10:X,35:[1,69]},{7:70,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:71,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:72,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:73,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{8:Z,10:X,43:[1,74]},{8:Z,10:X,45:[1,75]},{7:76,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{6:[1,77]},e(ue,[2,5],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:de,14:J,16:a,19:c,21:o,22:l,28:p,29:v,30:y,31:w,32:g,34:d,37:x,39:m,42:O,44:D,46:P}),e(ue,[2,6],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:de,14:J,16:a,19:c,21:o,22:l,28:p,29:v,30:y,31:w,32:g,34:d,37:x,39:m,42:O,44:D,46:P}),e(Q,[2,9]),e(Q,[2,10]),e(ie,[2,16]),e(ie,[2,20]),e(Q,[2,24]),{8:Z,10:X,33:[1,78]},e(i,[2,27]),e(i,[2,32]),e(i,[2,33]),{8:Z,10:X,35:[1,79]},{8:Z,10:X,33:[1,80]},{8:Z,10:X,41:[1,81]},{8:Z,10:X,35:[1,82]},e(i,[2,39]),e(i,[2,40]),{8:Z,10:X,35:[1,83]},{1:[2,1]},{32:[1,84]},e(i,[2,35]),e(i,[2,36]),{32:[1,85]},e(i,[2,38]),e(i,[2,41]),{7:86,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:87,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{8:Z,10:X,33:[1,88]},{8:Z,10:X,33:[1,89]},e(i,[2,44]),e(i,[2,37])],defaultActions:{3:[2,3],33:[2,34],35:[2,2],77:[2,1]},parseError:function(N,V){if(V.recoverable)this.trace(N);else throw new Error(N)},parse:function(N){var V=this,b=[0],S=[null],G=[],q=this.table,ce="",C=0,le=0,me=2,t=1,r=G.slice.call(arguments,1),s=Object.create(this.lexer),u={yy:{}};for(var h in this.yy)Object.prototype.hasOwnProperty.call(this.yy,h)&&(u.yy[h]=this.yy[h]);s.setInput(N,u.yy),u.yy.lexer=s,u.yy.parser=this,typeof s.yylloc>"u"&&(s.yylloc={});var M=s.yylloc;G.push(M);var _=s.options&&s.options.ranges;typeof u.yy.parseError=="function"?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function F(){var ke;return ke=s.lex()||t,typeof ke!="number"&&(ke=V.symbols_[ke]||ke),ke}for(var R,W,$,ye,he={},Me,xe,$e,Re;;){if(W=b[b.length-1],this.defaultActions[W]?$=this.defaultActions[W]:((R===null||typeof R>"u")&&(R=F()),$=q[W]&&q[W][R]),typeof $>"u"||!$.length||!$[0]){var Ve="";Re=[];for(Me in q[W])this.terminals_[Me]&&Me>me&&Re.push("'"+this.terminals_[Me]+"'");s.showPosition?Ve="Parse error on line "+(C+1)+`: +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var d=this.next();return d||this.lex()},begin:function(d){this.conditionStack.push(d)},popState:function(){var d=this.conditionStack.length-1;return d>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(d){return d=this.conditionStack.length-1-Math.abs(d||0),d>=0?this.conditionStack[d]:"INITIAL"},pushState:function(d){this.begin(d)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(d,x,m,O){switch(m){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:return 17;case 10:return 17;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}}};return w}();p.lexer=v;function y(){this.yy={}}return y.prototype=p,p.Parser=y,new y})();var be=function(){var e=function(Y,N,V,b){for(V=V||{},b=Y.length;b--;V[Y[b]]=N);return V},n=[1,7],a=[1,17],c=[1,13],o=[1,14],l=[1,15],p=[1,32],v=[1,22],y=[1,23],w=[1,24],g=[1,25],d=[1,26],x=[1,33],m=[1,27],O=[1,28],E=[1,29],D=[1,30],P=[1,20],Z=[1,36],X=[1,37],ue=[5,6,8,10,33,35,41,43,45],de=[1,39],J=[1,40],Q=[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],ie=[10,16,19,21,22,28,29,30,31,32,34,37,39,42,43,44,46],i=[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],L={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(N,V,b,R,G,q,ce){var C=q.length-1;switch(G){case 1:return new R.Eq(q[C-3],q[C-2],q[C-1]);case 2:return q[C-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.$=q[C];break;case 5:this.$=R.Add.createOrAppend(q[C-2],q[C]);break;case 6:this.$=R.Add.createOrAppend(q[C-2],R.Mul.handleNegative(q[C],"subtract"));break;case 8:this.$=R.Mul.fold(R.Mul.createOrAppend(q[C-1],q[C]));break;case 9:this.$=R.Mul.fold(R.Mul.createOrAppend(q[C-2],q[C]));break;case 10:this.$=R.Mul.fold(R.Mul.handleDivide(q[C-2],q[C]));break;case 12:this.$=R.Mul.handleNegative(q[C]);break;case 14:case 17:this.$=[N];break;case 16:this.$=q[C-2].concat(q[C]);break;case 18:this.$=R.Log.natural();break;case 19:this.$=R.Log.common();break;case 21:this.$=R.Trig.create(q[C-1],q[C]);break;case 22:this.$=R.Log.create(q[C-1],q[C]);break;case 24:this.$=new R.Pow(q[C-2],q[C]);break;case 26:case 34:this.$=N;break;case 27:this.$=new R.Var(q[C-2],q[C]);break;case 28:this.$=new R.Var(q[C]);break;case 29:this.$=new R.Const(N.toLowerCase());break;case 30:this.$=R.Int.create(Number(N));break;case 31:this.$=R.Float.create(Number(N));break;case 32:this.$=q[C-1].completeParse();break;case 33:this.$=q[C-1].completeParse().addHint("parens");break;case 35:case 36:this.$=R.Pow.sqrt(q[C-1]);break;case 37:this.$=new R.Pow.nthroot(q[C-1],q[C-4]);break;case 38:case 39:case 40:this.$=new R.Abs(q[C-1]);break;case 41:this.$=new R.Func(q[C-3],q[C-1]);break;case 44:this.$=R.Mul.handleDivide(q[C-4],q[C-1]);break}},table:[{3:1,4:2,6:[1,3],7:4,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{1:[3]},{5:[1,34],6:[1,35]},{1:[2,3]},e([5,6],[2,4],{8:Z,10:X}),e(ue,[2,7],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:de,14:J,16:a,19:c,21:o,22:l,28:p,29:v,30:y,31:w,32:g,34:d,37:x,39:m,42:O,44:D,46:P}),e(Q,[2,11]),{10:n,11:8,13:41,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},e(Q,[2,13]),{10:n,11:8,13:42,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{10:n,11:8,13:43,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},e(Q,[2,23]),e(ie,[2,15],{18:[1,44]}),e(ie,[2,17]),e(ie,[2,18]),e(ie,[2,19],{23:[1,45]}),e(Q,[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(i,[2,42]),e(i,[2,43]),{32:[1,47]},e(i,[2,28],{23:[1,48]}),e(i,[2,29]),e(i,[2,30]),e(i,[2,31]),{7:49,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:50,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{32:[1,52],34:[1,51],40:[1,53]},{34:[1,54]},{7:55,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:56,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{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:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{1:[2,2]},{9:59,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{9:60,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},e(Q,[2,8]),{10:n,11:8,13:61,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{10:n,11:8,13:62,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},e(Q,[2,12]),e(Q,[2,21]),e(Q,[2,22]),{10:n,11:8,13:63,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{24:64,27:21,28:p,29:v,30:y,31:w,32:g,34:d},{10:n,11:8,13:65,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:66,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{24:67,27:21,28:p,29:v,30:y,31:w,32:g,34:d},{8:Z,10:X,33:[1,68]},{8:Z,10:X,35:[1,69]},{7:70,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:71,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:72,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:73,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{8:Z,10:X,43:[1,74]},{8:Z,10:X,45:[1,75]},{7:76,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{6:[1,77]},e(ue,[2,5],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:de,14:J,16:a,19:c,21:o,22:l,28:p,29:v,30:y,31:w,32:g,34:d,37:x,39:m,42:O,44:D,46:P}),e(ue,[2,6],{17:9,20:10,25:11,15:12,26:16,24:18,38:19,27:21,36:31,11:38,12:de,14:J,16:a,19:c,21:o,22:l,28:p,29:v,30:y,31:w,32:g,34:d,37:x,39:m,42:O,44:D,46:P}),e(Q,[2,9]),e(Q,[2,10]),e(ie,[2,16]),e(ie,[2,20]),e(Q,[2,24]),{8:Z,10:X,33:[1,78]},e(i,[2,27]),e(i,[2,32]),e(i,[2,33]),{8:Z,10:X,35:[1,79]},{8:Z,10:X,33:[1,80]},{8:Z,10:X,41:[1,81]},{8:Z,10:X,35:[1,82]},e(i,[2,39]),e(i,[2,40]),{8:Z,10:X,35:[1,83]},{1:[2,1]},{32:[1,84]},e(i,[2,35]),e(i,[2,36]),{32:[1,85]},e(i,[2,38]),e(i,[2,41]),{7:86,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{7:87,9:5,10:n,11:8,13:6,15:12,16:a,17:9,19:c,20:10,21:o,22:l,24:18,25:11,26:16,27:21,28:p,29:v,30:y,31:w,32:g,34:d,36:31,37:x,38:19,39:m,42:O,43:E,44:D,46:P},{8:Z,10:X,33:[1,88]},{8:Z,10:X,33:[1,89]},e(i,[2,44]),e(i,[2,37])],defaultActions:{3:[2,3],33:[2,34],35:[2,2],77:[2,1]},parseError:function(N,V){if(V.recoverable)this.trace(N);else throw new Error(N)},parse:function(N){var V=this,b=[0],R=[null],G=[],q=this.table,ce="",C=0,le=0,me=2,t=1,r=G.slice.call(arguments,1),s=Object.create(this.lexer),u={yy:{}};for(var h in this.yy)Object.prototype.hasOwnProperty.call(this.yy,h)&&(u.yy[h]=this.yy[h]);s.setInput(N,u.yy),u.yy.lexer=s,u.yy.parser=this,typeof s.yylloc>"u"&&(s.yylloc={});var M=s.yylloc;G.push(M);var _=s.options&&s.options.ranges;typeof u.yy.parseError=="function"?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function F(){var ke;return ke=s.lex()||t,typeof ke!="number"&&(ke=V.symbols_[ke]||ke),ke}for(var S,W,$,ye,he={},Me,xe,$e,Se;;){if(W=b[b.length-1],this.defaultActions[W]?$=this.defaultActions[W]:((S===null||typeof S>"u")&&(S=F()),$=q[W]&&q[W][S]),typeof $>"u"||!$.length||!$[0]){var Ve="";Se=[];for(Me in q[W])this.terminals_[Me]&&Me>me&&Se.push("'"+this.terminals_[Me]+"'");s.showPosition?Ve="Parse error on line "+(C+1)+`: `+s.showPosition()+` -Expecting `+Re.join(", ")+", got '"+(this.terminals_[R]||R)+"'":Ve="Parse error on line "+(C+1)+": Unexpected "+(R==t?"end of input":"'"+(this.terminals_[R]||R)+"'"),this.parseError(Ve,{text:s.match,token:this.terminals_[R]||R,line:s.yylineno,loc:M,expected:Re})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+W+", token: "+R);switch($[0]){case 1:b.push(R),S.push(s.yytext),G.push(s.yylloc),b.push($[1]),R=null,le=s.yyleng,ce=s.yytext,C=s.yylineno,M=s.yylloc;break;case 2:if(xe=this.productions_[$[1]][1],he.$=S[S.length-xe],he._$={first_line:G[G.length-(xe||1)].first_line,last_line:G[G.length-1].last_line,first_column:G[G.length-(xe||1)].first_column,last_column:G[G.length-1].last_column},_&&(he._$.range=[G[G.length-(xe||1)].range[0],G[G.length-1].range[1]]),ye=this.performAction.apply(he,[ce,le,C,u.yy,$[1],S,G].concat(r)),typeof ye<"u")return ye;xe&&(b=b.slice(0,-1*xe*2),S=S.slice(0,-1*xe),G=G.slice(0,-1*xe)),b.push(this.productions_[$[1]][0]),S.push(he.$),G.push(he._$),$e=q[b[b.length-2]][b[b.length-1]],b.push($e);break;case 3:return!0}}return!0}},ge=function(){var Y={EOF:1,parseError:function(V,b){if(this.yy.parser)this.yy.parser.parseError(V,b);else throw new Error(V)},setInput:function(N,V){return this.yy=V||this.yy||{},this._input=N,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 N=this._input[0];this.yytext+=N,this.yyleng++,this.offset++,this.match+=N,this.matched+=N;var V=N.match(/(?:\r\n?|\n).*/g);return V?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),N},unput:function(N){var V=N.length,b=N.split(/(?:\r\n?|\n)/g);this._input=N+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-V),this.offset-=V;var S=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),b.length-1&&(this.yylineno-=b.length-1);var G=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:b?(b.length===S.length?this.yylloc.first_column:0)+S[S.length-b.length].length-b[0].length:this.yylloc.first_column-V},this.options.ranges&&(this.yylloc.range=[G[0],G[0]+this.yyleng-V]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return 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). +Expecting `+Se.join(", ")+", got '"+(this.terminals_[S]||S)+"'":Ve="Parse error on line "+(C+1)+": Unexpected "+(S==t?"end of input":"'"+(this.terminals_[S]||S)+"'"),this.parseError(Ve,{text:s.match,token:this.terminals_[S]||S,line:s.yylineno,loc:M,expected:Se})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+W+", token: "+S);switch($[0]){case 1:b.push(S),R.push(s.yytext),G.push(s.yylloc),b.push($[1]),S=null,le=s.yyleng,ce=s.yytext,C=s.yylineno,M=s.yylloc;break;case 2:if(xe=this.productions_[$[1]][1],he.$=R[R.length-xe],he._$={first_line:G[G.length-(xe||1)].first_line,last_line:G[G.length-1].last_line,first_column:G[G.length-(xe||1)].first_column,last_column:G[G.length-1].last_column},_&&(he._$.range=[G[G.length-(xe||1)].range[0],G[G.length-1].range[1]]),ye=this.performAction.apply(he,[ce,le,C,u.yy,$[1],R,G].concat(r)),typeof ye<"u")return ye;xe&&(b=b.slice(0,-1*xe*2),R=R.slice(0,-1*xe),G=G.slice(0,-1*xe)),b.push(this.productions_[$[1]][0]),R.push(he.$),G.push(he._$),$e=q[b[b.length-2]][b[b.length-1]],b.push($e);break;case 3:return!0}}return!0}},ge=function(){var Y={EOF:1,parseError:function(V,b){if(this.yy.parser)this.yy.parser.parseError(V,b);else throw new Error(V)},setInput:function(N,V){return this.yy=V||this.yy||{},this._input=N,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 N=this._input[0];this.yytext+=N,this.yyleng++,this.offset++,this.match+=N,this.matched+=N;var V=N.match(/(?:\r\n?|\n).*/g);return V?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),N},unput:function(N){var V=N.length,b=N.split(/(?:\r\n?|\n)/g);this._input=N+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-V),this.offset-=V;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),b.length-1&&(this.yylineno-=b.length-1);var G=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:b?(b.length===R.length?this.yylloc.first_column:0)+R[R.length-b.length].length-b[0].length:this.yylloc.first_column-V},this.options.ranges&&(this.yylloc.range=[G[0],G[0]+this.yyleng-V]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return 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). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(N){this.unput(this.match.slice(N))},pastInput:function(){var N=this.matched.substr(0,this.matched.length-this.match.length);return(N.length>20?"...":"")+N.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var N=this.match;return N.length<20&&(N+=this._input.substr(0,20-N.length)),(N.substr(0,20)+(N.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var N=this.pastInput(),V=new Array(N.length+1).join("-");return N+this.upcomingInput()+` -`+V+"^"},test_match:function(N,V){var b,S,G;if(this.options.backtrack_lexer&&(G={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&&(G.yylloc.range=this.yylloc.range.slice(0))),S=N[0].match(/(?:\r\n?|\n).*/g),S&&(this.yylineno+=S.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:S?S[S.length-1].length-S[S.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+N[0].length},this.yytext+=N[0],this.match+=N[0],this.matches=N,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(N[0].length),this.matched+=N[0],b=this.performAction.call(this,this.yy,this,V,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),b)return b;if(this._backtrack){for(var q in G)this[q]=G[q];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var N,V,b,S;this._more||(this.yytext="",this.match="");for(var G=this._currentRules(),q=0;qV[0].length)){if(V=b,S=q,this.options.backtrack_lexer){if(N=this.test_match(b,G[q]),N!==!1)return N;if(this._backtrack){V=!1;continue}else return!1}else if(!this.options.flex)break}return V?(N=this.test_match(V,G[S]),N!==!1?N:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var V=this.next();return V||this.lex()},begin:function(V){this.conditionStack.push(V)},popState:function(){var V=this.conditionStack.length-1;return V>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(V){return V=this.conditionStack.length-1-Math.abs(V||0),V>=0?this.conditionStack[V]:"INITIAL"},pushState:function(V){this.begin(V)},stateStackSize:function(){return this.conditionStack.length},options:{flex:!0},performAction:function(V,b,S,G){switch(S){case 0:break;case 1:break;case 2:break;case 3:return"INT";case 4:return"FLOAT";case 5:return"^";case 6:return"*";case 7:return"*";case 8:return"*";case 9:return"*";case 10:return"/";case 11:return"/";case 12:return"-";case 13:return"-";case 14:return"+";case 15:return"^";case 16:return"(";case 17:return")";case 18:return"(";case 19:return")";case 20:return"[";case 21:return"]";case 22:return"{";case 23:return"}";case 24:return"{";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:return b.yytext="<=","SIGN";case 33:return b.yytext=">=","SIGN";case 34:return b.yytext="<=","SIGN";case 35:return b.yytext=">=","SIGN";case 36:return b.yytext="<>","SIGN";case 37:return b.yytext="<>","SIGN";case 38:return b.yytext="<>","SIGN";case 39:return b.yytext="<>","SIGN";case 40:return b.yytext="<=","SIGN";case 41:return b.yytext=">=","SIGN";case 42:return"FRAC";case 43:return"FRAC";case 44:return"sqrt";case 45:return"abs";case 46:return"ln";case 47:return"log";case 48:return"TRIG";case 49:return"TRIG";case 50:return"TRIG";case 51:return"TRIG";case 52:return b.yytext="sin","TRIG";case 53:return b.yytext="cos","TRIG";case 54:return b.yytext="tan","TRIG";case 55:return b.yytext="csc","TRIG";case 56:return b.yytext="sec","TRIG";case 57:return b.yytext="cot","TRIG";case 58:return b.yytext="arcsin","TRIG";case 59:return b.yytext="arccos","TRIG";case 60:return b.yytext="arctan","TRIG";case 61:return b.yytext="arccsc","TRIG";case 62:return b.yytext="arcsec","TRIG";case 63:return b.yytext="arccot","TRIG";case 64:return"TRIGINV";case 65:return"TRIGINV";case 66:return b.yytext="sinh","TRIG";case 67:return b.yytext="cosh","TRIG";case 68:return b.yytext="tanh","TRIG";case 69:return b.yytext="csch","TRIG";case 70:return b.yytext="sech","TRIG";case 71:return b.yytext="tanh","TRIG";case 72:return"CONST";case 73:return b.yytext="pi","CONST";case 74:return b.yytext="pi","CONST";case 75:return"VAR";case 76:return b.yytext="theta","VAR";case 77:return b.yytext="theta","VAR";case 78:return"VAR";case 79:return b.yytext="phi","VAR";case 80:return b.yytext="phi","VAR";case 81:return V.symbolLexer(b.yytext);case 82:return"EOF";case 83:return"INVALID";case 84:console.log(b.yytext);break}},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}}};return Y}();L.lexer=ge;function K(){this.yy={}}return K.prototype=L,L.Parser=K,new K}(),oe=function(){throw new Error("Abstract method - must override for expr: "+this.print())},Je=function(e){throw new Error(e)},Ze=function(e){return e!==e},mt=function(e,n){var a=n-e;return Math.random()*a+e},Ke=12,Ye=9;function ve(){}f.extend(ve.prototype,{func:oe,args:oe,construct:function(e){var n=new this.func;return this.func.apply(n,e),n},recurse:function(e){var n=Array.prototype.slice.call(arguments,1),a=f.map(this.args(),function(c){return f.isString(c)?c:c[e].apply(c,n)});return this.construct(a)},eval:oe,codegen:oe,compile:function(){var e=this.codegen();try{return new Function("vars","return "+e+";")}catch{throw new Error("Function did not compile: "+e)}},print:oe,tex:oe,asTex:function(e){e=e||{},f.defaults(e,{display:!0,dynamic:!0,times:!1});var n=this.tex();return e.display&&(n="\\displaystyle "+n),e.dynamic&&(n=n.replace(/\(/g,"\\left("),n=n.replace(/\)/g,"\\right)")),e.times&&(n=n.replace(/\\cdot/g,"\\times")),n},name:function(){return this.func.name?this.func.name:this.func.toString().match(/^function\s*([^\s(]+)/)[1]},repr:function(){return this.name()+"("+f.map(this.args(),function(e){return f.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.extend({once:!1},e);var n=this.factor(e),a=n.collect(e);n.equals(a)&&(a=this.collect(e));var c=a.expand(e),o=c.collect(e);c.equals(o)&&(o=a.collect(e));var l=o;return e.once||this.equals(l)?l:l.simplify(e)},isSimplified:function(){return this.equals(this.simplify())},exprArgs:function(){return f.filter(this.args(),function(e){return e instanceof ve})},getVars:function(e){return f.uniq(f.flatten(f.invoke(this.exprArgs(),"getVars",e))).sort()},getConsts:function(){return f.uniq(f.flatten(f.invoke(this.exprArgs(),"getConsts"))).sort()},getUnits:function(){return f.flatten(f.invoke(this.exprArgs(),"getUnits"))},is:function(e){return this instanceof e},has:function(e){return this instanceof e?!0:f.any(this.exprArgs(),function(n){return n.has(e)})},raiseToThe:function(e){return new z(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 n=this.getVars(),a=e.getVars(),c=function(v,y){return!f.difference(v,y).length},o=function(v){return f.uniq(f.invoke(v,"toLowerCase")).sort()},l=c(n,a),p=c(o(n),o(a));return{equal:l,equalIgnoringCase:p}},compare:function(e){if(e instanceof Ie)return!1;var n=f.union(this.getVars(!0),e.getVars(!0)),a=function(E,D){return Math.abs(E)<1||Math.abs(D)<1?Math.abs(E-D):Math.abs(1-E/D)},c=function(E,D){var P=a(E,D);return E===D||Ze(E)&&Ze(D)||Pn.unit.localeCompare(a.unit)),e},tex:function(){for(var e=" \\cdot ",n=f.groupBy(this.terms,function(m){return m.isDivide()?"inverse":m instanceof I?"number":"other"}),a=n.inverse||[],c=n.number||[],o=n.other||[],l="",p,v=0;v0&&a.length>0){var w=c.slice();w.splice(v,1);var g=w.concat(a).concat(o);return c[v].tex()+new A(g).tex()}}if(c=f.compact(f.map(c,function(m){var O=m instanceof B&&!(m instanceof U),E=!m.hints.fraction||a.length>0;if(O&&E){a.push(new z(new U(m.d),I.Div));var D=new U(m.n);return D.hints=m.hints,f.any(m.hints)?D:null}else return m})),c.length===0&&o.length===1)p=o[0].tex();else{var d="";f.each(c,function(m){m.hints.subtract&&m.hints.entered?(l+="-",d+=(d?e:"")+m.abs().tex()):m instanceof U&&m.n===-1&&(m.hints.negate||m.hints.subtract)?l+="-":d+=(d?e:"")+m.tex()}),f.each(o,function(m){m.needsExplicitMul()?d+=(d?e:"")+m.tex():m instanceof ee?d+="("+m.tex()+")":d+=m.tex()}),p=d||"1"}if(a.length){var x=new A(f.invoke(a,"asDivide")).flatten().tex();return l+"\\frac{"+p+"}{"+x+"}"}else return l+p},strip:function(){var e=f.map(this.terms,function(n){return n instanceof I?n.abs():n.strip()});return new A(e).flatten()},expand:function(){var e=function(E){return E instanceof ee},n=function(E){return E instanceof z&&E.exp.isNegative()},a=function(E){return n(E)&&e(E.base)},c=this.recurse("expand").flatten(),o=f.any(c.terms,e),l=f.any(c.terms,a);if(!(o||l))return c;var p=f.groupBy(c.terms,n),v=p[!1]||[],y=p[!0]||[];if(o){var w=f.groupBy(v,e),g=w[!0]||[],d=w[!1]||[],x=f.reduce(g,function(E,D){return f.reduce(E,function(P,Z){return P.concat(f.map(D.terms,function(X){return Z.concat(X)}))},[])},[[]]),m=f.map(x,function(E){return new A(d.concat(E)).flatten()});v=[new ee(m)]}if(l){var O=new A(f.invoke(y,"getDenominator")).flatten();y=[new z(O.expand(),I.Div)]}return new A(v.concat(y)).flatten()},factor:function(e){var n=this.recurse("factor",e).flatten();if(!(n instanceof A))return n;var a=f.groupBy(n.terms,function(o){return o instanceof B}),c=f.reduce(a[!0],function(o,l){return{n:o.n*l.n,d:o.d*l.d}},{n:1,d:1});return c.d===1?c=new U(c.n):c=new B(c.n,c.d),new A((a[!1]||[]).concat(c)).flatten()},collect:function(e){var n=this.recurse("collect",e).partition(),a=n[0].reduce(e);if(a.eval()===0)return I.Zero;var c=n[1].flatten();if(!(c instanceof A))return new A(a,c).flatten();c=c.terms;var p=[];f.each(c,function(m){m instanceof z?p.push([m.base,m.exp]):p.push([m,I.One])});var o=f.groupBy(p,function(m){return m[0].normalize().print()}),l=f.compact(f.map(o,function(m){var O=m[0][0],E=new ee(f.zip.apply(f,m)[1]),D=E.collect(e);return D instanceof I&&D.eval()===0?null:[O,D]})),p=f.groupBy(l,function(m){return m[0]instanceof H&&m[0].isBasic()?"trig":m[0]instanceof re?"log":"expr"}),v=p.trig||[],y=p.log||[],w=p.expr||[];if(v.length>1){var g=f.groupBy(v,function(m){return m[0].arg.normalize().print()});v=[],f.each(g,function(m){var O=m[0][0].arg,E={sin:I.Zero,cos:I.Zero};f.each(m,function(D){E[D[0].type]=D[1]}),A.handleNegative(E.sin).collect(e).equals(E.cos)&&(E.cos.isNegative()?E={tan:E.sin}:E={cot:E.cos}),f.each(E,function(D,P){v.push([new H(P,O),D])})})}if(y.length>1){var d=f.groupBy(y,function(m){return m[0].base.normalize().print()});y=[],f.each(d,function(m){m.length===2&&A.handleNegative(m[0][1]).collect(e).equals(m[1][1])?m[0][1].isNegative()?y.push([new re(m[0][0].power,m[1][0].power),m[1][1]]):y.push([new re(m[1][0].power,m[0][0].power),m[0][1]]):y=y.concat(m)})}p=v.concat(y).concat(w);var x=f.map(p,function(m){return new z(m[0],m[1]).collect(e)});return new A([a].concat(x)).flatten()},isSubtract:function(){return f.any(this.terms,function(e){return e instanceof I&&e.hints.subtract})},factorIn:function(e){var n=this.partition(),a=n[0].terms,c=a.length&&f.all(a,function(l){return l.n>0});if(c){var o=a[0].negate();return o.hints=a[0].hints,this.replace(a[0],o.addHint(e))}else return new A([I.negativeOne(e)].concat(this.terms))},factorOut:function(){var e=!1,n=f.compact(f.map(this.terms,function(a,c,o){return!e&&a instanceof I&&a.hints.divide?(e=!0,a.n!==-1?a.negate():null):a}));return n.length===1?n[0]:new A(n)},reduce:function(e){return f.reduce(this.terms,function(n,a){return n.mul(a,e)},this.identity)},findGCD:function(e){return new A(f.invoke(this.terms,"findGCD",e)).flatten()},asMul:function(){return this},asPositiveFactor:function(){if(this.isPositive())return this;var e=f.invoke(this.collect().terms,"asPositiveFactor");return new A(e).flatten()},isNegative:function(){return f.any(f.invoke(this.collect().terms,"isNegative"))},fold:function(){return A.fold(this)},negate:function(){var e=function(a){return a instanceof I};if(f.any(this.terms,e)){var n=f.find(this.terms,e);return this.replace(n,n.negate())}else return new A([I.Neg].concat(this.terms))}});f.each([ee,A],function(e){f.extend(e,{createOrAppend:function(n,a){return n instanceof e?new e(n.terms.concat(a)):new e(n,a)}})});f.extend(A,{handleNegative:function(e,n){if(e instanceof I&&e.n>0){var a=e.negate();return a.hints=e.hints,a.addHint(n)}else return e instanceof A?e.factorIn(n):new A(I.negativeOne(n),e)},handleDivide:function(e,n){if(n instanceof A){var a=A.handleDivide(e,n.terms[0]),c=new A(f.rest(n.terms)).flatten();return A.handleDivide(a,c)}var o=function(d){return d instanceof U},l=function(d){return d instanceof B};if(o(n)&&e instanceof A&&f.any(e.terms,o)){var p=e.terms.slice().reverse(),v=f.find(p,l);if(!o(v))return new A(e.terms.concat([new B(1,n.n).addHint("fraction")]));var y=new B(v.n,n.n);return y.hints=v.hints,v===p[0]&&(y=y.addHint("fraction")),v.n<0&&n.n<0?(y.d=-y.d,e.replace(v,[I.Neg,y])):e.replace(v,y)}var w=function(d,x){if(x instanceof U){if(d instanceof U)return d.n<0&&x.n<0?[I.Neg,new B(d.n,-x.n).addHint("fraction")]:[new B(d.n,x.n).addHint("fraction")];var m=new B(1,x.eval());return x.eval()<0?[d,m.addHint("negate")]:[d,m]}else{var O;if(x instanceof H&&x.exp){var E=x.exp;x.exp=void 0,x=new z(x,E)}return x instanceof z?O=new z(x.base,A.handleNegative(x.exp,"divide")):O=new z(x,I.Div),d instanceof U&&d.n===1?[O]:[d,O]}};if(e instanceof A){var g=w(f.last(e.terms),n);return new A(f.initial(e.terms).concat(g))}else{var g=w(e,n);return new A(g).flatten()}},fold:function(e){if(e instanceof A){var n=f.find(f.initial(e.terms),function(x){return(x instanceof H||x instanceof re)&&x.hints.open}),a=f.indexOf(e.terms,n);if(n){var c=f.last(e.terms);if(n.hints.parens||c.hints.parens||c.has(H)||c.has(re))n.hints.open=!1;else{var o;return n instanceof H?o=H.create([n.type,n.exp],A.createOrAppend(n.arg,c).fold()):o=re.create(n.base,A.createOrAppend(n.power,c).fold()),a===0?o:new A(e.terms.slice(0,a).concat(o)).fold()}}var l=e.partition(),p=l[0].terms,v=function(x){return x.n>0},y=function(x){return x.n===-1&&x.hints.negate},w=function(x){return v(x)||y(x)};if(p.length>1&&f.some(p,y)&&f.some(p,v)&&f.every(p,w)){var g=f.indexOf(e.terms,f.find(e.terms,y)),d=f.indexOf(e.terms,f.find(e.terms,v));if(g=0){var e=this.base.tex({split:!0});return e[0]+"^{"+this.exp.tex()+"}"+e[1]}else{var n=this.base.tex();return this.base instanceof Ne||this.base instanceof z||this.base instanceof I&&!this.base.isSimple()?n="("+n+")":(this.base instanceof H||this.base instanceof re)&&(n="["+n+"]"),n+"^{"+this.exp.tex()+"}"}},needsExplicitMul:function(){return this.isRoot()?!1:this.base.needsExplicitMul()},expand:function(){var e=this.recurse("expand");if(e.base instanceof A){var n=f.map(e.base.terms,function(w){return new z(w,e.exp)});return new A(n).expand()}else if(e.base instanceof ee&&e.exp instanceof U&&e.exp.abs().eval()>1){for(var a=e.exp.eval()>0,c=e.exp.abs().eval(),o=function(w){return a?w:new z(w,I.Div)},l={1:e.base},p=2;p<=c;p*=2){var y=new A(l[p/2],l[p/2]);l[p]=y.expand().collect()}if(f.has(l,c))return o(l[c]);var v=f.map(c.toString(2).split(""),function(w,g,d){return Number(w)*Math.pow(2,d.length-g-1)});v=f.without(v,0);var y=new A(f.pick(l,v)).expand().collect();return o(y)}else if(e.exp instanceof ee){var n=f.map(e.exp.terms,function(g){return new z(e.base,g).expand()});return new A(n).expand()}else return e},factor:function(){var e=this.recurse("factor");if(e.base instanceof A){var n=f.map(e.base.terms,function(a){return a instanceof U&&e.exp.equals(I.Div)?new B(1,a.n):new z(a,e.exp)});return new A(n)}else return e},collect:function(e){if(this.base instanceof z){var n=this.base.base,a=A.createOrAppend(this.base.exp,this.exp);return new z(n,a).collect(e)}var c=this.recurse("collect",e),o=function(g){return g instanceof re&&g.base.equals(c.base)};if(c.exp instanceof I&&c.exp.eval()===0)return I.One;if(c.exp instanceof I&&c.exp.eval()===1)return c.base;if(o(c.exp))return c.exp.power;if(c.exp instanceof A&&f.any(c.exp.terms,o)){var l=f.find(c.exp.terms,o),n=l.power,a=c.exp.remove(l).flatten();return new z(n,a).collect(e)}else if(c.base instanceof I&&c.exp instanceof I){if(e&&e.preciseFloats){var a=c.exp.asRational(),p=c.base.getDecimalPlaces(),v=new z(c.base,new B(1,a.d)),y=v.collect().getDecimalPlaces();if(y>p){var w=new z(c.base,new U(a.n)).collect();return new z(w,new B(1,a.d))}}return c.base.raiseToThe(c.exp,e)}else return c},isDivide:function(){var e=function(n){return n instanceof I&&n.hints.divide};return e(this.exp)||this.exp instanceof A&&f.any(this.exp.terms,e)},asDivide:function(){if(this.exp instanceof I){if(this.exp.eval()===-1)return this.base;var e=this.exp.negate();return e.hints=f.clone(this.exp.hints),e.hints.divide=!1,new z(this.base,e)}else{if(this.exp instanceof A)return new z(this.base,this.exp.factorOut());Je("called asDivide() on an Expr that wasn't a Num or Mul")}},isRoot:function(){return this.exp instanceof B&&this.exp.hints.root},isSquaredTrig:function(){return this.base instanceof H&&!this.base.isInverse()&&this.exp instanceof I&&this.exp.eval()===2},getDenominator:function(){if(this.exp instanceof I&&this.exp.eval()===-1)return A.createOrAppend(this.base,this.base.getDenominator()).flatten();if(this.exp.isNegative()){var e=new z(this.base,A.handleNegative(this.exp).collect());return A.createOrAppend(e,e.collect().getDenominator()).flatten()}else return this.base instanceof I?new z(this.base.getDenominator(),this.exp).collect():I.One},findGCD:function(e){var n,a;if(e instanceof z?(n=e.base,a=e.exp):(n=e,a=I.One),this.base.equals(n)){if(this.exp.equals(a))return this;if(this.exp instanceof I&&a instanceof I)return new z(this.base,I.min(this.exp,a)).collect();if(this.exp instanceof I||a instanceof I)return I.One;var c=this.exp.asMul().partition(),o=a.asMul().partition();if(c[1].equals(o[1])){var l=I.min(c[0].reduce(),o[0].reduce()),p=new A(l,c[1].flatten()).flatten();return new z(n,p).collect()}}return I.One},isPositive:function(){if(this.base.isPositive())return!0;var e=this.exp.simplify();return e instanceof U&&e.eval()%2===0},asPositiveFactor:function(){if(this.isPositive())return this;var e=this.exp.simplify();if(e instanceof U){var n=e.eval();if(n>2)return new z(this.base,new U(n-1));if(n<-2)return new z(this.base,new U(n+1))}return I.One}});f.extend(z,{sqrt:function(e){return new z(e,I.Sqrt)},nthroot:function(e,n){var a=A.fold(A.handleDivide(new U(1),n));return new z(e,a.addHint("root"))}});function re(e,n){this.base=e,this.power=n}re.prototype=new ve;f.extend(re.prototype,{func:re,args:function(){return[this.base,this.power]},eval:function(e,n){return Math.log(this.power.eval(e,n))/Math.log(this.base.eval(e,n))},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 n=this.recurse("collect",e);return n.power instanceof I&&n.power.eval()===1?I.Zero:n.base.equals(n.power)?I.One:n.power instanceof z&&n.power.base.equals(n.base)?n.power.exp:n},expand:function(){var e=this.recurse("expand");if(e.power instanceof A){var n=f.map(e.power.terms,function(a){return new re(e.base,a).expand()});return new ee(n)}else return e.power instanceof z?new A(e.power.exp,new re(e.base,e.power.base).expand()).flatten():e.isNatural()?e:A.handleDivide(new re(pe.e,e.power),new re(pe.e,e.base))},hints:f.extend(re.prototype.hints,{open:!1}),isPositive:function(){var e=this.collect();return e.base instanceof I&&e.power instanceof I?this.eval()>0:!1},needsExplicitMul:function(){return!1},isNatural:function(){return this.base.equals(pe.e)}});f.extend(re,{natural:function(){return pe.e},common:function(){return I.Ten},create:function(e,n){var a=new re(e,n);return n.hints.parens||(a=a.addHint("open")),a}});function H(e,n){this.type=e,this.arg=n}H.prototype=new ve;f.extend(H.prototype,{func:H,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 A.handleDivide(H.sin(this.arg),H.cos(this.arg))}},csc:{eval:function(e){return 1/Math.sin(e)},codegen:"(1/Math.sin(",tex:"\\csc",expand:function(){return A.handleDivide(I.One,H.sin(this.arg))}},sec:{eval:function(e){return 1/Math.cos(e)},codegen:"(1/Math.cos(",tex:"\\sec",expand:function(){return A.handleDivide(I.One,H.cos(this.arg))}},cot:{eval:function(e){return 1/Math.tan(e)},codegen:"(1/Math.tan(",tex:"\\cot",expand:function(){return A.handleDivide(H.cos(this.arg),H.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 A.handleDivide(H.sinh(this.arg),H.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 A.handleDivide(I.One,H.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 A.handleDivide(I.One,H.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 A.handleDivide(H.cosh(this.arg),H.sinh(this.arg))}}},isEven:function(){return f.contains(["cos","sec"],this.type)},isInverse:function(){return this.type.indexOf("arc")===0},isBasic:function(){return f.contains(["sin","cos"],this.type)},eval:function(e,n){var a=this.functions[this.type].eval,c=this.arg.eval(e,n);return a(c)},codegen:function(){var e=this.functions[this.type].codegen;if(typeof e=="function")return e(this.arg.codegen());if(typeof e=="string")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 n=this.functions[this.type].tex,a="("+this.arg.tex()+")";return e&&e.split?[n,a]:n+a},hints:f.extend(H.prototype.hints,{open:!1}),isPositive:function(){var e=this.collect();return e.arg instanceof I?this.eval()>0:!1},completeParse:function(){if(this.exp){var e=new z(this,this.exp);return this.exp=void 0,e}else return this},needsExplicitMul:function(){return!1},expand:function(){var e=this.recurse("expand");if(e.isInverse())return e;var n=e.functions[e.type].expand;return f.bind(n,e)()},collect:function(e){var n=this.recurse("collect",e);if(!n.isInverse()&&n.arg.isNegative()){var a;return n.arg instanceof I?a=n.arg.abs():a=A.handleDivide(n.arg,I.Neg).collect(e),n.isEven()?new H(n.type,a):new A(I.Neg,new H(n.type,a))}else return n}});f.extend(H,{create:function(e,n){var a=e[0],c=e[1];c&&c.equals(I.Neg)&&(a="arc"+a,c=void 0);var o=new H(a,n);return n.hints.parens||(o=o.addHint("open")),c&&(o.exp=c),o},sin:function(e){return new H("sin",e)},cos:function(e){return new H("cos",e)},sinh:function(e){return new H("sinh",e)},cosh:function(e){return new H("cosh",e)}});function Oe(e){this.arg=e}Oe.prototype=new ve;f.extend(Oe.prototype,{func:Oe,args:function(){return[this.arg]},eval:function(e,n){return Math.abs(this.arg.eval(e,n))},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 n=this.recurse("collect",e);if(n.arg.isPositive())return n.arg;if(n.arg instanceof I)return n.arg.abs();if(n.arg instanceof A){var a=f.groupBy(n.arg.terms,function(o){return o.isPositive()?"positive":o instanceof I?"number":"other"}),c=a.positive.concat(f.invoke(a.number,"abs"));return a.other.length&&c.push(new Oe(new A(a.other).flatten())),new A(c).flatten()}else return n},expand:function(){var e=this.recurse("expand");if(e.arg instanceof A){var n=f.map(e.arg.terms,function(a){return new Oe(a)});return new A(n)}else return e},isPositive:function(){return!0}});function Ie(e,n,a){this.left=e,this.type=n,this.right=a}Ie.prototype=new ve;f.extend(Ie.prototype,{func:Ie,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.contains([">",">="],e.type)?new Ie(e.right,e.type.replace(">","<"),e.left):e},asExpr:function(e){var n=function(v){return v instanceof I&&v.isSimple()&&v.eval()===0},a=[];this.left instanceof ee?a=f.clone(this.left.terms):n(this.left)||(a=[this.left]),this.right instanceof ee?a=a.concat(this.right.negate().terms):n(this.right)||a.push(this.right.negate());var c=!this.isEquality();a=f.invoke(a,"collect",{preciseFloats:!0});for(var o=0;o"],this.type)},compare:function(e){if(!(e instanceof Ie))return!1;var n=this.normalize(),a=e.normalize();if(n.type!==a.type)return!1;var c=n.divideThrough(n.asExpr(!0).collect()),o=a.divideThrough(a.asExpr(!0).collect());return n.isEquality()?c.compare(o)||c.compare(A.handleNegative(o)):c.compare(o)},sameForm:function(e){var n=this.normalize(),a=e.normalize(),c=n.left.sameForm(a.left)&&n.right.sameForm(a.right);return n.isEquality()?c||n.left.sameForm(a.right)&&n.right.sameForm(a.left):c},isSimplified:function(){var e=this.asExpr(!0),n=this.divideThrough(e).simplify();return e.equals(n)&&this.left.isSimplified()&&this.right.isSimplified()}});f.extend(Ie.prototype,{solveLinearEquationForVariable:function(e){var n=this.asExpr();if(!n.is(ee)||n.terms.length!==2)throw new Error("Can only handle linear equations of the form a + bx (= 0)");var a=function(l){return l.has(Te)&&f.contains(l.getVars(),e.symbol)},c,o;return a(n.terms[0])?(c=A.handleNegative(n.terms[1]),o=A.handleDivide(n.terms[0],e)):(c=A.handleNegative(n.terms[0]),o=A.handleDivide(n.terms[1],e)),A.handleDivide(c,o).simplify()}});function Ee(){}Ee.prototype=new ve;f.extend(Ee.prototype,{needsExplicitMul:function(){return!1},findGCD:function(e){return e instanceof Ee||e instanceof I?this.equals(e)?this:I.One:e.findGCD(this)}});function _e(e,n){this.symbol=e,this.arg=n}_e.prototype=new Ee;f.extend(_e.prototype,{func:_e,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,n){var a=this.arg,c=e[this.symbol],o=f.extend(f.clone(e),{x:a.eval(e,n)}),l=Fe(c,n);return l.parsed?l.expr.eval(o,n):l},codegen:function(){return'vars["'+this.symbol+'"]('+this.arg.codegen()+")"},getUnits:function(){return this.arg.getUnits()},getVars:function(e){return e?this.arg.getVars():f.union(this.arg.getVars(),[this.symbol]).sort()},getConsts:function(){return this.arg.getConsts()}});function Te(e,n){this.symbol=e,this.subscript=n}Te.prototype=new Ee;f.extend(Te.prototype,{func:Te,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 I||e instanceof Ee)?this.symbol+"_"+e.print():this.print()},tex:function(){var e="";this.subscript&&(e="_{"+this.subscript.tex()+"}");var n=this.symbol.length>1?"\\":"";return n+this.symbol+e},repr:function(){return"Var("+this.print()+")"},eval:function(e,n){return e[this.prettyPrint()]},codegen:function(){return'vars["'+this.prettyPrint()+'"]'},getVars:function(){return[this.prettyPrint()]},isPositive:function(){return!1}});function pe(e){this.symbol=e}pe.prototype=new Ee;f.extend(pe.prototype,{func:pe,args:function(){return[this.symbol]},recurse:function(){return this},eval:function(e,n){if(this.symbol==="pi")return Math.PI;if(this.symbol==="e")return Math.E},codegen:function(){if(this.symbol==="pi")return"Math.PI";if(this.symbol==="e")return"Math.E"},print:function(){return this.symbol},tex:function(){if(this.symbol==="pi")return"\\pi ";if(this.symbol==="e")return"e"},isPositive:function(){return this.eval()>0},abs:function(){return this.eval()>0?this:A.handleNegative(this)},getConsts:function(){return[this.print()]}});pe.e=new pe("e");pe.pi=new pe("pi");function I(){}I.prototype=new ve;f.extend(I.prototype,{repr:function(){return this.print()},strip:function(){return this.abs()},recurse:function(){return this},codegen:function(){return this.print()},add:oe,mul:oe,negate:oe,isSubtract:function(){return this.hints.subtract},abs:oe,needsExplicitMul:function(){return!0},findGCD:oe,isPositive:function(){return this.eval()>0},isNegative:function(){return this.eval()<0},asPositiveFactor:function(){return this.isPositive()?this:this.abs()},hints:f.extend(I.prototype.hints,{negate:!1,subtract:!1,divide:!1,root:!1,fraction:!1,entered:!1}),isSimple:oe,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:oe});function B(e,n){var a=e,c=n;c<0&&(a=-a,c=-c),this.n=a,this.d=c}B.prototype=new I;f.extend(B.prototype,{func:B,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,n){return e instanceof B?new B(this.n*e.d+this.d*e.n,this.d*e.d).collect():e.add(this,n)},mul:function(e,n){return e instanceof B?new B(this.n*e.n,this.d*e.d).collect():e.mul(this,n)},collect:function(){var e=I.findGCD(this.n,this.d),n=this.n/e,a=this.d/e;return a===1?new U(n):new B(n,a)},negate:function(){return new B(-this.n,this.d)},abs:function(){return new B(Math.abs(this.n),this.d)},findGCD:function(e){if(e instanceof B){var n=I.findGCD(this.n*e.d,e.n*this.d),a=this.d*e.d;return new B(n,a).collect()}else return e instanceof U?new B(I.findGCD(this.n,e.n),this.d):e.findGCD(this)},raiseToThe:function(e){if(e instanceof U){var n=e.eval()>0,a=e.abs().eval(),c=Math.pow(this.n,a),o=Math.pow(this.d,a);return n?new B(c,o).collect():new B(o,c).collect()}else return new ne(this.eval()).raiseToThe(e)},getDenominator:function(){return new U(this.d)},isSimple:function(){return!1},asRational:function(){return this}});function U(e){this.n=e}U.prototype=new B(0,1);f.extend(U.prototype,{func:U,args:function(){return[this.n]},print:function(){return this.n.toString()},tex:function(){return this.n.toString()},negate:function(){return new U(-this.n)},abs:function(){return new U(Math.abs(this.n))},isSimple:function(){return!0},findGCD:function(e){return e instanceof U?new U(I.findGCD(this.n,e.n)):e.findGCD(this)}});f.extend(U,{create:function(e){return new U(e).addHint("entered")}});function ne(e){this.n=e}ne.prototype=new I;f.extend(ne.prototype,{func:ne,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,n){return n&&n.preciseFloats?ne.toDecimalPlaces(this.n+e.eval(),Math.max(this.getDecimalPlaces(),e.getDecimalPlaces())):new ne(this.n+e.eval()).collect()},mul:function(e,n){return n&&n.preciseFloats?ne.toDecimalPlaces(this.n*e.eval(),this.getDecimalPlaces()+e.getDecimalPlaces()):new ne(this.n*e.eval()).collect()},collect:function(){return this},negate:function(){return new ne(-this.n)},abs:function(){return new ne(Math.abs(this.n))},findGCD:function(e){return e instanceof I?new ne(I.findGCD(this.eval(),e.eval())).collect():e.findGCD(this)},raiseToThe:function(e,n){return n&&n.preciseFloats&&e instanceof U&&e.n>1?ne.toDecimalPlaces(new z(this,e).eval(),this.getDecimalPlaces()*e.n):new ne(new z(this,e).eval()).collect()},asRational:function(){var e=this.n.toString().split(".");if(e.length===1)return new B(this.n,1);var n=Number(e.join("")),a=Math.pow(10,e[1].length);return new B(n,a).collect()},getDenominator:function(){return this.asRational().getDenominator()},isSimple:function(){return!0}});f.extend(ne,{create:function(e){return new ne(e).addHint("entered")},toDecimalPlaces:function(e,n){return new ne(+e.toFixed(Math.min(n,20))).collect()}});f.extend(I,{negativeOne:function(e){return e==="subtract"?I.Sub:e==="divide"?I.Div:I.Neg},findGCD:function(e,n){var a;if(e=Math.abs(e),n=Math.abs(n),e!==Math.floor(e)||n!==Math.floor(n))return 1;for(;n;)a=e%n,e=n,n=a;return e},min:function(){return f.min(f.toArray(arguments),function(e){return e.eval()})},max:function(){return f.max(f.toArray(arguments),function(e){return e.eval()})}});I.Neg=new U(-1).addHint("negate");I.Sub=new U(-1).addHint("subtract");I.Div=new U(-1).addHint("divide");I.Sqrt=new B(1,2).addHint("root");I.Zero=new U(0);I.One=new U(1);I.Ten=new U(10);ee.prototype.identity=I.Zero;A.prototype.identity=I.One;var yt=function(e,n){throw new Error(n.loc.first_column)};be.yy={Add:ee,Mul:A,Pow:z,Log:re,Trig:H,Eq:Ie,Abs:Oe,Func:_e,Const:pe,Var:Te,Int:U,Float:ne,parseError:yt,constants:["e"],symbolLexer:function(e){return f.contains(be.yy.constants,e)?"CONST":f.contains(be.yy.functions,e)?"FUNC":"VAR"}};const Fe=function(e,n){try{n&&n.functions?be.yy.functions=f.without(n.functions,"i"):be.yy.functions=[],n&&n.decimal_separator&&(e=e.split(n.decimal_separator).join("."));var a=be.parse(e).completeParse();return{parsed:!0,expr:a}}catch(c){return{parsed:!1,error:c.message}}};function ae(e){this.symbol=e}ae.prototype=new Ee;f.extend(ae.prototype,{func:ae,args:function(){return[this.symbol]},recurse:function(){return this},eval:function(e,n){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(xt).has(this.symbol))return this;if(f(Xe).has(this.symbol))return Xe[this.symbol].conversion;throw new Error("could not understand unit: "+this.symbol)}});var xt={m:new ae("m"),g:new ae("g"),s:new ae("s"),A:new ae("A"),K:new ae("K"),mol:new ae("mol"),cd:new ae("cd")},j={},T={},k=function(e,n){var a=e.split("|"),c=a[0].trim(),o=a[1].trim(),l=I.One;c!==""&&(l=Fe(c).expr);var p=o.split("/"),v=[l];return p[0]&&p[0].split(" ").filter(function(y){return y!==""}).map(function(y){v.push(new ae(y))}),p[1]&&p[1].split(" ").filter(function(y){return y!==""}).map(function(y){v.push(new z(new ae(y),I.Div))}),{conversion:new A(v),prefixes:n}},Xe={Da:k("1.6605388628 x 10^-24 | g",j),u:k("| Da",T),meter:k("| m",T),meters:k("| m",T),in:k("254 / 10000 | m",T),ft:k("3048 / 10000 | m",T),yd:k("9144 / 10000 | m",T),mi:k("1609344 / 1000 | m",T),ly:k("9.4607 x 10^15 | m",T),nmi:k("1852 | m",T),Å:k("10^-10 | m",T),pc:k("3.0857 x 10^16 | m",T),min:k("60 | s",T),hr:k("3600 | s",T),sec:k("| s",T),day:k("86400 | s",T),wk:k("604800 | s",T),fortnight:k("14 | day",T),shake:k("10^-8 | s",T),olympiad:k("126200000 | s",T),"°C":k("1 | K",T),"°F":k("5/9 | K",T),"°R":k("5/9 | K",T),e:k("1.6021765314 x 10^-19 | C",T),c:k("299792458 | m / s",T),kn:k("514/1000 | m / s",T),kt:k("| kn",T),knot:k("| kn",T),J:k("| N m",j),BTU:k("1060 | J",T),cal:k("4184 / 1000 | J",j),eV:k("1.602176514 x 10^-19 | J",j),erg:k("10^−7 | J",j),W:k("| J / s",j),"H-e":k("80 | W",T),N:k("1000 | g m / s s",j),lb:k("4448221615 / 1000000000 | N",T),dyn:k("10^-5 | N",T),Pa:k("1 | N / m m m",j),bar:k("10^5 | Pa",j),"㏔":k("1/1000 | bar",T),"㍴":k("| bar",T),atm:k("101325 | Pa",T),Torr:k("1/760 | atm",T),mmHg:k("| Torr",T),ha:k("10^4 | m m",T),b:k("10^−28 | m m",j),barn:k("| b",j),acre:k("4046.87 | m m",T),skilodge:k("10^-31 | m m",T),outhouse:k("10^-34 | m m",T),shed:k("10^-52 | m m",T),L:k("1/1000 | m m m",j),gal:k("3785/1000 | L",j),cup:k("1/16 | gal",T),qt:k("1/4 | gal",T),quart:k("| qt",T),p:k("1/8 | gal",T),pt:k("| p",T),pint:k("| p",T),"fl oz":k("1/8 | cup",T),"fl. oz.":k("1/8 | cup",T),tbsp:k("1/16 | cup",T),tsp:k("1/3 | tbsp",T),rev:k("2 pi | rad",T),deg:k("180 pi | rad",T),"°":k("| deg",T),arcminute:k("1/60 | deg",T),arcsec:k("1/3600 | deg",T),Hu:k("1000 | dB",j),dozen:k("12 |",T),mol:k("6.0221412927 x 10^23 |",j),"%":k("1/100 |",T),percent:k("| %",T),ppm:k("1/1000000 |",T),V:k("1000 | g m m / s s C",j),C:k("| A s",j),ampere:k("| A",T),Ω:k("| V / A",j),ohm:k("| Ω",T),F:k("| C / V",j),H:k("| ohm s",j),T:k("1000 | g / C s",j),Wb:k("1000 | g m m / C s",j),lm:k("pi x 10^4 | cd / m m",T),lx:k("| lm / m m",T),nit:k("| cd / m m",T),sb:k("10^4 | cd / m m",T),stilb:k("1 | sb",T),apostilb:k("1 / pi x 10^(-4) | sb",T),blondel:k("| apostilb",T),asb:k("| apostilb",T),la:k("| lm",T),Lb:k("| lm",T),sk:k("10^-7 | lm",T),skot:k("| sk",T),bril:k("10^-11 | lm",T),Hz:k("| / s",j)};I.Zero;I.One;const Qe=function(e,n,a){a={...{form:!1,simplify:!1},...a};const o=e.sameVars(n);if(!o.equal){let l;return o.equalIgnoringCase?l="Check your variables; one or more are using the wrong case (upper or lower).":l="Check your variables; you may have used the wrong letter for one or more of them.",{equal:!1,wrongVariableCase:o.equalIgnoringCase,wrongVariableNames:!o.equalIgnoringCase,message:l}}return e.compare(n)?a.form&&!e.sameForm(n)?{equal:!1,message:"Your answer is not in the correct form."}:a.simplify&&!e.isSimplified()?{equal:!1,message:"Your answer is not fully expanded and simplified."}:{equal:!0,message:null}:{equal:!1,message:null}},wt="@khanacademy/kmath",_t="__lib_version__";rt(wt,_t);var Ge={exports:{}};(function(e,n){(function(){var a=this,c=a._,o={},l=Array.prototype,p=Object.prototype,v=Function.prototype,y=l.push,w=l.slice,g=l.concat,d=p.toString,x=p.hasOwnProperty,m=l.forEach,O=l.map,E=l.reduce,D=l.reduceRight,P=l.filter,Z=l.every,X=l.some,ue=l.indexOf,de=l.lastIndexOf,J=Array.isArray,Q=Object.keys,ie=v.bind,i=function(t){if(t instanceof i)return t;if(!(this instanceof i))return new i(t);this._wrapped=t};e.exports&&(n=e.exports=i),n._=i,i.VERSION="1.4.4";var L=i.each=i.forEach=function(t,r,s){if(t!=null){if(m&&t.forEach===m)t.forEach(r,s);else if(t.length===+t.length){for(var u=0,h=t.length;u2;if(t==null&&(t=[]),E&&t.reduce===E)return u&&(r=i.bind(r,u)),h?t.reduce(r,s):t.reduce(r);if(L(t,function(M,_,F){h?s=r.call(u,s,M,_,F):(s=M,h=!0)}),!h)throw new TypeError(ge);return s},i.reduceRight=i.foldr=function(t,r,s,u){var h=arguments.length>2;if(t==null&&(t=[]),D&&t.reduceRight===D)return u&&(r=i.bind(r,u)),h?t.reduceRight(r,s):t.reduceRight(r);var M=t.length;if(M!==+M){var _=i.keys(t);M=_.length}if(L(t,function(F,R,W){R=_?_[--M]:--M,h?s=r.call(u,s,t[R],R,W):(s=t[R],h=!0)}),!h)throw new TypeError(ge);return s},i.find=i.detect=function(t,r,s){var u;return K(t,function(h,M,_){if(r.call(s,h,M,_))return u=h,!0}),u},i.filter=i.select=function(t,r,s){var u=[];return t==null?u:P&&t.filter===P?t.filter(r,s):(L(t,function(h,M,_){r.call(s,h,M,_)&&(u[u.length]=h)}),u)},i.reject=function(t,r,s){return i.filter(t,function(u,h,M){return!r.call(s,u,h,M)},s)},i.every=i.all=function(t,r,s){r||(r=i.identity);var u=!0;return t==null?u:Z&&t.every===Z?t.every(r,s):(L(t,function(h,M,_){if(!(u=u&&r.call(s,h,M,_)))return o}),!!u)};var K=i.some=i.any=function(t,r,s){r||(r=i.identity);var u=!1;return t==null?u:X&&t.some===X?t.some(r,s):(L(t,function(h,M,_){if(u||(u=r.call(s,h,M,_)))return o}),!!u)};i.contains=i.include=function(t,r){return t==null?!1:ue&&t.indexOf===ue?t.indexOf(r)!=-1:K(t,function(s){return s===r})},i.invoke=function(t,r){var s=w.call(arguments,2),u=i.isFunction(r);return i.map(t,function(h){return(u?r:h[r]).apply(h,s)})},i.pluck=function(t,r){return i.map(t,function(s){return s[r]})},i.where=function(t,r,s){return i.isEmpty(r)?s?null:[]:i[s?"find":"filter"](t,function(u){for(var h in r)if(r[h]!==u[h])return!1;return!0})},i.findWhere=function(t,r){return i.where(t,r,!0)},i.max=function(t,r,s){if(!r&&i.isArray(t)&&t[0]===+t[0]&&t.length<65535)return Math.max.apply(Math,t);if(!r&&i.isEmpty(t))return-1/0;var u={computed:-1/0,value:-1/0};return L(t,function(h,M,_){var F=r?r.call(s,h,M,_):h;F>=u.computed&&(u={value:h,computed:F})}),u.value},i.min=function(t,r,s){if(!r&&i.isArray(t)&&t[0]===+t[0]&&t.length<65535)return Math.min.apply(Math,t);if(!r&&i.isEmpty(t))return 1/0;var u={computed:1/0,value:1/0};return L(t,function(h,M,_){var F=r?r.call(s,h,M,_):h;FF||_===void 0)return 1;if(_>>1;s.call(u,t[F])=0})})},i.difference=function(t){var r=g.apply(l,w.call(arguments,1));return i.filter(t,function(s){return!i.contains(r,s)})},i.zip=function(){for(var t=w.call(arguments),r=i.max(i.pluck(t,"length")),s=new Array(r),u=0;u=0;s--)r=[t[s].apply(this,r)];return r[0]}},i.after=function(t,r){return t<=0?r():function(){if(--t<1)return r.apply(this,arguments)}},i.keys=Q||function(t){if(t!==Object(t))throw new TypeError("Invalid object");var r=[];for(var s in t)i.has(t,s)&&(r[r.length]=s);return r},i.values=function(t){var r=[];for(var s in t)i.has(t,s)&&r.push(t[s]);return r},i.pairs=function(t){var r=[];for(var s in t)i.has(t,s)&&r.push([s,t[s]]);return r},i.invert=function(t){var r={};for(var s in t)i.has(t,s)&&(r[t[s]]=s);return r},i.functions=i.methods=function(t){var r=[];for(var s in t)i.isFunction(t[s])&&r.push(s);return r.sort()},i.extend=function(t){return L(w.call(arguments,1),function(r){if(r)for(var s in r)t[s]=r[s]}),t},i.pick=function(t){var r={},s=g.apply(l,w.call(arguments,1));return L(s,function(u){u in t&&(r[u]=t[u])}),r},i.omit=function(t){var r={},s=g.apply(l,w.call(arguments,1));for(var u in t)i.contains(s,u)||(r[u]=t[u]);return r},i.defaults=function(t){return L(w.call(arguments,1),function(r){if(r)for(var s in r)t[s]==null&&(t[s]=r[s])}),t},i.clone=function(t){return i.isObject(t)?i.isArray(t)?t.slice():i.extend({},t):t},i.tap=function(t,r){return r(t),t};var b=function(t,r,s,u){if(t===r)return t!==0||1/t==1/r;if(t==null||r==null)return t===r;t instanceof i&&(t=t._wrapped),r instanceof i&&(r=r._wrapped);var h=d.call(t);if(h!=d.call(r))return!1;switch(h){case"[object String]":return t==String(r);case"[object Number]":return t!=+t?r!=+r:t==0?1/t==1/r:t==+r;case"[object Date]":case"[object Boolean]":return+t==+r;case"[object RegExp]":return t.source==r.source&&t.global==r.global&&t.multiline==r.multiline&&t.ignoreCase==r.ignoreCase}if(typeof t!="object"||typeof r!="object")return!1;for(var M=s.length;M--;)if(s[M]==t)return u[M]==r;s.push(t),u.push(r);var _=0,F=!0;if(h=="[object Array]"){if(_=t.length,F=_==r.length,F)for(;_--&&(F=b(t[_],r[_],s,u)););}else{var R=t.constructor,W=r.constructor;if(R!==W&&!(i.isFunction(R)&&R instanceof R&&i.isFunction(W)&&W instanceof W))return!1;for(var $ in t)if(i.has(t,$)&&(_++,!(F=i.has(r,$)&&b(t[$],r[$],s,u))))break;if(F){for($ in r)if(i.has(r,$)&&!_--)break;F=!_}}return s.pop(),u.pop(),F};i.isEqual=function(t,r){return b(t,r,[],[])},i.isEmpty=function(t){if(t==null)return!0;if(i.isArray(t)||i.isString(t))return t.length===0;for(var r in t)if(i.has(t,r))return!1;return!0},i.isElement=function(t){return!!(t&&t.nodeType===1)},i.isArray=J||function(t){return d.call(t)=="[object Array]"},i.isObject=function(t){return t===Object(t)},L(["Arguments","Function","String","Number","Date","RegExp"],function(t){i["is"+t]=function(r){return d.call(r)=="[object "+t+"]"}}),i.isArguments(arguments)||(i.isArguments=function(t){return!!(t&&i.has(t,"callee"))}),typeof/./!="function"&&(i.isFunction=function(t){return typeof t=="function"}),i.isFinite=function(t){return isFinite(t)&&!isNaN(parseFloat(t))},i.isNaN=function(t){return i.isNumber(t)&&t!=+t},i.isBoolean=function(t){return t===!0||t===!1||d.call(t)=="[object Boolean]"},i.isNull=function(t){return t===null},i.isUndefined=function(t){return t===void 0},i.has=function(t,r){return x.call(t,r)},i.noConflict=function(){return a._=c,this},i.identity=function(t){return t},i.times=function(t,r,s){for(var u=Array(t),h=0;h":">",'"':""","'":"'","/":"/"}};S.unescape=i.invert(S.escape);var G={escape:new RegExp("["+i.keys(S.escape).join("")+"]","g"),unescape:new RegExp("("+i.keys(S.unescape).join("|")+")","g")};i.each(["escape","unescape"],function(t){i[t]=function(r){return r==null?"":(""+r).replace(G[t],function(s){return S[t][s]})}}),i.result=function(t,r){if(t==null)return null;var s=t[r];return i.isFunction(s)?s.call(t):s},i.mixin=function(t){L(i.functions(t),function(r){var s=i[r]=t[r];i.prototype[r]=function(){var u=[this._wrapped];return y.apply(u,arguments),me.call(this,s.apply(i,u))}})};var q=0;i.uniqueId=function(t){var r=++q+"";return t?t+r:r},i.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var ce=/(.)^/,C={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},le=/\\|'|\r|\n|\t|\u2028|\u2029/g;i.template=function(t,r,s){var u;s=i.defaults({},s,i.templateSettings);var h=new RegExp([(s.escape||ce).source,(s.interpolate||ce).source,(s.evaluate||ce).source].join("|")+"|$","g"),M=0,_="__p+='";t.replace(h,function(R,W,$,ye,he){return _+=t.slice(M,he).replace(le,function(Me){return"\\"+C[Me]}),W&&(_+=`'+ +`+V+"^"},test_match:function(N,V){var b,R,G;if(this.options.backtrack_lexer&&(G={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&&(G.yylloc.range=this.yylloc.range.slice(0))),R=N[0].match(/(?:\r\n?|\n).*/g),R&&(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+N[0].length},this.yytext+=N[0],this.match+=N[0],this.matches=N,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(N[0].length),this.matched+=N[0],b=this.performAction.call(this,this.yy,this,V,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),b)return b;if(this._backtrack){for(var q in G)this[q]=G[q];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var N,V,b,R;this._more||(this.yytext="",this.match="");for(var G=this._currentRules(),q=0;qV[0].length)){if(V=b,R=q,this.options.backtrack_lexer){if(N=this.test_match(b,G[q]),N!==!1)return N;if(this._backtrack){V=!1;continue}else return!1}else if(!this.options.flex)break}return V?(N=this.test_match(V,G[R]),N!==!1?N:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var V=this.next();return V||this.lex()},begin:function(V){this.conditionStack.push(V)},popState:function(){var V=this.conditionStack.length-1;return V>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(V){return V=this.conditionStack.length-1-Math.abs(V||0),V>=0?this.conditionStack[V]:"INITIAL"},pushState:function(V){this.begin(V)},stateStackSize:function(){return this.conditionStack.length},options:{flex:!0},performAction:function(V,b,R,G){switch(R){case 0:break;case 1:break;case 2:break;case 3:return"INT";case 4:return"FLOAT";case 5:return"^";case 6:return"*";case 7:return"*";case 8:return"*";case 9:return"*";case 10:return"/";case 11:return"/";case 12:return"-";case 13:return"-";case 14:return"+";case 15:return"^";case 16:return"(";case 17:return")";case 18:return"(";case 19:return")";case 20:return"[";case 21:return"]";case 22:return"{";case 23:return"}";case 24:return"{";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:return b.yytext="<=","SIGN";case 33:return b.yytext=">=","SIGN";case 34:return b.yytext="<=","SIGN";case 35:return b.yytext=">=","SIGN";case 36:return b.yytext="<>","SIGN";case 37:return b.yytext="<>","SIGN";case 38:return b.yytext="<>","SIGN";case 39:return b.yytext="<>","SIGN";case 40:return b.yytext="<=","SIGN";case 41:return b.yytext=">=","SIGN";case 42:return"FRAC";case 43:return"FRAC";case 44:return"sqrt";case 45:return"abs";case 46:return"ln";case 47:return"log";case 48:return"TRIG";case 49:return"TRIG";case 50:return"TRIG";case 51:return"TRIG";case 52:return b.yytext="sin","TRIG";case 53:return b.yytext="cos","TRIG";case 54:return b.yytext="tan","TRIG";case 55:return b.yytext="csc","TRIG";case 56:return b.yytext="sec","TRIG";case 57:return b.yytext="cot","TRIG";case 58:return b.yytext="arcsin","TRIG";case 59:return b.yytext="arccos","TRIG";case 60:return b.yytext="arctan","TRIG";case 61:return b.yytext="arccsc","TRIG";case 62:return b.yytext="arcsec","TRIG";case 63:return b.yytext="arccot","TRIG";case 64:return"TRIGINV";case 65:return"TRIGINV";case 66:return b.yytext="sinh","TRIG";case 67:return b.yytext="cosh","TRIG";case 68:return b.yytext="tanh","TRIG";case 69:return b.yytext="csch","TRIG";case 70:return b.yytext="sech","TRIG";case 71:return b.yytext="tanh","TRIG";case 72:return"CONST";case 73:return b.yytext="pi","CONST";case 74:return b.yytext="pi","CONST";case 75:return"VAR";case 76:return b.yytext="theta","VAR";case 77:return b.yytext="theta","VAR";case 78:return"VAR";case 79:return b.yytext="phi","VAR";case 80:return b.yytext="phi","VAR";case 81:return V.symbolLexer(b.yytext);case 82:return"EOF";case 83:return"INVALID";case 84:console.log(b.yytext);break}},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}}};return Y}();L.lexer=ge;function K(){this.yy={}}return K.prototype=L,L.Parser=K,new K}(),oe=function(){throw new Error("Abstract method - must override for expr: "+this.print())},Je=function(e){throw new Error(e)},Ze=function(e){return e!==e},mt=function(e,n){var a=n-e;return Math.random()*a+e},Ke=12,Ye=9;function ve(){}f.extend(ve.prototype,{func:oe,args:oe,construct:function(e){var n=new this.func;return this.func.apply(n,e),n},recurse:function(e){var n=Array.prototype.slice.call(arguments,1),a=f.map(this.args(),function(c){return f.isString(c)?c:c[e].apply(c,n)});return this.construct(a)},eval:oe,codegen:oe,compile:function(){var e=this.codegen();try{return new Function("vars","return "+e+";")}catch{throw new Error("Function did not compile: "+e)}},print:oe,tex:oe,asTex:function(e){e=e||{},f.defaults(e,{display:!0,dynamic:!0,times:!1});var n=this.tex();return e.display&&(n="\\displaystyle "+n),e.dynamic&&(n=n.replace(/\(/g,"\\left("),n=n.replace(/\)/g,"\\right)")),e.times&&(n=n.replace(/\\cdot/g,"\\times")),n},name:function(){return this.func.name?this.func.name:this.func.toString().match(/^function\s*([^\s(]+)/)[1]},repr:function(){return this.name()+"("+f.map(this.args(),function(e){return f.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.extend({once:!1},e);var n=this.factor(e),a=n.collect(e);n.equals(a)&&(a=this.collect(e));var c=a.expand(e),o=c.collect(e);c.equals(o)&&(o=a.collect(e));var l=o;return e.once||this.equals(l)?l:l.simplify(e)},isSimplified:function(){return this.equals(this.simplify())},exprArgs:function(){return f.filter(this.args(),function(e){return e instanceof ve})},getVars:function(e){return f.uniq(f.flatten(f.invoke(this.exprArgs(),"getVars",e))).sort()},getConsts:function(){return f.uniq(f.flatten(f.invoke(this.exprArgs(),"getConsts"))).sort()},getUnits:function(){return f.flatten(f.invoke(this.exprArgs(),"getUnits"))},is:function(e){return this instanceof e},has:function(e){return this instanceof e?!0:f.any(this.exprArgs(),function(n){return n.has(e)})},raiseToThe:function(e){return new z(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 n=this.getVars(),a=e.getVars(),c=function(v,y){return!f.difference(v,y).length},o=function(v){return f.uniq(f.invoke(v,"toLowerCase")).sort()},l=c(n,a),p=c(o(n),o(a));return{equal:l,equalIgnoringCase:p}},compare:function(e){if(e instanceof Ie)return!1;var n=f.union(this.getVars(!0),e.getVars(!0)),a=function(E,D){return Math.abs(E)<1||Math.abs(D)<1?Math.abs(E-D):Math.abs(1-E/D)},c=function(E,D){var P=a(E,D);return E===D||Ze(E)&&Ze(D)||Pn.unit.localeCompare(a.unit)),e},tex:function(){for(var e=" \\cdot ",n=f.groupBy(this.terms,function(m){return m.isDivide()?"inverse":m instanceof I?"number":"other"}),a=n.inverse||[],c=n.number||[],o=n.other||[],l="",p,v=0;v0&&a.length>0){var w=c.slice();w.splice(v,1);var g=w.concat(a).concat(o);return c[v].tex()+new A(g).tex()}}if(c=f.compact(f.map(c,function(m){var O=m instanceof B&&!(m instanceof U),E=!m.hints.fraction||a.length>0;if(O&&E){a.push(new z(new U(m.d),I.Div));var D=new U(m.n);return D.hints=m.hints,f.any(m.hints)?D:null}else return m})),c.length===0&&o.length===1)p=o[0].tex();else{var d="";f.each(c,function(m){m.hints.subtract&&m.hints.entered?(l+="-",d+=(d?e:"")+m.abs().tex()):m instanceof U&&m.n===-1&&(m.hints.negate||m.hints.subtract)?l+="-":d+=(d?e:"")+m.tex()}),f.each(o,function(m){m.needsExplicitMul()?d+=(d?e:"")+m.tex():m instanceof ee?d+="("+m.tex()+")":d+=m.tex()}),p=d||"1"}if(a.length){var x=new A(f.invoke(a,"asDivide")).flatten().tex();return l+"\\frac{"+p+"}{"+x+"}"}else return l+p},strip:function(){var e=f.map(this.terms,function(n){return n instanceof I?n.abs():n.strip()});return new A(e).flatten()},expand:function(){var e=function(E){return E instanceof ee},n=function(E){return E instanceof z&&E.exp.isNegative()},a=function(E){return n(E)&&e(E.base)},c=this.recurse("expand").flatten(),o=f.any(c.terms,e),l=f.any(c.terms,a);if(!(o||l))return c;var p=f.groupBy(c.terms,n),v=p[!1]||[],y=p[!0]||[];if(o){var w=f.groupBy(v,e),g=w[!0]||[],d=w[!1]||[],x=f.reduce(g,function(E,D){return f.reduce(E,function(P,Z){return P.concat(f.map(D.terms,function(X){return Z.concat(X)}))},[])},[[]]),m=f.map(x,function(E){return new A(d.concat(E)).flatten()});v=[new ee(m)]}if(l){var O=new A(f.invoke(y,"getDenominator")).flatten();y=[new z(O.expand(),I.Div)]}return new A(v.concat(y)).flatten()},factor:function(e){var n=this.recurse("factor",e).flatten();if(!(n instanceof A))return n;var a=f.groupBy(n.terms,function(o){return o instanceof B}),c=f.reduce(a[!0],function(o,l){return{n:o.n*l.n,d:o.d*l.d}},{n:1,d:1});return c.d===1?c=new U(c.n):c=new B(c.n,c.d),new A((a[!1]||[]).concat(c)).flatten()},collect:function(e){var n=this.recurse("collect",e).partition(),a=n[0].reduce(e);if(a.eval()===0)return I.Zero;var c=n[1].flatten();if(!(c instanceof A))return new A(a,c).flatten();c=c.terms;var p=[];f.each(c,function(m){m instanceof z?p.push([m.base,m.exp]):p.push([m,I.One])});var o=f.groupBy(p,function(m){return m[0].normalize().print()}),l=f.compact(f.map(o,function(m){var O=m[0][0],E=new ee(f.zip.apply(f,m)[1]),D=E.collect(e);return D instanceof I&&D.eval()===0?null:[O,D]})),p=f.groupBy(l,function(m){return m[0]instanceof H&&m[0].isBasic()?"trig":m[0]instanceof re?"log":"expr"}),v=p.trig||[],y=p.log||[],w=p.expr||[];if(v.length>1){var g=f.groupBy(v,function(m){return m[0].arg.normalize().print()});v=[],f.each(g,function(m){var O=m[0][0].arg,E={sin:I.Zero,cos:I.Zero};f.each(m,function(D){E[D[0].type]=D[1]}),A.handleNegative(E.sin).collect(e).equals(E.cos)&&(E.cos.isNegative()?E={tan:E.sin}:E={cot:E.cos}),f.each(E,function(D,P){v.push([new H(P,O),D])})})}if(y.length>1){var d=f.groupBy(y,function(m){return m[0].base.normalize().print()});y=[],f.each(d,function(m){m.length===2&&A.handleNegative(m[0][1]).collect(e).equals(m[1][1])?m[0][1].isNegative()?y.push([new re(m[0][0].power,m[1][0].power),m[1][1]]):y.push([new re(m[1][0].power,m[0][0].power),m[0][1]]):y=y.concat(m)})}p=v.concat(y).concat(w);var x=f.map(p,function(m){return new z(m[0],m[1]).collect(e)});return new A([a].concat(x)).flatten()},isSubtract:function(){return f.any(this.terms,function(e){return e instanceof I&&e.hints.subtract})},factorIn:function(e){var n=this.partition(),a=n[0].terms,c=a.length&&f.all(a,function(l){return l.n>0});if(c){var o=a[0].negate();return o.hints=a[0].hints,this.replace(a[0],o.addHint(e))}else return new A([I.negativeOne(e)].concat(this.terms))},factorOut:function(){var e=!1,n=f.compact(f.map(this.terms,function(a,c,o){return!e&&a instanceof I&&a.hints.divide?(e=!0,a.n!==-1?a.negate():null):a}));return n.length===1?n[0]:new A(n)},reduce:function(e){return f.reduce(this.terms,function(n,a){return n.mul(a,e)},this.identity)},findGCD:function(e){return new A(f.invoke(this.terms,"findGCD",e)).flatten()},asMul:function(){return this},asPositiveFactor:function(){if(this.isPositive())return this;var e=f.invoke(this.collect().terms,"asPositiveFactor");return new A(e).flatten()},isNegative:function(){return f.any(f.invoke(this.collect().terms,"isNegative"))},fold:function(){return A.fold(this)},negate:function(){var e=function(a){return a instanceof I};if(f.any(this.terms,e)){var n=f.find(this.terms,e);return this.replace(n,n.negate())}else return new A([I.Neg].concat(this.terms))}});f.each([ee,A],function(e){f.extend(e,{createOrAppend:function(n,a){return n instanceof e?new e(n.terms.concat(a)):new e(n,a)}})});f.extend(A,{handleNegative:function(e,n){if(e instanceof I&&e.n>0){var a=e.negate();return a.hints=e.hints,a.addHint(n)}else return e instanceof A?e.factorIn(n):new A(I.negativeOne(n),e)},handleDivide:function(e,n){if(n instanceof A){var a=A.handleDivide(e,n.terms[0]),c=new A(f.rest(n.terms)).flatten();return A.handleDivide(a,c)}var o=function(d){return d instanceof U},l=function(d){return d instanceof B};if(o(n)&&e instanceof A&&f.any(e.terms,o)){var p=e.terms.slice().reverse(),v=f.find(p,l);if(!o(v))return new A(e.terms.concat([new B(1,n.n).addHint("fraction")]));var y=new B(v.n,n.n);return y.hints=v.hints,v===p[0]&&(y=y.addHint("fraction")),v.n<0&&n.n<0?(y.d=-y.d,e.replace(v,[I.Neg,y])):e.replace(v,y)}var w=function(d,x){if(x instanceof U){if(d instanceof U)return d.n<0&&x.n<0?[I.Neg,new B(d.n,-x.n).addHint("fraction")]:[new B(d.n,x.n).addHint("fraction")];var m=new B(1,x.eval());return x.eval()<0?[d,m.addHint("negate")]:[d,m]}else{var O;if(x instanceof H&&x.exp){var E=x.exp;x.exp=void 0,x=new z(x,E)}return x instanceof z?O=new z(x.base,A.handleNegative(x.exp,"divide")):O=new z(x,I.Div),d instanceof U&&d.n===1?[O]:[d,O]}};if(e instanceof A){var g=w(f.last(e.terms),n);return new A(f.initial(e.terms).concat(g))}else{var g=w(e,n);return new A(g).flatten()}},fold:function(e){if(e instanceof A){var n=f.find(f.initial(e.terms),function(x){return(x instanceof H||x instanceof re)&&x.hints.open}),a=f.indexOf(e.terms,n);if(n){var c=f.last(e.terms);if(n.hints.parens||c.hints.parens||c.has(H)||c.has(re))n.hints.open=!1;else{var o;return n instanceof H?o=H.create([n.type,n.exp],A.createOrAppend(n.arg,c).fold()):o=re.create(n.base,A.createOrAppend(n.power,c).fold()),a===0?o:new A(e.terms.slice(0,a).concat(o)).fold()}}var l=e.partition(),p=l[0].terms,v=function(x){return x.n>0},y=function(x){return x.n===-1&&x.hints.negate},w=function(x){return v(x)||y(x)};if(p.length>1&&f.some(p,y)&&f.some(p,v)&&f.every(p,w)){var g=f.indexOf(e.terms,f.find(e.terms,y)),d=f.indexOf(e.terms,f.find(e.terms,v));if(g=0){var e=this.base.tex({split:!0});return e[0]+"^{"+this.exp.tex()+"}"+e[1]}else{var n=this.base.tex();return this.base instanceof Ne||this.base instanceof z||this.base instanceof I&&!this.base.isSimple()?n="("+n+")":(this.base instanceof H||this.base instanceof re)&&(n="["+n+"]"),n+"^{"+this.exp.tex()+"}"}},needsExplicitMul:function(){return this.isRoot()?!1:this.base.needsExplicitMul()},expand:function(){var e=this.recurse("expand");if(e.base instanceof A){var n=f.map(e.base.terms,function(w){return new z(w,e.exp)});return new A(n).expand()}else if(e.base instanceof ee&&e.exp instanceof U&&e.exp.abs().eval()>1){for(var a=e.exp.eval()>0,c=e.exp.abs().eval(),o=function(w){return a?w:new z(w,I.Div)},l={1:e.base},p=2;p<=c;p*=2){var y=new A(l[p/2],l[p/2]);l[p]=y.expand().collect()}if(f.has(l,c))return o(l[c]);var v=f.map(c.toString(2).split(""),function(w,g,d){return Number(w)*Math.pow(2,d.length-g-1)});v=f.without(v,0);var y=new A(f.pick(l,v)).expand().collect();return o(y)}else if(e.exp instanceof ee){var n=f.map(e.exp.terms,function(g){return new z(e.base,g).expand()});return new A(n).expand()}else return e},factor:function(){var e=this.recurse("factor");if(e.base instanceof A){var n=f.map(e.base.terms,function(a){return a instanceof U&&e.exp.equals(I.Div)?new B(1,a.n):new z(a,e.exp)});return new A(n)}else return e},collect:function(e){if(this.base instanceof z){var n=this.base.base,a=A.createOrAppend(this.base.exp,this.exp);return new z(n,a).collect(e)}var c=this.recurse("collect",e),o=function(g){return g instanceof re&&g.base.equals(c.base)};if(c.exp instanceof I&&c.exp.eval()===0)return I.One;if(c.exp instanceof I&&c.exp.eval()===1)return c.base;if(o(c.exp))return c.exp.power;if(c.exp instanceof A&&f.any(c.exp.terms,o)){var l=f.find(c.exp.terms,o),n=l.power,a=c.exp.remove(l).flatten();return new z(n,a).collect(e)}else if(c.base instanceof I&&c.exp instanceof I){if(e&&e.preciseFloats){var a=c.exp.asRational(),p=c.base.getDecimalPlaces(),v=new z(c.base,new B(1,a.d)),y=v.collect().getDecimalPlaces();if(y>p){var w=new z(c.base,new U(a.n)).collect();return new z(w,new B(1,a.d))}}return c.base.raiseToThe(c.exp,e)}else return c},isDivide:function(){var e=function(n){return n instanceof I&&n.hints.divide};return e(this.exp)||this.exp instanceof A&&f.any(this.exp.terms,e)},asDivide:function(){if(this.exp instanceof I){if(this.exp.eval()===-1)return this.base;var e=this.exp.negate();return e.hints=f.clone(this.exp.hints),e.hints.divide=!1,new z(this.base,e)}else{if(this.exp instanceof A)return new z(this.base,this.exp.factorOut());Je("called asDivide() on an Expr that wasn't a Num or Mul")}},isRoot:function(){return this.exp instanceof B&&this.exp.hints.root},isSquaredTrig:function(){return this.base instanceof H&&!this.base.isInverse()&&this.exp instanceof I&&this.exp.eval()===2},getDenominator:function(){if(this.exp instanceof I&&this.exp.eval()===-1)return A.createOrAppend(this.base,this.base.getDenominator()).flatten();if(this.exp.isNegative()){var e=new z(this.base,A.handleNegative(this.exp).collect());return A.createOrAppend(e,e.collect().getDenominator()).flatten()}else return this.base instanceof I?new z(this.base.getDenominator(),this.exp).collect():I.One},findGCD:function(e){var n,a;if(e instanceof z?(n=e.base,a=e.exp):(n=e,a=I.One),this.base.equals(n)){if(this.exp.equals(a))return this;if(this.exp instanceof I&&a instanceof I)return new z(this.base,I.min(this.exp,a)).collect();if(this.exp instanceof I||a instanceof I)return I.One;var c=this.exp.asMul().partition(),o=a.asMul().partition();if(c[1].equals(o[1])){var l=I.min(c[0].reduce(),o[0].reduce()),p=new A(l,c[1].flatten()).flatten();return new z(n,p).collect()}}return I.One},isPositive:function(){if(this.base.isPositive())return!0;var e=this.exp.simplify();return e instanceof U&&e.eval()%2===0},asPositiveFactor:function(){if(this.isPositive())return this;var e=this.exp.simplify();if(e instanceof U){var n=e.eval();if(n>2)return new z(this.base,new U(n-1));if(n<-2)return new z(this.base,new U(n+1))}return I.One}});f.extend(z,{sqrt:function(e){return new z(e,I.Sqrt)},nthroot:function(e,n){var a=A.fold(A.handleDivide(new U(1),n));return new z(e,a.addHint("root"))}});function re(e,n){this.base=e,this.power=n}re.prototype=new ve;f.extend(re.prototype,{func:re,args:function(){return[this.base,this.power]},eval:function(e,n){return Math.log(this.power.eval(e,n))/Math.log(this.base.eval(e,n))},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 n=this.recurse("collect",e);return n.power instanceof I&&n.power.eval()===1?I.Zero:n.base.equals(n.power)?I.One:n.power instanceof z&&n.power.base.equals(n.base)?n.power.exp:n},expand:function(){var e=this.recurse("expand");if(e.power instanceof A){var n=f.map(e.power.terms,function(a){return new re(e.base,a).expand()});return new ee(n)}else return e.power instanceof z?new A(e.power.exp,new re(e.base,e.power.base).expand()).flatten():e.isNatural()?e:A.handleDivide(new re(pe.e,e.power),new re(pe.e,e.base))},hints:f.extend(re.prototype.hints,{open:!1}),isPositive:function(){var e=this.collect();return e.base instanceof I&&e.power instanceof I?this.eval()>0:!1},needsExplicitMul:function(){return!1},isNatural:function(){return this.base.equals(pe.e)}});f.extend(re,{natural:function(){return pe.e},common:function(){return I.Ten},create:function(e,n){var a=new re(e,n);return n.hints.parens||(a=a.addHint("open")),a}});function H(e,n){this.type=e,this.arg=n}H.prototype=new ve;f.extend(H.prototype,{func:H,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 A.handleDivide(H.sin(this.arg),H.cos(this.arg))}},csc:{eval:function(e){return 1/Math.sin(e)},codegen:"(1/Math.sin(",tex:"\\csc",expand:function(){return A.handleDivide(I.One,H.sin(this.arg))}},sec:{eval:function(e){return 1/Math.cos(e)},codegen:"(1/Math.cos(",tex:"\\sec",expand:function(){return A.handleDivide(I.One,H.cos(this.arg))}},cot:{eval:function(e){return 1/Math.tan(e)},codegen:"(1/Math.tan(",tex:"\\cot",expand:function(){return A.handleDivide(H.cos(this.arg),H.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 A.handleDivide(H.sinh(this.arg),H.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 A.handleDivide(I.One,H.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 A.handleDivide(I.One,H.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 A.handleDivide(H.cosh(this.arg),H.sinh(this.arg))}}},isEven:function(){return f.contains(["cos","sec"],this.type)},isInverse:function(){return this.type.indexOf("arc")===0},isBasic:function(){return f.contains(["sin","cos"],this.type)},eval:function(e,n){var a=this.functions[this.type].eval,c=this.arg.eval(e,n);return a(c)},codegen:function(){var e=this.functions[this.type].codegen;if(typeof e=="function")return e(this.arg.codegen());if(typeof e=="string")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 n=this.functions[this.type].tex,a="("+this.arg.tex()+")";return e&&e.split?[n,a]:n+a},hints:f.extend(H.prototype.hints,{open:!1}),isPositive:function(){var e=this.collect();return e.arg instanceof I?this.eval()>0:!1},completeParse:function(){if(this.exp){var e=new z(this,this.exp);return this.exp=void 0,e}else return this},needsExplicitMul:function(){return!1},expand:function(){var e=this.recurse("expand");if(e.isInverse())return e;var n=e.functions[e.type].expand;return f.bind(n,e)()},collect:function(e){var n=this.recurse("collect",e);if(!n.isInverse()&&n.arg.isNegative()){var a;return n.arg instanceof I?a=n.arg.abs():a=A.handleDivide(n.arg,I.Neg).collect(e),n.isEven()?new H(n.type,a):new A(I.Neg,new H(n.type,a))}else return n}});f.extend(H,{create:function(e,n){var a=e[0],c=e[1];c&&c.equals(I.Neg)&&(a="arc"+a,c=void 0);var o=new H(a,n);return n.hints.parens||(o=o.addHint("open")),c&&(o.exp=c),o},sin:function(e){return new H("sin",e)},cos:function(e){return new H("cos",e)},sinh:function(e){return new H("sinh",e)},cosh:function(e){return new H("cosh",e)}});function Oe(e){this.arg=e}Oe.prototype=new ve;f.extend(Oe.prototype,{func:Oe,args:function(){return[this.arg]},eval:function(e,n){return Math.abs(this.arg.eval(e,n))},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 n=this.recurse("collect",e);if(n.arg.isPositive())return n.arg;if(n.arg instanceof I)return n.arg.abs();if(n.arg instanceof A){var a=f.groupBy(n.arg.terms,function(o){return o.isPositive()?"positive":o instanceof I?"number":"other"}),c=a.positive.concat(f.invoke(a.number,"abs"));return a.other.length&&c.push(new Oe(new A(a.other).flatten())),new A(c).flatten()}else return n},expand:function(){var e=this.recurse("expand");if(e.arg instanceof A){var n=f.map(e.arg.terms,function(a){return new Oe(a)});return new A(n)}else return e},isPositive:function(){return!0}});function Ie(e,n,a){this.left=e,this.type=n,this.right=a}Ie.prototype=new ve;f.extend(Ie.prototype,{func:Ie,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.contains([">",">="],e.type)?new Ie(e.right,e.type.replace(">","<"),e.left):e},asExpr:function(e){var n=function(v){return v instanceof I&&v.isSimple()&&v.eval()===0},a=[];this.left instanceof ee?a=f.clone(this.left.terms):n(this.left)||(a=[this.left]),this.right instanceof ee?a=a.concat(this.right.negate().terms):n(this.right)||a.push(this.right.negate());var c=!this.isEquality();a=f.invoke(a,"collect",{preciseFloats:!0});for(var o=0;o"],this.type)},compare:function(e){if(!(e instanceof Ie))return!1;var n=this.normalize(),a=e.normalize();if(n.type!==a.type)return!1;var c=n.divideThrough(n.asExpr(!0).collect()),o=a.divideThrough(a.asExpr(!0).collect());return n.isEquality()?c.compare(o)||c.compare(A.handleNegative(o)):c.compare(o)},sameForm:function(e){var n=this.normalize(),a=e.normalize(),c=n.left.sameForm(a.left)&&n.right.sameForm(a.right);return n.isEquality()?c||n.left.sameForm(a.right)&&n.right.sameForm(a.left):c},isSimplified:function(){var e=this.asExpr(!0),n=this.divideThrough(e).simplify();return e.equals(n)&&this.left.isSimplified()&&this.right.isSimplified()}});f.extend(Ie.prototype,{solveLinearEquationForVariable:function(e){var n=this.asExpr();if(!n.is(ee)||n.terms.length!==2)throw new Error("Can only handle linear equations of the form a + bx (= 0)");var a=function(l){return l.has(Te)&&f.contains(l.getVars(),e.symbol)},c,o;return a(n.terms[0])?(c=A.handleNegative(n.terms[1]),o=A.handleDivide(n.terms[0],e)):(c=A.handleNegative(n.terms[0]),o=A.handleDivide(n.terms[1],e)),A.handleDivide(c,o).simplify()}});function Ee(){}Ee.prototype=new ve;f.extend(Ee.prototype,{needsExplicitMul:function(){return!1},findGCD:function(e){return e instanceof Ee||e instanceof I?this.equals(e)?this:I.One:e.findGCD(this)}});function _e(e,n){this.symbol=e,this.arg=n}_e.prototype=new Ee;f.extend(_e.prototype,{func:_e,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,n){var a=this.arg,c=e[this.symbol],o=f.extend(f.clone(e),{x:a.eval(e,n)}),l=Fe(c,n);return l.parsed?l.expr.eval(o,n):l},codegen:function(){return'vars["'+this.symbol+'"]('+this.arg.codegen()+")"},getUnits:function(){return this.arg.getUnits()},getVars:function(e){return e?this.arg.getVars():f.union(this.arg.getVars(),[this.symbol]).sort()},getConsts:function(){return this.arg.getConsts()}});function Te(e,n){this.symbol=e,this.subscript=n}Te.prototype=new Ee;f.extend(Te.prototype,{func:Te,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 I||e instanceof Ee)?this.symbol+"_"+e.print():this.print()},tex:function(){var e="";this.subscript&&(e="_{"+this.subscript.tex()+"}");var n=this.symbol.length>1?"\\":"";return n+this.symbol+e},repr:function(){return"Var("+this.print()+")"},eval:function(e,n){return e[this.prettyPrint()]},codegen:function(){return'vars["'+this.prettyPrint()+'"]'},getVars:function(){return[this.prettyPrint()]},isPositive:function(){return!1}});function pe(e){this.symbol=e}pe.prototype=new Ee;f.extend(pe.prototype,{func:pe,args:function(){return[this.symbol]},recurse:function(){return this},eval:function(e,n){if(this.symbol==="pi")return Math.PI;if(this.symbol==="e")return Math.E},codegen:function(){if(this.symbol==="pi")return"Math.PI";if(this.symbol==="e")return"Math.E"},print:function(){return this.symbol},tex:function(){if(this.symbol==="pi")return"\\pi ";if(this.symbol==="e")return"e"},isPositive:function(){return this.eval()>0},abs:function(){return this.eval()>0?this:A.handleNegative(this)},getConsts:function(){return[this.print()]}});pe.e=new pe("e");pe.pi=new pe("pi");function I(){}I.prototype=new ve;f.extend(I.prototype,{repr:function(){return this.print()},strip:function(){return this.abs()},recurse:function(){return this},codegen:function(){return this.print()},add:oe,mul:oe,negate:oe,isSubtract:function(){return this.hints.subtract},abs:oe,needsExplicitMul:function(){return!0},findGCD:oe,isPositive:function(){return this.eval()>0},isNegative:function(){return this.eval()<0},asPositiveFactor:function(){return this.isPositive()?this:this.abs()},hints:f.extend(I.prototype.hints,{negate:!1,subtract:!1,divide:!1,root:!1,fraction:!1,entered:!1}),isSimple:oe,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:oe});function B(e,n){var a=e,c=n;c<0&&(a=-a,c=-c),this.n=a,this.d=c}B.prototype=new I;f.extend(B.prototype,{func:B,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,n){return e instanceof B?new B(this.n*e.d+this.d*e.n,this.d*e.d).collect():e.add(this,n)},mul:function(e,n){return e instanceof B?new B(this.n*e.n,this.d*e.d).collect():e.mul(this,n)},collect:function(){var e=I.findGCD(this.n,this.d),n=this.n/e,a=this.d/e;return a===1?new U(n):new B(n,a)},negate:function(){return new B(-this.n,this.d)},abs:function(){return new B(Math.abs(this.n),this.d)},findGCD:function(e){if(e instanceof B){var n=I.findGCD(this.n*e.d,e.n*this.d),a=this.d*e.d;return new B(n,a).collect()}else return e instanceof U?new B(I.findGCD(this.n,e.n),this.d):e.findGCD(this)},raiseToThe:function(e){if(e instanceof U){var n=e.eval()>0,a=e.abs().eval(),c=Math.pow(this.n,a),o=Math.pow(this.d,a);return n?new B(c,o).collect():new B(o,c).collect()}else return new ne(this.eval()).raiseToThe(e)},getDenominator:function(){return new U(this.d)},isSimple:function(){return!1},asRational:function(){return this}});function U(e){this.n=e}U.prototype=new B(0,1);f.extend(U.prototype,{func:U,args:function(){return[this.n]},print:function(){return this.n.toString()},tex:function(){return this.n.toString()},negate:function(){return new U(-this.n)},abs:function(){return new U(Math.abs(this.n))},isSimple:function(){return!0},findGCD:function(e){return e instanceof U?new U(I.findGCD(this.n,e.n)):e.findGCD(this)}});f.extend(U,{create:function(e){return new U(e).addHint("entered")}});function ne(e){this.n=e}ne.prototype=new I;f.extend(ne.prototype,{func:ne,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,n){return n&&n.preciseFloats?ne.toDecimalPlaces(this.n+e.eval(),Math.max(this.getDecimalPlaces(),e.getDecimalPlaces())):new ne(this.n+e.eval()).collect()},mul:function(e,n){return n&&n.preciseFloats?ne.toDecimalPlaces(this.n*e.eval(),this.getDecimalPlaces()+e.getDecimalPlaces()):new ne(this.n*e.eval()).collect()},collect:function(){return this},negate:function(){return new ne(-this.n)},abs:function(){return new ne(Math.abs(this.n))},findGCD:function(e){return e instanceof I?new ne(I.findGCD(this.eval(),e.eval())).collect():e.findGCD(this)},raiseToThe:function(e,n){return n&&n.preciseFloats&&e instanceof U&&e.n>1?ne.toDecimalPlaces(new z(this,e).eval(),this.getDecimalPlaces()*e.n):new ne(new z(this,e).eval()).collect()},asRational:function(){var e=this.n.toString().split(".");if(e.length===1)return new B(this.n,1);var n=Number(e.join("")),a=Math.pow(10,e[1].length);return new B(n,a).collect()},getDenominator:function(){return this.asRational().getDenominator()},isSimple:function(){return!0}});f.extend(ne,{create:function(e){return new ne(e).addHint("entered")},toDecimalPlaces:function(e,n){return new ne(+e.toFixed(Math.min(n,20))).collect()}});f.extend(I,{negativeOne:function(e){return e==="subtract"?I.Sub:e==="divide"?I.Div:I.Neg},findGCD:function(e,n){var a;if(e=Math.abs(e),n=Math.abs(n),e!==Math.floor(e)||n!==Math.floor(n))return 1;for(;n;)a=e%n,e=n,n=a;return e},min:function(){return f.min(f.toArray(arguments),function(e){return e.eval()})},max:function(){return f.max(f.toArray(arguments),function(e){return e.eval()})}});I.Neg=new U(-1).addHint("negate");I.Sub=new U(-1).addHint("subtract");I.Div=new U(-1).addHint("divide");I.Sqrt=new B(1,2).addHint("root");I.Zero=new U(0);I.One=new U(1);I.Ten=new U(10);ee.prototype.identity=I.Zero;A.prototype.identity=I.One;var yt=function(e,n){throw new Error(n.loc.first_column)};be.yy={Add:ee,Mul:A,Pow:z,Log:re,Trig:H,Eq:Ie,Abs:Oe,Func:_e,Const:pe,Var:Te,Int:U,Float:ne,parseError:yt,constants:["e"],symbolLexer:function(e){return f.contains(be.yy.constants,e)?"CONST":f.contains(be.yy.functions,e)?"FUNC":"VAR"}};const Fe=function(e,n){try{n&&n.functions?be.yy.functions=f.without(n.functions,"i"):be.yy.functions=[],n&&n.decimal_separator&&(e=e.split(n.decimal_separator).join("."));var a=be.parse(e).completeParse();return{parsed:!0,expr:a}}catch(c){return{parsed:!1,error:c.message}}};function ae(e){this.symbol=e}ae.prototype=new Ee;f.extend(ae.prototype,{func:ae,args:function(){return[this.symbol]},recurse:function(){return this},eval:function(e,n){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(xt).has(this.symbol))return this;if(f(Xe).has(this.symbol))return Xe[this.symbol].conversion;throw new Error("could not understand unit: "+this.symbol)}});var xt={m:new ae("m"),g:new ae("g"),s:new ae("s"),A:new ae("A"),K:new ae("K"),mol:new ae("mol"),cd:new ae("cd")},j={},T={},k=function(e,n){var a=e.split("|"),c=a[0].trim(),o=a[1].trim(),l=I.One;c!==""&&(l=Fe(c).expr);var p=o.split("/"),v=[l];return p[0]&&p[0].split(" ").filter(function(y){return y!==""}).map(function(y){v.push(new ae(y))}),p[1]&&p[1].split(" ").filter(function(y){return y!==""}).map(function(y){v.push(new z(new ae(y),I.Div))}),{conversion:new A(v),prefixes:n}},Xe={Da:k("1.6605388628 x 10^-24 | g",j),u:k("| Da",T),meter:k("| m",T),meters:k("| m",T),in:k("254 / 10000 | m",T),ft:k("3048 / 10000 | m",T),yd:k("9144 / 10000 | m",T),mi:k("1609344 / 1000 | m",T),ly:k("9.4607 x 10^15 | m",T),nmi:k("1852 | m",T),Å:k("10^-10 | m",T),pc:k("3.0857 x 10^16 | m",T),min:k("60 | s",T),hr:k("3600 | s",T),sec:k("| s",T),day:k("86400 | s",T),wk:k("604800 | s",T),fortnight:k("14 | day",T),shake:k("10^-8 | s",T),olympiad:k("126200000 | s",T),"°C":k("1 | K",T),"°F":k("5/9 | K",T),"°R":k("5/9 | K",T),e:k("1.6021765314 x 10^-19 | C",T),c:k("299792458 | m / s",T),kn:k("514/1000 | m / s",T),kt:k("| kn",T),knot:k("| kn",T),J:k("| N m",j),BTU:k("1060 | J",T),cal:k("4184 / 1000 | J",j),eV:k("1.602176514 x 10^-19 | J",j),erg:k("10^−7 | J",j),W:k("| J / s",j),"H-e":k("80 | W",T),N:k("1000 | g m / s s",j),lb:k("4448221615 / 1000000000 | N",T),dyn:k("10^-5 | N",T),Pa:k("1 | N / m m m",j),bar:k("10^5 | Pa",j),"㏔":k("1/1000 | bar",T),"㍴":k("| bar",T),atm:k("101325 | Pa",T),Torr:k("1/760 | atm",T),mmHg:k("| Torr",T),ha:k("10^4 | m m",T),b:k("10^−28 | m m",j),barn:k("| b",j),acre:k("4046.87 | m m",T),skilodge:k("10^-31 | m m",T),outhouse:k("10^-34 | m m",T),shed:k("10^-52 | m m",T),L:k("1/1000 | m m m",j),gal:k("3785/1000 | L",j),cup:k("1/16 | gal",T),qt:k("1/4 | gal",T),quart:k("| qt",T),p:k("1/8 | gal",T),pt:k("| p",T),pint:k("| p",T),"fl oz":k("1/8 | cup",T),"fl. oz.":k("1/8 | cup",T),tbsp:k("1/16 | cup",T),tsp:k("1/3 | tbsp",T),rev:k("2 pi | rad",T),deg:k("180 pi | rad",T),"°":k("| deg",T),arcminute:k("1/60 | deg",T),arcsec:k("1/3600 | deg",T),Hu:k("1000 | dB",j),dozen:k("12 |",T),mol:k("6.0221412927 x 10^23 |",j),"%":k("1/100 |",T),percent:k("| %",T),ppm:k("1/1000000 |",T),V:k("1000 | g m m / s s C",j),C:k("| A s",j),ampere:k("| A",T),Ω:k("| V / A",j),ohm:k("| Ω",T),F:k("| C / V",j),H:k("| ohm s",j),T:k("1000 | g / C s",j),Wb:k("1000 | g m m / C s",j),lm:k("pi x 10^4 | cd / m m",T),lx:k("| lm / m m",T),nit:k("| cd / m m",T),sb:k("10^4 | cd / m m",T),stilb:k("1 | sb",T),apostilb:k("1 / pi x 10^(-4) | sb",T),blondel:k("| apostilb",T),asb:k("| apostilb",T),la:k("| lm",T),Lb:k("| lm",T),sk:k("10^-7 | lm",T),skot:k("| sk",T),bril:k("10^-11 | lm",T),Hz:k("| / s",j)};I.Zero;I.One;const Qe=function(e,n,a){a={...{form:!1,simplify:!1},...a};const o=e.sameVars(n);if(!o.equal){let l;return o.equalIgnoringCase?l="Check your variables; one or more are using the wrong case (upper or lower).":l="Check your variables; you may have used the wrong letter for one or more of them.",{equal:!1,wrongVariableCase:o.equalIgnoringCase,wrongVariableNames:!o.equalIgnoringCase,message:l}}return e.compare(n)?a.form&&!e.sameForm(n)?{equal:!1,message:"Your answer is not in the correct form."}:a.simplify&&!e.isSimplified()?{equal:!1,message:"Your answer is not fully expanded and simplified."}:{equal:!0,message:null}:{equal:!1,message:null}},wt="@khanacademy/kmath",_t="__lib_version__";rt(wt,_t);var Ge={exports:{}};(function(e,n){(function(){var a=this,c=a._,o={},l=Array.prototype,p=Object.prototype,v=Function.prototype,y=l.push,w=l.slice,g=l.concat,d=p.toString,x=p.hasOwnProperty,m=l.forEach,O=l.map,E=l.reduce,D=l.reduceRight,P=l.filter,Z=l.every,X=l.some,ue=l.indexOf,de=l.lastIndexOf,J=Array.isArray,Q=Object.keys,ie=v.bind,i=function(t){if(t instanceof i)return t;if(!(this instanceof i))return new i(t);this._wrapped=t};e.exports&&(n=e.exports=i),n._=i,i.VERSION="1.4.4";var L=i.each=i.forEach=function(t,r,s){if(t!=null){if(m&&t.forEach===m)t.forEach(r,s);else if(t.length===+t.length){for(var u=0,h=t.length;u2;if(t==null&&(t=[]),E&&t.reduce===E)return u&&(r=i.bind(r,u)),h?t.reduce(r,s):t.reduce(r);if(L(t,function(M,_,F){h?s=r.call(u,s,M,_,F):(s=M,h=!0)}),!h)throw new TypeError(ge);return s},i.reduceRight=i.foldr=function(t,r,s,u){var h=arguments.length>2;if(t==null&&(t=[]),D&&t.reduceRight===D)return u&&(r=i.bind(r,u)),h?t.reduceRight(r,s):t.reduceRight(r);var M=t.length;if(M!==+M){var _=i.keys(t);M=_.length}if(L(t,function(F,S,W){S=_?_[--M]:--M,h?s=r.call(u,s,t[S],S,W):(s=t[S],h=!0)}),!h)throw new TypeError(ge);return s},i.find=i.detect=function(t,r,s){var u;return K(t,function(h,M,_){if(r.call(s,h,M,_))return u=h,!0}),u},i.filter=i.select=function(t,r,s){var u=[];return t==null?u:P&&t.filter===P?t.filter(r,s):(L(t,function(h,M,_){r.call(s,h,M,_)&&(u[u.length]=h)}),u)},i.reject=function(t,r,s){return i.filter(t,function(u,h,M){return!r.call(s,u,h,M)},s)},i.every=i.all=function(t,r,s){r||(r=i.identity);var u=!0;return t==null?u:Z&&t.every===Z?t.every(r,s):(L(t,function(h,M,_){if(!(u=u&&r.call(s,h,M,_)))return o}),!!u)};var K=i.some=i.any=function(t,r,s){r||(r=i.identity);var u=!1;return t==null?u:X&&t.some===X?t.some(r,s):(L(t,function(h,M,_){if(u||(u=r.call(s,h,M,_)))return o}),!!u)};i.contains=i.include=function(t,r){return t==null?!1:ue&&t.indexOf===ue?t.indexOf(r)!=-1:K(t,function(s){return s===r})},i.invoke=function(t,r){var s=w.call(arguments,2),u=i.isFunction(r);return i.map(t,function(h){return(u?r:h[r]).apply(h,s)})},i.pluck=function(t,r){return i.map(t,function(s){return s[r]})},i.where=function(t,r,s){return i.isEmpty(r)?s?null:[]:i[s?"find":"filter"](t,function(u){for(var h in r)if(r[h]!==u[h])return!1;return!0})},i.findWhere=function(t,r){return i.where(t,r,!0)},i.max=function(t,r,s){if(!r&&i.isArray(t)&&t[0]===+t[0]&&t.length<65535)return Math.max.apply(Math,t);if(!r&&i.isEmpty(t))return-1/0;var u={computed:-1/0,value:-1/0};return L(t,function(h,M,_){var F=r?r.call(s,h,M,_):h;F>=u.computed&&(u={value:h,computed:F})}),u.value},i.min=function(t,r,s){if(!r&&i.isArray(t)&&t[0]===+t[0]&&t.length<65535)return Math.min.apply(Math,t);if(!r&&i.isEmpty(t))return 1/0;var u={computed:1/0,value:1/0};return L(t,function(h,M,_){var F=r?r.call(s,h,M,_):h;FF||_===void 0)return 1;if(_>>1;s.call(u,t[F])=0})})},i.difference=function(t){var r=g.apply(l,w.call(arguments,1));return i.filter(t,function(s){return!i.contains(r,s)})},i.zip=function(){for(var t=w.call(arguments),r=i.max(i.pluck(t,"length")),s=new Array(r),u=0;u=0;s--)r=[t[s].apply(this,r)];return r[0]}},i.after=function(t,r){return t<=0?r():function(){if(--t<1)return r.apply(this,arguments)}},i.keys=Q||function(t){if(t!==Object(t))throw new TypeError("Invalid object");var r=[];for(var s in t)i.has(t,s)&&(r[r.length]=s);return r},i.values=function(t){var r=[];for(var s in t)i.has(t,s)&&r.push(t[s]);return r},i.pairs=function(t){var r=[];for(var s in t)i.has(t,s)&&r.push([s,t[s]]);return r},i.invert=function(t){var r={};for(var s in t)i.has(t,s)&&(r[t[s]]=s);return r},i.functions=i.methods=function(t){var r=[];for(var s in t)i.isFunction(t[s])&&r.push(s);return r.sort()},i.extend=function(t){return L(w.call(arguments,1),function(r){if(r)for(var s in r)t[s]=r[s]}),t},i.pick=function(t){var r={},s=g.apply(l,w.call(arguments,1));return L(s,function(u){u in t&&(r[u]=t[u])}),r},i.omit=function(t){var r={},s=g.apply(l,w.call(arguments,1));for(var u in t)i.contains(s,u)||(r[u]=t[u]);return r},i.defaults=function(t){return L(w.call(arguments,1),function(r){if(r)for(var s in r)t[s]==null&&(t[s]=r[s])}),t},i.clone=function(t){return i.isObject(t)?i.isArray(t)?t.slice():i.extend({},t):t},i.tap=function(t,r){return r(t),t};var b=function(t,r,s,u){if(t===r)return t!==0||1/t==1/r;if(t==null||r==null)return t===r;t instanceof i&&(t=t._wrapped),r instanceof i&&(r=r._wrapped);var h=d.call(t);if(h!=d.call(r))return!1;switch(h){case"[object String]":return t==String(r);case"[object Number]":return t!=+t?r!=+r:t==0?1/t==1/r:t==+r;case"[object Date]":case"[object Boolean]":return+t==+r;case"[object RegExp]":return t.source==r.source&&t.global==r.global&&t.multiline==r.multiline&&t.ignoreCase==r.ignoreCase}if(typeof t!="object"||typeof r!="object")return!1;for(var M=s.length;M--;)if(s[M]==t)return u[M]==r;s.push(t),u.push(r);var _=0,F=!0;if(h=="[object Array]"){if(_=t.length,F=_==r.length,F)for(;_--&&(F=b(t[_],r[_],s,u)););}else{var S=t.constructor,W=r.constructor;if(S!==W&&!(i.isFunction(S)&&S instanceof S&&i.isFunction(W)&&W instanceof W))return!1;for(var $ in t)if(i.has(t,$)&&(_++,!(F=i.has(r,$)&&b(t[$],r[$],s,u))))break;if(F){for($ in r)if(i.has(r,$)&&!_--)break;F=!_}}return s.pop(),u.pop(),F};i.isEqual=function(t,r){return b(t,r,[],[])},i.isEmpty=function(t){if(t==null)return!0;if(i.isArray(t)||i.isString(t))return t.length===0;for(var r in t)if(i.has(t,r))return!1;return!0},i.isElement=function(t){return!!(t&&t.nodeType===1)},i.isArray=J||function(t){return d.call(t)=="[object Array]"},i.isObject=function(t){return t===Object(t)},L(["Arguments","Function","String","Number","Date","RegExp"],function(t){i["is"+t]=function(r){return d.call(r)=="[object "+t+"]"}}),i.isArguments(arguments)||(i.isArguments=function(t){return!!(t&&i.has(t,"callee"))}),typeof/./!="function"&&(i.isFunction=function(t){return typeof t=="function"}),i.isFinite=function(t){return isFinite(t)&&!isNaN(parseFloat(t))},i.isNaN=function(t){return i.isNumber(t)&&t!=+t},i.isBoolean=function(t){return t===!0||t===!1||d.call(t)=="[object Boolean]"},i.isNull=function(t){return t===null},i.isUndefined=function(t){return t===void 0},i.has=function(t,r){return x.call(t,r)},i.noConflict=function(){return a._=c,this},i.identity=function(t){return t},i.times=function(t,r,s){for(var u=Array(t),h=0;h":">",'"':""","'":"'","/":"/"}};R.unescape=i.invert(R.escape);var G={escape:new RegExp("["+i.keys(R.escape).join("")+"]","g"),unescape:new RegExp("("+i.keys(R.unescape).join("|")+")","g")};i.each(["escape","unescape"],function(t){i[t]=function(r){return r==null?"":(""+r).replace(G[t],function(s){return R[t][s]})}}),i.result=function(t,r){if(t==null)return null;var s=t[r];return i.isFunction(s)?s.call(t):s},i.mixin=function(t){L(i.functions(t),function(r){var s=i[r]=t[r];i.prototype[r]=function(){var u=[this._wrapped];return y.apply(u,arguments),me.call(this,s.apply(i,u))}})};var q=0;i.uniqueId=function(t){var r=++q+"";return t?t+r:r},i.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var ce=/(.)^/,C={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},le=/\\|'|\r|\n|\t|\u2028|\u2029/g;i.template=function(t,r,s){var u;s=i.defaults({},s,i.templateSettings);var h=new RegExp([(s.escape||ce).source,(s.interpolate||ce).source,(s.evaluate||ce).source].join("|")+"|$","g"),M=0,_="__p+='";t.replace(h,function(S,W,$,ye,he){return _+=t.slice(M,he).replace(le,function(Me){return"\\"+C[Me]}),W&&(_+=`'+ ((__t=(`+W+`))==null?'':_.escape(__t))+ '`),$&&(_+=`'+ ((__t=(`+$+`))==null?'':__t)+ '`),ye&&(_+=`'; `+ye+` -__p+='`),M=he+R.length,R}),_+=`'; +__p+='`),M=he+S.length,S}),_+=`'; `,s.variable||(_=`with(obj||{}){ `+_+`} `),_=`var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');}; `+_+`return __p; -`;try{u=new Function(s.variable||"obj","_",_)}catch(R){throw R.source=_,R}if(r)return u(r,i);var F=function(R){return u.call(this,R,i)};return F.source="function("+(s.variable||"obj")+`){ -`+_+"}",F},i.chain=function(t){return i(t).chain()};var me=function(t){return this._chain?i(t).chain():t};i.mixin(i),L(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var r=l[t];i.prototype[t]=function(){var s=this._wrapped;return r.apply(s,arguments),(t=="shift"||t=="splice")&&s.length===0&&delete s[0],me.call(this,s)}}),L(["concat","join","slice"],function(t){var r=l[t];i.prototype[t]=function(){return me.call(this,r.apply(this._wrapped,arguments))}}),i.extend(i.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(it)})(Ge,Ge.exports);var Mt=Ge.exports;const je=st(Mt),It=1e-9,Et=Math.pow(2,-42);function hn(e){return je.isNumber(e)&&!je.isNaN(e)}function Se(e,n,a){return e==null||n==null?e===n:e===n?!0:(a==null&&(a=It),Math.abs(e-n)2){const c=[].slice.call(arguments,1);return se.getGCD(e,se.getGCD(...c))}let a;for(e=Math.abs(e),n=Math.abs(n);n;)a=e%n,e=n,n=a;return e},getLCM:function(e,n){if(arguments.length>2){const a=[].slice.call(arguments,1);return se.getLCM(e,se.getLCM(...a))}return Math.abs(e*n)/se.getGCD(e,n)},primes:[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97],isPrime:function(e){if(e<=1)return!1;if(e<101)return!!fe.grep(se.primes,function(n,a){return Math.abs(n-e)<=.5}).length;if(e<=1||e>2&&e%2===0)return!1;for(let n=3,a=Math.sqrt(e);n<=a;n+=2)if(e%n===0)return!1;return!0},getPrimeFactorization:function(e){if(e===1)return[];if(se.isPrime(e))return[e];const n=Math.sqrt(e);for(let a=2;a<=n;a++)if(e%a===0)return fe.merge(se.getPrimeFactorization(a),se.getPrimeFactorization(e/a))},roundToNearest:function(e,n){return Math.round(n/e)*e},roundTo:function(e,n){const a=Math.pow(10,e).toFixed(5);return Math.round((n*a).toFixed(5))/a},toFixedApprox:function(e,n){const a=e.toFixed(n);return Se(+a,e)?a:"\\approx "+a},roundToApprox:function(e,n){const a=se.roundTo(n,e);return Se(a,e)?String(a):se.toFixedApprox(e,n)},toFraction:function(e,n){if(n==null&&(n=Math.pow(2,-46)),e<0||e>1){let y=e%1;y+=y<0?1:0;const w=se.toFraction(y,n);return w[0]+=Math.round(e-y)*w[1],w}if(Math.abs(Math.round(Number(e))-e)<=n)return[Math.round(e),1];let a=0,c=1,o=1,l=1,p=1,v=2;for(;;){if(Math.abs(Number(p/v)-e)<=n)return[p,v];p/vparseFloat(n[2])?"improper":"proper":e.replace(/[,. ]/g,"").match(/^\d+$/)?"decimal":e.match(/(pi?|\u03c0|t(?:au)?|\u03c4|pau)/)?"pi":null},toNumericString:function(e,n){if(e==null)return"";if(e===0)return"0";if(n==="percent")return e*100+"%";if(n==="pi"){const a=et(e/Math.PI),c=Math.abs(a[0]),o=a[1];if(kt(c))return(e<0?"-":"")+(c===1?"":c)+"π"+(o===1?"":"/"+o)}if(te(["proper","improper","mixed","fraction"]).contains(n)){const a=et(e),c=Math.abs(a[0]),o=a[1],l=e<0?"-":"";if(o===1)return l+c;if(n==="mixed"){const p=c%o,v=(c-p)/o;return l+(v?v+" ":"")+p+"/"+o}return l+c+"/"+o}return String(e)}};function yn(e){return e.reduce(At,0)}function At(e,n){return e+n}const Ot=Math.pow(2,-42),Ae={predicate:{defaultForms:"integer, proper, improper, mixed, decimal",createValidatorFunctional:function(e,n,a){n=te.extend({simplify:"required",ratio:!1,forms:Ae.predicate.defaultForms},n);let c;te.isArray(n.forms)?c=n.forms:c=n.forms.split(/\s*,\s*/),n.inexact===void 0&&(n.maxError=0),n.maxError=+n.maxError+Ot,te.contains(c,"percent")&&(c=te.without(c,"percent"),c.push("percent"));const o=function(p){p=p.replace(/\u2212/,"-").replace(/([+-])\s+/g,"$1").replace(/(^\s*)|(\s*$)/gi,"");const v=p.match(/^([+-]?\d+)\s*\/\s*([+-]?\d+)$/),y=p.match(/^([+-]?)\\frac\{([+-]?\d+)\}\{([+-]?\d+)\}$/),w=parseInt(p,10);if(v||y){let g,d,x=!0;return v?(g=parseFloat(v[1]),d=parseFloat(v[2])):(g=parseFloat(y[2]),y[1]==="-"&&(g<0&&(x=!1),g=-g),d=parseFloat(y[3])),x=x&&d>0&&(n.ratio||d!==1)&&se.getGCD(g,d)===1,[{value:g/d,exact:x}]}return!isNaN(w)&&""+w===p?[{value:w,exact:!0}]:[]},l={integer:function(p){const v=l.decimal(p),y=l.decimal(p,1);return v[0].value!=null&&v[0].value===y[0].value||v[1].value!=null&&v[1].value===y[1].value?v:[]},proper:function(p){return fe.map(o(p),function(v){return Math.abs(v.value)<1?[v]:[]})},improper:function(p){return fe.map(o(p),function(v){return Math.abs(v.value)>=1?[v]:[]})},pi:function(p){let v,y=[];if(p=p.replace(/\u2212/,"-"),v=p.match(/^([+-]?)\s*(\\?pi|p|\u03c0|\\?tau|t|\u03c4|pau)$/i))y=[{value:parseFloat(v[1]+"1"),exact:!0}];else if(v=p.match(/^([+-]?\s*\d+\s*(?:\/\s*[+-]?\s*\d+)?)\s*\*?\s*(\\?pi|p|\u03c0|\\?tau|t|\u03c4|pau)$/i))y=o(v[1]);else if(v=p.match(/^([+-]?)\s*(\d+)\s*([+-]?\d+)\s*\/\s*([+-]?\d+)\s*\*?\s*(\\?pi|p|\u03c0|\\?tau|t|\u03c4|pau)$/i)){const g=parseFloat(v[1]+"1"),d=parseFloat(v[2]),x=parseFloat(v[3]),m=parseFloat(v[4]),O=x{n.onload=()=>{a([n.naturalWidth,n.naturalHeight])},n.onerror=c,n.src=ze(e)})}let tt=!1;const lt=function(e,n,a){return Array.isArray(e)?te.map(e,function(c){return lt(c,n)}):n.call(a,e)};function Ft(e,n){return e==null||n==null?e==null==(n==null):e.length===n.length&&e.every((a,c)=>n[c]===a)}const ft=/^\[\[\u2603 (([a-z-]+) ([0-9]+))\]\]/,Tt=/^([a-z-]+) ([0-9]+)$/,St=new RegExp(ft.source+"$"),Rt="☃",Pt={type:"points",earned:0,total:0,message:null},He=function(e){let n=e;return function(){let a=n;return a=a+2127912214+(a<<12)&4294967295,a=(a^3345072700^a>>>19)&4294967295,a=a+374761393+(a<<5)&4294967295,a=(a+3550635116^a<<9)&4294967295,a=a+4251993797+(a<<3)&4294967295,a=(a^3042594569^a>>>16)&4294967295,(n=a&268435455)/268435456}};function Dt(e,n,a=!1){const c=te.clone(e);if(!c.length||te.all(c,function(l){return te.isEqual(l,c[0])}))return c;let o;typeof n=="function"?o=n:o=He(n);do for(let l=c.length;l>0;l--){const p=Math.floor(o()*l),v=c[p];c[p]=c[l-1],c[l-1]=v}while(a&&te.isEqual(e,c));return c}const qt="x".split(/(.)/g).length?function(e,n){return e.split(n)}:function(e,n){const a=[];let c=n.lastIndex=0,o;for(;o=n.exec(e);){const l=o;a.push(e.slice(c,l.index)),a.push(...l.slice(1)),c=l.index+l[0].length}return a.push(e.slice(c)),a};function Vt(e,n){let a;if(e.type==="points"&&n.type==="points")return e.message&&n.message&&e.message!==n.message?a=null:a=e.message||n.message,{type:"points",earned:e.earned+n.earned,total:e.total+n.total,message:a};if(e.type==="points"&&n.type==="invalid")return n;if(e.type==="invalid"&&n.type==="points")return e;if(e.type==="invalid"&&n.type==="invalid")return e.message&&n.message&&e.message!==n.message?a=null:a=e.message||n.message,{type:"invalid",message:a};throw new qe("PerseusScore with unknown type encountered",De.InvalidInput,{metadata:{scoreA:JSON.stringify(e),scoreB:JSON.stringify(n)}})}function Ct(e){return e.type==="points"&&e.earned>=e.total}function Gt(e,n,a){if(e.type==="points")return{empty:!1,correct:Ct(e),message:e.message,guess:n,state:a};if(e.type==="invalid")return{empty:!0,correct:!1,message:e.message,suppressAlmostThere:e.suppressAlmostThere,guess:n,state:a};throw new qe("Invalid score type: "+e.type,De.InvalidInput,{metadata:{score:JSON.stringify(e),guess:JSON.stringify(n),state:JSON.stringify(a)}})}function Lt(e,n){let a;return Ae.predicate.createValidatorFunctional(function(o){return a=o,!0},{simplify:"optional",inexact:!0,forms:"integer, proper, improper, pi, log, mixed, decimal"},n)(e),a}function zt(e){return te(e).times(function(){return""})}function Ut(e,n,a,c){const o=Be(n,a),p=e*o>30;return{scale:o,tickStep:e/c,unityLabel:p}}function Ht(e,n,a){return te(2).times(function(c){const o=Be(e[c],a);return ht(n[c],o)})}function Bt(e){return[e[0]/2,e[1]/2]}function ht(e,n){const a=e*n,c=e,o=Math.pow(10,Math.floor(Math.log(c)/Math.LN10)),l=Math.floor(c/o);if(a<25)return e;if(a<50)return l===5?e:e/2;if(l===1)return e/2;if(l===2)return e/4;if(l===5)return e/5}function Be(e,n){const a=e[1]-e[0];return n/a}function Wt(e,n){const a=e[1]-e[0];let c;15100||a<5?c=10:c=16;const o=n/500,l=c*o;return We(a,l)}function We(e,n){let a=Math.pow(10,Math.floor(Math.log(e/n)/Math.LN10));const c=n/e*a;return c<=.15?a*=10:c<=.35?a*=5:c<=.75&&(a*=2),a}const nt=(e,n)=>{const a=n[1]-n[0],c=a/e;return c<=10?e:c<=20?e*2:We(a,10)};function $t(e,n){return[nt(e[0],n[0]),nt(e[1],n[1])]}function Le(e,n){return typeof e=="number"&&typeof n=="number"?Math.abs(e-n)<1e-9:e===n}function Pe(e,n){if(Array.isArray(e)&&Array.isArray(n)){if(e.length!==n.length)return!1;for(let a=0;a{try{const e=Object.defineProperty({},"passive",{get:function(){tt=!0}});window.addEventListener("testPassive",null,e),window.removeEventListener("testPassive",null,e)}catch{}return tt};function tn(e){e.stopPropagation()}function nn(e,n){const a=new Image;a.onload=function(){var c;a.width===0&&a.height===0?((c=document.body)==null||c.appendChild(a),te.defer(function(){var o;n(a.clientWidth,a.clientHeight),(o=document.body)==null||o.removeChild(a)})):n(a.width,a.height)},a.src=ze(e)}function rn(e){const n=e.value,a=e.selectionStart-1,c=Math.max(n.lastIndexOf(` -`,a),n.lastIndexOf(" ",a))+1;return{string:n.substring(c,a+1),pos:{start:c,end:a}}}function sn(e,n){e.selectionStart=n,e.selectionEnd=n}const an={getWordBeforeCursor:rn,moveCursor:sn},un=e=>e.startsWith("$")&&e.endsWith("$")?e.slice(1,-1):e,cn=He(new Date().getTime()&4294967295);function pt(e){return Array.isArray(e)?e.map(pt):e}const xn={inputPathsEqual:Ft,nestedMap:lt,rWidgetRule:ft,rTypeFromWidgetId:Tt,rWidgetParts:St,snowman:Rt,noScore:Pt,seededRNG:He,shuffle:Dt,split:qt,combineScores:Vt,keScoreFromPerseusScore:Gt,firstNumericalParse:Lt,stringArrayOfSize:zt,gridDimensionConfig:Ut,getGridStep:Ht,snapStepFromGridStep:Bt,scaleFromExtent:Be,tickStepFromExtent:Wt,gridStepFromTickStep:ht,tickStepFromNumTicks:We,constrainedTickStepsFromTickSteps:$t,eq:Le,deepEq:Pe,parseQueryString:Jt,updateQueryString:Zt,strongEncodeURIComponent:Kt,widgetShouldHighlight:Yt,scoreIsEmpty:Xt,touchHandlers:we,resetTouchHandlers:Qt,extractPointerLocation:jt,supportsPassiveEvents:en,captureScratchpadTouchStart:tn,getImageSize:nn,getImageSizeModern:Nt,getRealImageUrl:ze,isLabeledSVG:ct,getBaseUrl:Ue,getSvgUrl:ot,getDataUrl:bt,textarea:an,unescapeMathMode:un,random:cn,deepClone:pt};export{It as D,De as E,se as K,qe as P,xn as U,Ct as a,hn as b,vn as c,mn as d,Se as e,gn as f,Ae as g,pn as h,kt as i,Fe as p,dn as r,yn as s,et as t}; +`;try{u=new Function(s.variable||"obj","_",_)}catch(S){throw S.source=_,S}if(r)return u(r,i);var F=function(S){return u.call(this,S,i)};return F.source="function("+(s.variable||"obj")+`){ +`+_+"}",F},i.chain=function(t){return i(t).chain()};var me=function(t){return this._chain?i(t).chain():t};i.mixin(i),L(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var r=l[t];i.prototype[t]=function(){var s=this._wrapped;return r.apply(s,arguments),(t=="shift"||t=="splice")&&s.length===0&&delete s[0],me.call(this,s)}}),L(["concat","join","slice"],function(t){var r=l[t];i.prototype[t]=function(){return me.call(this,r.apply(this._wrapped,arguments))}}),i.extend(i.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(it)})(Ge,Ge.exports);var Mt=Ge.exports;const je=st(Mt),It=1e-9,Et=Math.pow(2,-42);function fn(e){return je.isNumber(e)&&!je.isNaN(e)}function Re(e,n,a){return e==null||n==null?e===n:e===n?!0:(a==null&&(a=It),Math.abs(e-n)2){const c=[].slice.call(arguments,1);return se.getGCD(e,se.getGCD(...c))}let a;for(e=Math.abs(e),n=Math.abs(n);n;)a=e%n,e=n,n=a;return e},getLCM:function(e,n){if(arguments.length>2){const a=[].slice.call(arguments,1);return se.getLCM(e,se.getLCM(...a))}return Math.abs(e*n)/se.getGCD(e,n)},primes:[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97],isPrime:function(e){if(e<=1)return!1;if(e<101)return!!fe.grep(se.primes,function(n,a){return Math.abs(n-e)<=.5}).length;if(e<=1||e>2&&e%2===0)return!1;for(let n=3,a=Math.sqrt(e);n<=a;n+=2)if(e%n===0)return!1;return!0},getPrimeFactorization:function(e){if(e===1)return[];if(se.isPrime(e))return[e];const n=Math.sqrt(e);for(let a=2;a<=n;a++)if(e%a===0)return fe.merge(se.getPrimeFactorization(a),se.getPrimeFactorization(e/a))},roundToNearest:function(e,n){return Math.round(n/e)*e},roundTo:function(e,n){const a=Math.pow(10,e).toFixed(5);return Math.round((n*a).toFixed(5))/a},toFixedApprox:function(e,n){const a=e.toFixed(n);return Re(+a,e)?a:"\\approx "+a},roundToApprox:function(e,n){const a=se.roundTo(n,e);return Re(a,e)?String(a):se.toFixedApprox(e,n)},toFraction:function(e,n){if(n==null&&(n=Math.pow(2,-46)),e<0||e>1){let y=e%1;y+=y<0?1:0;const w=se.toFraction(y,n);return w[0]+=Math.round(e-y)*w[1],w}if(Math.abs(Math.round(Number(e))-e)<=n)return[Math.round(e),1];let a=0,c=1,o=1,l=1,p=1,v=2;for(;;){if(Math.abs(Number(p/v)-e)<=n)return[p,v];p/vparseFloat(n[2])?"improper":"proper":e.replace(/[,. ]/g,"").match(/^\d+$/)?"decimal":e.match(/(pi?|\u03c0|t(?:au)?|\u03c4|pau)/)?"pi":null},toNumericString:function(e,n){if(e==null)return"";if(e===0)return"0";if(n==="percent")return e*100+"%";if(n==="pi"){const a=et(e/Math.PI),c=Math.abs(a[0]),o=a[1];if(kt(c))return(e<0?"-":"")+(c===1?"":c)+"π"+(o===1?"":"/"+o)}if(te(["proper","improper","mixed","fraction"]).contains(n)){const a=et(e),c=Math.abs(a[0]),o=a[1],l=e<0?"-":"";if(o===1)return l+c;if(n==="mixed"){const p=c%o,v=(c-p)/o;return l+(v?v+" ":"")+p+"/"+o}return l+c+"/"+o}return String(e)}};function mn(e){return e.reduce(At,0)}function At(e,n){return e+n}const Ot=Math.pow(2,-42),Ae={predicate:{defaultForms:"integer, proper, improper, mixed, decimal",createValidatorFunctional:function(e,n,a){n=te.extend({simplify:"required",ratio:!1,forms:Ae.predicate.defaultForms},n);let c;te.isArray(n.forms)?c=n.forms:c=n.forms.split(/\s*,\s*/),n.inexact===void 0&&(n.maxError=0),n.maxError=+n.maxError+Ot,te.contains(c,"percent")&&(c=te.without(c,"percent"),c.push("percent"));const o=function(p){p=p.replace(/\u2212/,"-").replace(/([+-])\s+/g,"$1").replace(/(^\s*)|(\s*$)/gi,"");const v=p.match(/^([+-]?\d+)\s*\/\s*([+-]?\d+)$/),y=p.match(/^([+-]?)\\frac\{([+-]?\d+)\}\{([+-]?\d+)\}$/),w=parseInt(p,10);if(v||y){let g,d,x=!0;return v?(g=parseFloat(v[1]),d=parseFloat(v[2])):(g=parseFloat(y[2]),y[1]==="-"&&(g<0&&(x=!1),g=-g),d=parseFloat(y[3])),x=x&&d>0&&(n.ratio||d!==1)&&se.getGCD(g,d)===1,[{value:g/d,exact:x}]}return!isNaN(w)&&""+w===p?[{value:w,exact:!0}]:[]},l={integer:function(p){const v=l.decimal(p),y=l.decimal(p,1);return v[0].value!=null&&v[0].value===y[0].value||v[1].value!=null&&v[1].value===y[1].value?v:[]},proper:function(p){return fe.map(o(p),function(v){return Math.abs(v.value)<1?[v]:[]})},improper:function(p){return fe.map(o(p),function(v){return Math.abs(v.value)>=1?[v]:[]})},pi:function(p){let v,y=[];if(p=p.replace(/\u2212/,"-"),v=p.match(/^([+-]?)\s*(\\?pi|p|\u03c0|\\?tau|t|\u03c4|pau)$/i))y=[{value:parseFloat(v[1]+"1"),exact:!0}];else if(v=p.match(/^([+-]?\s*\d+\s*(?:\/\s*[+-]?\s*\d+)?)\s*\*?\s*(\\?pi|p|\u03c0|\\?tau|t|\u03c4|pau)$/i))y=o(v[1]);else if(v=p.match(/^([+-]?)\s*(\d+)\s*([+-]?\d+)\s*\/\s*([+-]?\d+)\s*\*?\s*(\\?pi|p|\u03c0|\\?tau|t|\u03c4|pau)$/i)){const g=parseFloat(v[1]+"1"),d=parseFloat(v[2]),x=parseFloat(v[3]),m=parseFloat(v[4]),O=x{n.onload=()=>{a([n.naturalWidth,n.naturalHeight])},n.onerror=c,n.src=ze(e)})}let tt=!1;const lt=function(e,n,a){return Array.isArray(e)?te.map(e,function(c){return lt(c,n)}):n.call(a,e)};function Ft(e,n){return e==null||n==null?e==null==(n==null):e.length===n.length&&e.every((a,c)=>n[c]===a)}const ft=/^\[\[\u2603 (([a-z-]+) ([0-9]+))\]\]/,Tt=/^([a-z-]+) ([0-9]+)$/,Rt=new RegExp(ft.source+"$"),St="☃",Pt={type:"points",earned:0,total:0,message:null},He=function(e){let n=e;return function(){let a=n;return a=a+2127912214+(a<<12)&4294967295,a=(a^3345072700^a>>>19)&4294967295,a=a+374761393+(a<<5)&4294967295,a=(a+3550635116^a<<9)&4294967295,a=a+4251993797+(a<<3)&4294967295,a=(a^3042594569^a>>>16)&4294967295,(n=a&268435455)/268435456}};function Dt(e,n,a=!1){const c=te.clone(e);if(!c.length||te.all(c,function(l){return te.isEqual(l,c[0])}))return c;let o;typeof n=="function"?o=n:o=He(n);do for(let l=c.length;l>0;l--){const p=Math.floor(o()*l),v=c[p];c[p]=c[l-1],c[l-1]=v}while(a&&te.isEqual(e,c));return c}const qt="x".split(/(.)/g).length?function(e,n){return e.split(n)}:function(e,n){const a=[];let c=n.lastIndex=0,o;for(;o=n.exec(e);){const l=o;a.push(e.slice(c,l.index)),a.push(...l.slice(1)),c=l.index+l[0].length}return a.push(e.slice(c)),a};function Vt(e,n){let a;if(e.type==="points"&&n.type==="points")return e.message&&n.message&&e.message!==n.message?a=null:a=e.message||n.message,{type:"points",earned:e.earned+n.earned,total:e.total+n.total,message:a};if(e.type==="points"&&n.type==="invalid")return n;if(e.type==="invalid"&&n.type==="points")return e;if(e.type==="invalid"&&n.type==="invalid")return e.message&&n.message&&e.message!==n.message?a=null:a=e.message||n.message,{type:"invalid",message:a};throw new qe("PerseusScore with unknown type encountered",De.InvalidInput,{metadata:{scoreA:JSON.stringify(e),scoreB:JSON.stringify(n)}})}function Ct(e){return e.type==="points"&&e.earned>=e.total}function Gt(e,n,a){if(e.type==="points")return{empty:!1,correct:Ct(e),message:e.message,guess:n,state:a};if(e.type==="invalid")return{empty:!0,correct:!1,message:e.message,suppressAlmostThere:e.suppressAlmostThere,guess:n,state:a};throw new qe("Invalid score type: "+e.type,De.InvalidInput,{metadata:{score:JSON.stringify(e),guess:JSON.stringify(n),state:JSON.stringify(a)}})}function Lt(e,n){let a;return Ae.predicate.createValidatorFunctional(function(o){return a=o,!0},{simplify:"optional",inexact:!0,forms:"integer, proper, improper, pi, log, mixed, decimal"},n)(e),a}function zt(e){return te(e).times(function(){return""})}function Ut(e,n,a,c){const o=Be(n,a),p=e*o>30;return{scale:o,tickStep:e/c,unityLabel:p}}function Ht(e,n,a){return te(2).times(function(c){const o=Be(e[c],a);return ht(n[c],o)})}function Bt(e){return[e[0]/2,e[1]/2]}function ht(e,n){const a=e*n,c=e,o=Math.pow(10,Math.floor(Math.log(c)/Math.LN10)),l=Math.floor(c/o);if(a<25)return e;if(a<50)return l===5?e:e/2;if(l===1)return e/2;if(l===2)return e/4;if(l===5)return e/5}function Be(e,n){const a=e[1]-e[0];return n/a}function Wt(e,n){const a=e[1]-e[0];let c;15100||a<5?c=10:c=16;const o=n/500,l=c*o;return We(a,l)}function We(e,n){let a=Math.pow(10,Math.floor(Math.log(e/n)/Math.LN10));const c=n/e*a;return c<=.15?a*=10:c<=.35?a*=5:c<=.75&&(a*=2),a}const nt=(e,n)=>{const a=n[1]-n[0],c=a/e;return c<=10?e:c<=20?e*2:We(a,10)};function $t(e,n){return[nt(e[0],n[0]),nt(e[1],n[1])]}function Le(e,n){return typeof e=="number"&&typeof n=="number"?Math.abs(e-n)<1e-9:e===n}function Pe(e,n){if(Array.isArray(e)&&Array.isArray(n)){if(e.length!==n.length)return!1;for(let a=0;a{try{const e=Object.defineProperty({},"passive",{get:function(){tt=!0}});window.addEventListener("testPassive",null,e),window.removeEventListener("testPassive",null,e)}catch{}return tt};function en(e){e.stopPropagation()}function tn(e,n){const a=new Image;a.onload=function(){var c;a.width===0&&a.height===0?((c=document.body)==null||c.appendChild(a),te.defer(function(){var o;n(a.clientWidth,a.clientHeight),(o=document.body)==null||o.removeChild(a)})):n(a.width,a.height)},a.src=ze(e)}function nn(e){const n=e.value,a=e.selectionStart-1,c=Math.max(n.lastIndexOf(` +`,a),n.lastIndexOf(" ",a))+1;return{string:n.substring(c,a+1),pos:{start:c,end:a}}}function rn(e,n){e.selectionStart=n,e.selectionEnd=n}const sn={getWordBeforeCursor:nn,moveCursor:rn},an=e=>e.startsWith("$")&&e.endsWith("$")?e.slice(1,-1):e,un=He(new Date().getTime()&4294967295);function pt(e){return Array.isArray(e)?e.map(pt):e}const yn={inputPathsEqual:Ft,nestedMap:lt,rWidgetRule:ft,rTypeFromWidgetId:Tt,rWidgetParts:Rt,snowman:St,noScore:Pt,seededRNG:He,shuffle:Dt,split:qt,combineScores:Vt,keScoreFromPerseusScore:Gt,firstNumericalParse:Lt,stringArrayOfSize:zt,gridDimensionConfig:Ut,getGridStep:Ht,snapStepFromGridStep:Bt,scaleFromExtent:Be,tickStepFromExtent:Wt,gridStepFromTickStep:ht,tickStepFromNumTicks:We,constrainedTickStepsFromTickSteps:$t,eq:Le,deepEq:Pe,parseQueryString:Jt,updateQueryString:Zt,strongEncodeURIComponent:Kt,scoreIsEmpty:Yt,touchHandlers:we,resetTouchHandlers:Xt,extractPointerLocation:Qt,supportsPassiveEvents:jt,captureScratchpadTouchStart:en,getImageSize:tn,getImageSizeModern:Nt,getRealImageUrl:ze,isLabeledSVG:ct,getBaseUrl:Ue,getSvgUrl:ot,getDataUrl:bt,textarea:sn,unescapeMathMode:an,random:un,deepClone:pt};export{It as D,De as E,se as K,qe as P,yn as U,Ct as a,fn as b,dn as c,gn as d,Re as e,vn as f,Ae as g,hn as h,kt as i,Fe as p,pn as r,mn as s,et as t}; diff --git a/assets/util-3pmDu6r6.js b/assets/util-yTFMWwoT.js similarity index 74% rename from assets/util-3pmDu6r6.js rename to assets/util-yTFMWwoT.js index b3c0477533..036817e86d 100644 --- a/assets/util-3pmDu6r6.js +++ b/assets/util-yTFMWwoT.js @@ -1 +1 @@ -import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{l as i}from"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./svg-image-VUqtnnD6.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{V as m}from"./index-6h5t6F0w.js";import{c as p,s as l}from"./index-deFLJwr4.js";import{l as d}from"./index-awljIyHI.js";import{w as u}from"./index-J2t_5nK1.js";const n=e=>{const{color:r,filled:t=!0,decorative:c=!1}=e;return a(m,{"aria-label":c?void 0:`${r}, ${t?"filled":"open"}`,style:[f.colorSwatch,{border:`4px solid ${i[r]}`,backgroundColor:t?i[r]:p.white}]})},f=d.StyleSheet.create({colorSwatch:{outline:`2px solid ${p.offWhite}`,borderRadius:"50%",width:l.large_24,height:l.large_24}}),J=n;n.__docgenInfo={description:"",methods:[],displayName:"ColorSwatch",props:{color:{required:!0,tsType:{name:"LockedFigureColor"},description:""},filled:{required:!1,tsType:{name:"boolean"},description:""},decorative:{required:!1,tsType:{name:"boolean"},description:""}}};const o="grayH";function s(e){switch(e){case"point":return{type:"point",coord:[0,0],color:o,filled:!0};case"line":return{type:"line",kind:"line",points:[s("point"),{...s("point"),coord:[2,2]}],color:o,lineStyle:"solid",showPoint1:!1,showPoint2:!1};case"vector":return{type:"vector",points:[[0,0],[2,2]],color:o};case"ellipse":return{type:"ellipse",center:[0,0],radius:[1,1],angle:0,color:o,fillStyle:"none",strokeStyle:"solid"};case"polygon":return{type:"polygon",points:[[0,2],[-1,0],[1,0]],color:o,showVertices:!1,fillStyle:"none",strokeStyle:"solid"};case"function":return{type:"function",color:o,strokeStyle:"solid",equation:"x^2",directionalAxis:"x"};case"label":return{type:"label",coord:[0,0],text:"",color:o,size:"medium"};default:throw new u(e)}}export{J as C,s as g}; +import{j as a}from"./jsx-runtime-FVsy8kgq.js";import{l as i}from"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./svg-image-RL9NlJEY.js";import"./hud-FI3E3dT_.js";import"./icon-YuYiVxsK.js";import"./index-K9BSJPWl.js";import"./inline-icon-tKY1iMkH.js";import"./math-input-b6JdL4xR.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./text-input-15gEhfDF.js";import"./text-list-editor-pe7AGDAl.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./index-IIMKO4_x.js";import{V as m}from"./index-6h5t6F0w.js";import{c as p,s as l}from"./index-deFLJwr4.js";import{l as d}from"./index-awljIyHI.js";import{w as u}from"./index-J2t_5nK1.js";const n=e=>{const{color:r,filled:t=!0,decorative:c=!1}=e;return a(m,{"aria-label":c?void 0:`${r}, ${t?"filled":"open"}`,style:[f.colorSwatch,{border:`4px solid ${i[r]}`,backgroundColor:t?i[r]:p.white}]})},f=d.StyleSheet.create({colorSwatch:{outline:`2px solid ${p.offWhite}`,borderRadius:"50%",width:l.large_24,height:l.large_24}}),J=n;n.__docgenInfo={description:"",methods:[],displayName:"ColorSwatch",props:{color:{required:!0,tsType:{name:"LockedFigureColor"},description:""},filled:{required:!1,tsType:{name:"boolean"},description:""},decorative:{required:!1,tsType:{name:"boolean"},description:""}}};const o="grayH";function s(e){switch(e){case"point":return{type:"point",coord:[0,0],color:o,filled:!0};case"line":return{type:"line",kind:"line",points:[s("point"),{...s("point"),coord:[2,2]}],color:o,lineStyle:"solid",showPoint1:!1,showPoint2:!1};case"vector":return{type:"vector",points:[[0,0],[2,2]],color:o};case"ellipse":return{type:"ellipse",center:[0,0],radius:[1,1],angle:0,color:o,fillStyle:"none",strokeStyle:"solid"};case"polygon":return{type:"polygon",points:[[0,2],[-1,0],[1,0]],color:o,showVertices:!1,fillStyle:"none",strokeStyle:"solid"};case"function":return{type:"function",color:o,strokeStyle:"solid",equation:"x^2",directionalAxis:"x"};case"label":return{type:"label",coord:[0,0],text:"",color:o,size:"medium"};default:throw new u(e)}}export{J as C,s as g}; diff --git a/assets/video.stories-XyqqlZXc.js b/assets/video.stories-ZPQV-MHo.js similarity index 74% rename from assets/video.stories-XyqqlZXc.js rename to assets/video.stories-ZPQV-MHo.js index e2d5fe7104..2f7f57e8e9 100644 --- a/assets/video.stories-XyqqlZXc.js +++ b/assets/video.stories-ZPQV-MHo.js @@ -1,4 +1,4 @@ -import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{R as e}from"./renderer-with-debug-ui-fbym8U_I.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-2dmvOE3q.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./register-all-widgets-for-testing-qzjCjLVo.js";const h={content:`Watch the Biogeography: Where Life Lives video to find the answer. +import{j as i}from"./jsx-runtime-FVsy8kgq.js";import{R as e}from"./renderer-with-debug-ui-YzY7YHzw.js";import"./index-TT1qJ6UJ.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./choice-E4eyMygy.js";import"./index-6h5t6F0w.js";import"./index-awljIyHI.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./index-o3wWn3Y5.js";import"./index-deFLJwr4.js";import"./index-h_CiYGGb.js";import"./index-ngddCaVG.js";import"./index-rfN0X25E.js";import"./index-xuPsLuPk.js";import"./index-WNT3sUKf.js";import"./index-qUyqkRvh.js";import"./index-BPSWBbj5.js";import"./index-7vsPyIck.js";import"./index-YCTzZMik.js";import"./index-CkAxGj88.js";import"./Popper-kGnKOid7.js";import"./index-dnMhQZ-1.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./icon-YuYiVxsK.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./invariant-bu5zBsRS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./jquery-yG1GhClm.js";import"./media-queries-MaBBbpNq.js";import"./constants-I_nlPaPx.js";import"./choice-icon-LAaL9HdM.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-J2t_5nK1.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./client-rbWgHzHN.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./math-input-b6JdL4xR.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./shared-3pf9YZIg.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./side-by-side-kpK-8vW0.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./register-all-widgets-for-testing-xSlGtLC1.js";const h={content:`Watch the Biogeography: Where Life Lives video to find the answer. [[☃ video 1]] diff --git a/assets/viewport-resizer-2eJF63Xv.js b/assets/viewport-resizer-spuc4uQO.js similarity index 65% rename from assets/viewport-resizer-2eJF63Xv.js rename to assets/viewport-resizer-spuc4uQO.js index 73fa97ba74..07a7881ecb 100644 --- a/assets/viewport-resizer-2eJF63Xv.js +++ b/assets/viewport-resizer-spuc4uQO.js @@ -1,2 +1,2 @@ -import{a as e,j as t}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-6f7Dak4j.js";import"./jquery-yG1GhClm.js";import"./util-XcxTwqb0.js";import"./phet-simulation-fZpYIOCA.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./renderer-vBOYiNCS.js";import"./base-radio-ffaiqOwN.js";import{c as a}from"./components-GHvuFaIn.js";import{c}from"./constants-hQyjCzwz.js";import{I as m}from"./icon-paths-AuJwhOz7.js";import"./index-k-0mNqHS.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-VUqtnnD6.js";import"./index-IIMKO4_x.js";const{ButtonGroup:d,InlineIcon:o}=a,{devices:n}=c,{iconDesktop:u,iconMobilePhone:l,iconTablet:h}=m,v=i=>{const r=e("span",{children:[t(o,{...l})," Phone"]}),s=e("span",{children:[t(o,{...h})," Tablet"]}),p=e("span",{children:[t(o,{...u})," Desktop"]});return e("span",{className:"viewport-resizer",children:["Viewport:"," ",t(d,{value:i.deviceType,allowEmpty:!1,buttons:[{value:n.PHONE,content:r},{value:n.TABLET,content:s},{value:n.DESKTOP,content:p}],onChange:i.onViewportSizeChanged})]})};v.__docgenInfo={description:"",methods:[],displayName:"ViewportResizer",props:{deviceType:{required:!0,tsType:{name:"DeviceType"},description:"The current device type that is selected."},onViewportSizeChanged:{required:!0,tsType:{name:"signature",type:"function",raw:"(deviceType: DeviceType) => unknown",signature:{arguments:[{type:{name:"DeviceType"},name:"deviceType"}],return:{name:"unknown"}}},description:`A callback that is passed (width, height) as the dimensions of the +import{a as e,j as t}from"./jsx-runtime-FVsy8kgq.js";import"./article-renderer-TMdCDA85.js";import"./jquery-yG1GhClm.js";import"./util-YrNvlCNO.js";import"./phet-simulation-4u5-UljK.js";import"./version-akiLXZts.js";import"./dependencies-8XILypbq.js";import"./perseus-api-mOiZT07d.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./renderer-hPmI_Chp.js";import"./base-radio-TdBv-OLd.js";import{c as a}from"./components-h6HHhmoA.js";import{c}from"./constants-hQyjCzwz.js";import{I as m}from"./icon-paths-AuJwhOz7.js";import"./index-0C4KXdeC.js";import"./i18n-context-hxuRe8oU.js";import"./svg-image-RL9NlJEY.js";import"./index-IIMKO4_x.js";const{ButtonGroup:d,InlineIcon:o}=a,{devices:n}=c,{iconDesktop:u,iconMobilePhone:l,iconTablet:h}=m,v=i=>{const r=e("span",{children:[t(o,{...l})," Phone"]}),s=e("span",{children:[t(o,{...h})," Tablet"]}),p=e("span",{children:[t(o,{...u})," Desktop"]});return e("span",{className:"viewport-resizer",children:["Viewport:"," ",t(d,{value:i.deviceType,allowEmpty:!1,buttons:[{value:n.PHONE,content:r},{value:n.TABLET,content:s},{value:n.DESKTOP,content:p}],onChange:i.onViewportSizeChanged})]})};v.__docgenInfo={description:"",methods:[],displayName:"ViewportResizer",props:{deviceType:{required:!0,tsType:{name:"DeviceType"},description:"The current device type that is selected."},onViewportSizeChanged:{required:!0,tsType:{name:"signature",type:"function",raw:"(deviceType: DeviceType) => unknown",signature:{arguments:[{type:{name:"DeviceType"},name:"deviceType"}],return:{name:"unknown"}}},description:`A callback that is passed (width, height) as the dimensions of the viewport to resize to.`}}};export{v as V}; diff --git a/assets/viewport-resizer.stories-bxCH8kbX.js b/assets/viewport-resizer.stories-aXdKKKs0.js similarity index 68% rename from assets/viewport-resizer.stories-bxCH8kbX.js rename to assets/viewport-resizer.stories-aXdKKKs0.js index 6a7c84eb59..12fa7244a9 100644 --- a/assets/viewport-resizer.stories-bxCH8kbX.js +++ b/assets/viewport-resizer.stories-aXdKKKs0.js @@ -1,4 +1,4 @@ -import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{a}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{r as c}from"./index-TT1qJ6UJ.js";import{V as m}from"./viewport-resizer-2eJF63Xv.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-6f7Dak4j.js";import"./util-XcxTwqb0.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-WNT3sUKf.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-vBOYiNCS.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-VUqtnnD6.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-k-0mNqHS.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-2dmvOE3q.js";import"./index-BPSWBbj5.js";import"./input-with-examples-x87iVHoc.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-ffaiqOwN.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-tmJoP6pY.js";import"./phet-simulation-fZpYIOCA.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-uB4giKvU.js";import"./button-group-nsoLlHtM.js";import"./graph-Y0iFaKoK.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-dpusjjfa.js";import"./range-input-R0Q6JH86.js";import"./marker-bfDDVuIS.js";import"./answer-pill-YUUkj-ih.js";import"./sortable-MNMZ70x0.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-PglzmXdY.js";import"./hints-renderer-zKC46_AN.js";import"./components-GHvuFaIn.js";import"./constants-hQyjCzwz.js";const pt={component:m,title:"PerseusEditor/Components/Viewport Resizer"},o=()=>{const[e,n]=c.useState("phone");return s(m,{deviceType:e,onViewportSizeChanged:t=>{a("onViewportSizeChanged")(t),n(t)}})};o.__docgenInfo={description:"",methods:[],displayName:"Controlled"};var r,i,p;o.parameters={...o.parameters,docs:{...(r=o.parameters)==null?void 0:r.docs,source:{originalSource:`() => { +import{j as s}from"./jsx-runtime-FVsy8kgq.js";import{a}from"./chunk-WFFRPTHA-zlNDxfrq.js";import{r as c}from"./index-TT1qJ6UJ.js";import{V as m}from"./viewport-resizer-spuc4uQO.js";import"./preview-errors-7FWlPnjy.js";import"./index-PPLHz8o0.js";import"./_commonjsHelpers-4gQjN7DL.js";import"./article-renderer-TMdCDA85.js";import"./util-YrNvlCNO.js";import"./version-akiLXZts.js";import"./jquery-yG1GhClm.js";import"./prop-types-3bOVFRDQ.js";import"./mobile-keypad-hKjeQGNp.js";import"./index-awljIyHI.js";import"./index-7vsPyIck.js";import"./index-CkAxGj88.js";import"./index-J2t_5nK1.js";import"./index-6h5t6F0w.js";import"./index-deFLJwr4.js";import"./tabbar-WYCYDof0.js";import"./item-X9tjzx12.js";import"./index-2dmvOE3q.js";import"./react-router-dom-W_e8xVUu.js";import"./index-tvtfaFq4.js";import"./button-assets-txIojR3b.js";import"./keypad-button-rKskH7oM.js";import"./operators-page-C_EsmjPW.js";import"./navigation-pad-ss7r0FKW.js";import"./key-translator-IA-2V2LV.js";import"./_commonjs-dynamic-modules-h-SxKiO4.js";import"./invariant-bu5zBsRS.js";import"./enums-x5qaTru7.js";import"./renderer-hPmI_Chp.js";import"./index-dnMhQZ-1.js";import"./asset-context-I7yIqWki.js";import"./svg-image-RL9NlJEY.js";import"./dependencies-8XILypbq.js";import"./fixed-to-responsive-1fSZ1n--.js";import"./constants-I_nlPaPx.js";import"./client-rbWgHzHN.js";import"./inline-icon-tKY1iMkH.js";import"./icon-paths-AuJwhOz7.js";import"./image-loader-mgyZcN0j.js";import"./tex-VP4hirbI.js";import"./zoomable-CA1NzpZD.js";import"./zoomable-tex-MZi7Hqbp.js";import"./perseus-api-mOiZT07d.js";import"./index-0C4KXdeC.js";import"./stub-tag-editor-Hmby24Jq.js";import"./text-list-editor-pe7AGDAl.js";import"./lint-I_5mQeXl.js";import"./index-K9BSJPWl.js";import"./index-xuPsLuPk.js";import"./index-YCTzZMik.js";import"./index-rfN0X25E.js";import"./index-o3wWn3Y5.js";import"./index-h_CiYGGb.js";import"./Popper-kGnKOid7.js";import"./i18n-context-hxuRe8oU.js";import"./strings-OAjNfY6D.js";import"./math-input-b6JdL4xR.js";import"./index-WNT3sUKf.js";import"./index-BPSWBbj5.js";import"./input-with-examples-YZffrKhM.js";import"./text-input-15gEhfDF.js";import"./index-QCAhLhLD.js";import"./minus-bold-ONmDo3Ve.js";import"./tooltip-S_hcgkAT.js";import"./simple-keypad-input-zNNuoI83.js";import"./base-radio-TdBv-OLd.js";import"./media-queries-MaBBbpNq.js";import"./shared-3pf9YZIg.js";import"./choice-E4eyMygy.js";import"./index-ngddCaVG.js";import"./index-qUyqkRvh.js";import"./icon-YuYiVxsK.js";import"./choice-icon-LAaL9HdM.js";import"./focus-ring-sgSTt4fM.js";import"./option-status-6glEGOB8.js";import"./choice-none-above-HXEAXx7K.js";import"./phet-simulation-4u5-UljK.js";import"./arrow-square-out-bold-090vdhrx.js";import"./answer-choices-xSqM961S.js";import"./button-group-nsoLlHtM.js";import"./graph-myhk4Jua.js";import"./index-IIMKO4_x.js";import"./tiny-invariant-bHgPayXn.js";import"./bundle.esm-7jAAHVxW.js";import"./hud-FI3E3dT_.js";import"./multi-button-group-a0iIfrwx.js";import"./number-input-ZhezuDVT.js";import"./range-input-kzyKWO0E.js";import"./marker-ockQWLHi.js";import"./answer-pill-NjYGKpaV.js";import"./sortable-1zDjBYMZ.js";import"./video-transcript-link-WVgIZGhp.js";import"./multi-renderer-vtdVtdWv.js";import"./hints-renderer-sA0Ao_qa.js";import"./components-h6HHhmoA.js";import"./constants-hQyjCzwz.js";const pt={component:m,title:"PerseusEditor/Components/Viewport Resizer"},o=()=>{const[e,n]=c.useState("phone");return s(m,{deviceType:e,onViewportSizeChanged:t=>{a("onViewportSizeChanged")(t),n(t)}})};o.__docgenInfo={description:"",methods:[],displayName:"Controlled"};var r,i,p;o.parameters={...o.parameters,docs:{...(r=o.parameters)==null?void 0:r.docs,source:{originalSource:`() => { const [deviceType, setDeviceType] = React.useState("phone"); return { action("onViewportSizeChanged")(newDeviceType); diff --git a/iframe.html b/iframe.html index ce425bd116..dd21376637 100644 --- a/iframe.html +++ b/iframe.html @@ -425,7 +425,7 @@ } - + diff --git a/preview-stats.json b/preview-stats.json index 3b6a5f2454..a26f15c468 100644 --- a/preview-stats.json +++ b/preview-stats.json @@ -1216,14 +1216,17 @@ ] }, { - "id": "./packages/math-input/src/components/keypad/navigation-pad.tsx", - "name": "./packages/math-input/src/components/keypad/navigation-pad.tsx", + "id": "./packages/math-input/src/components/keypad/index.tsx", + "name": "./packages/math-input/src/components/keypad/index.tsx", "reasons": [ { - "moduleName": "./packages/math-input/src/components/keypad/navigation-pad.stories.tsx" + "moduleName": "./packages/math-input/src/full-keypad.stories.tsx" }, { - "moduleName": "./packages/math-input/src/components/keypad/keypad.tsx" + "moduleName": "./packages/math-input/src/index.ts" + }, + { + "moduleName": "./packages/math-input/src/components/keypad/keypad-mathquill.stories.tsx" } ] }, @@ -1234,6 +1237,9 @@ { "moduleName": "./packages/math-input/src/components/keypad/keypad-button.stories.tsx" }, + { + "moduleName": "./packages/math-input/src/index.ts" + }, { "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/geometry-page.tsx" }, @@ -1243,21 +1249,18 @@ { "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/operators-page.tsx" }, - { - "moduleName": "./packages/math-input/src/index.ts" - }, { "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/extras-page.tsx" }, - { - "moduleName": "./packages/math-input/src/components/keypad/shared-keys.tsx" - }, { "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/fractions-page.tsx" }, { "moduleName": "./packages/math-input/src/components/keypad/utils.ts" }, + { + "moduleName": "./packages/math-input/src/components/keypad/shared-keys.tsx" + }, { "moduleName": "./packages/math-input/src/components/keypad/navigation-pad.tsx" } @@ -1298,10 +1301,10 @@ "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/extras-page.tsx" }, { - "moduleName": "./packages/math-input/src/components/keypad/shared-keys.tsx" + "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/fractions-page.tsx" }, { - "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/fractions-page.tsx" + "moduleName": "./packages/math-input/src/components/keypad/shared-keys.tsx" } ] }, @@ -1341,6 +1344,18 @@ } ] }, + { + "id": "./packages/math-input/src/components/keypad/navigation-pad.tsx", + "name": "./packages/math-input/src/components/keypad/navigation-pad.tsx", + "reasons": [ + { + "moduleName": "./packages/math-input/src/components/keypad/navigation-pad.stories.tsx" + }, + { + "moduleName": "./packages/math-input/src/components/keypad/keypad.tsx" + } + ] + }, { "id": "./packages/math-input/src/components/tabbar/item.tsx", "name": "./packages/math-input/src/components/tabbar/item.tsx", @@ -1354,17 +1369,32 @@ ] }, { - "id": "./packages/math-input/src/components/keypad/index.tsx", - "name": "./packages/math-input/src/components/keypad/index.tsx", + "id": "./packages/perseus-editor/src/util/register-all-widgets-and-editors-for-testing.ts", + "name": "./packages/perseus-editor/src/util/register-all-widgets-and-editors-for-testing.ts", "reasons": [ { - "moduleName": "./packages/math-input/src/full-keypad.stories.tsx" + "moduleName": "./packages/perseus-editor/src/__stories__/editor-page.stories.tsx" }, { - "moduleName": "./packages/math-input/src/components/keypad/keypad-mathquill.stories.tsx" + "moduleName": "./packages/perseus-editor/src/__stories__/article-editor.stories.tsx" }, { - "moduleName": "./packages/math-input/src/index.ts" + "moduleName": "./packages/perseus-editor/src/__stories__/editor.stories.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/__stories__/interactive-graph-editor.stories.tsx" + } + ] + }, + { + "id": "./packages/perseus-editor/src/__stories__/editor-page-with-storybook-preview.tsx", + "name": "./packages/perseus-editor/src/__stories__/editor-page-with-storybook-preview.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus-editor/src/__stories__/editor-page.stories.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/__stories__/interactive-graph-editor.stories.tsx" } ] }, @@ -1388,10 +1418,10 @@ "moduleName": "./packages/perseus-editor/src/components/__stories__/color-swatch.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/color-select.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/color-select.tsx" } ] }, @@ -1403,25 +1433,25 @@ "moduleName": "./packages/perseus-editor/src/components/__stories__/color-swatch.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/__stories__/color-select.stories.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-point-settings.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-point-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-label-settings.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-function-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-line-settings.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-label-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-polygon-settings.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-ellipse-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-function-settings.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-line-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-ellipse-settings.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-polygon-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/color-select.stories.tsx" }, { "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-vector-settings.stories.tsx" @@ -1436,19 +1466,19 @@ "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figures-section.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figures-section.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-vector-settings.tsx" @@ -1479,36 +1509,6 @@ } ] }, - { - "id": "./packages/perseus-editor/src/util/register-all-widgets-and-editors-for-testing.ts", - "name": "./packages/perseus-editor/src/util/register-all-widgets-and-editors-for-testing.ts", - "reasons": [ - { - "moduleName": "./packages/perseus-editor/src/__stories__/editor-page.stories.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/__stories__/article-editor.stories.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/__stories__/editor.stories.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/__stories__/interactive-graph-editor.stories.tsx" - } - ] - }, - { - "id": "./packages/perseus-editor/src/__stories__/editor-page-with-storybook-preview.tsx", - "name": "./packages/perseus-editor/src/__stories__/editor-page-with-storybook-preview.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus-editor/src/__stories__/editor-page.stories.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/__stories__/interactive-graph-editor.stories.tsx" - } - ] - }, { "id": "./packages/perseus/src/index.ts", "name": "./packages/perseus/src/index.ts", @@ -1559,31 +1559,34 @@ "moduleName": "./packages/perseus-editor/src/widgets/image-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/numeric-input-editor.tsx" + "moduleName": "./testing/server-item-renderer-with-debug-ui.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/phet-simulation-editor.tsx" + "moduleName": "./testing/multi-item-renderer-with-debug-ui.tsx" }, { "moduleName": "./packages/perseus-editor/src/iframe-content-renderer.tsx" }, { - "moduleName": "./packages/perseus-editor/src/i18n.ts" + "moduleName": "./packages/perseus-editor/src/editor-page.tsx" }, { - "moduleName": "./packages/perseus-editor/src/editor-page.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/phet-simulation-editor.tsx" }, { - "moduleName": "./testing/server-item-renderer-with-debug-ui.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/numeric-input-editor.tsx" }, { - "moduleName": "./testing/multi-item-renderer-with-debug-ui.tsx" + "moduleName": "./packages/perseus-editor/src/i18n.ts" + }, + { + "moduleName": "./packages/perseus-editor/src/diffs/renderer-diff.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/interaction-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/diffs/renderer-diff.tsx" + "moduleName": "./testing/renderer-with-debug-ui.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-settings.tsx" @@ -1591,9 +1594,6 @@ { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/util.ts" }, - { - "moduleName": "./testing/renderer-with-debug-ui.tsx" - }, { "moduleName": "./dev/flipbook.tsx" }, @@ -1601,16 +1601,16 @@ "moduleName": "./packages/perseus-editor/src/editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/deprecated-standin-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/grapher-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/widget-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/deprecated-standin-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/grapher-editor.tsx" + "moduleName": "./packages/perseus-editor/src/components/widget-select.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/widget-select.tsx" + "moduleName": "./packages/perseus-editor/src/components/widget-editor.tsx" }, { "moduleName": "./packages/perseus-editor/src/item-editor.tsx" @@ -1618,6 +1618,9 @@ { "moduleName": "./packages/perseus-editor/src/hint-editor.tsx" }, + { + "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/element-container.tsx" + }, { "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/label-editor.tsx" }, @@ -1627,9 +1630,6 @@ { "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/line-editor.tsx" }, - { - "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/element-container.tsx" - }, { "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/movable-line-editor.tsx" }, @@ -1637,10 +1637,10 @@ "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/movable-point-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/point-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/parametric-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/parametric-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/point-editor.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/rectangle-editor.tsx" @@ -1649,10 +1649,10 @@ "moduleName": "./packages/perseus-editor/src/diffs/text-diff.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/definition-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/categorizer-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/categorizer-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/definition-editor.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/explanation-editor.tsx" @@ -1670,43 +1670,43 @@ "moduleName": "./packages/perseus-editor/src/widgets/radio/editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/orderer-editor.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/widgets/matrix-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/passage-ref-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/measurer-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/graded-group-set-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/molecule-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/matrix-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/group-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/passage-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/iframe-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/video-editor.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/table-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/passage-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/passage-ref-target-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/passage-ref-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/molecule-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/video-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/orderer-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/graded-group-set-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/group-editor.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/cs-program-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/passage-ref-target-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/iframe-editor.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/widgets/measurer-editor.tsx" }, { "moduleName": "./packages/perseus-editor/src/diffs/widget-diff.tsx" @@ -1738,14 +1738,11 @@ { "moduleName": "./packages/perseus-editor/src/content-preview.tsx" }, - { - "moduleName": "./packages/perseus-editor/src/item-extras-editor.tsx" - }, { "moduleName": "./packages/perseus-editor/src/__stories__/editor-page-with-storybook-preview.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/color-select.tsx" + "moduleName": "./packages/perseus-editor/src/item-extras-editor.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/color-swatch.tsx" @@ -1754,11 +1751,14 @@ "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-label-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/color-select.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/components/interactive-graph-settings.tsx" }, + { + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" + }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" }, @@ -1766,41 +1766,41 @@ "moduleName": "./packages/perseus-editor/src/components/section-control-button.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/interactive-graph-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/expression-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/expression-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/interactive-graph-editor.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/label-image-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/label-image/marker.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/label-image/behavior.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/label-image/select-image.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/label-image/answer-choices.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/label-image/behavior.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/label-image/select-image.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/label-image/answer-choices.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/label-image/marker.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/label-image/question-markers.tsx" }, - { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-aria.tsx" - }, { "moduleName": "./packages/perseus-editor/src/multirenderer-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/ellipse-swatch.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-aria.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/line-swatch.tsx" }, + { + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/ellipse-swatch.tsx" + }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/polygon-swatch.tsx" }, @@ -1808,10 +1808,10 @@ "moduleName": "./packages/perseus-editor/src/components/form-wrapped-text-field.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/dropdown-option.tsx" + "moduleName": "./packages/perseus-editor/src/components/checkbox.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/checkbox.tsx" + "moduleName": "./packages/perseus-editor/src/components/dropdown-option.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/graded-group-editor.tsx" @@ -1833,18 +1833,6 @@ } ] }, - { - "id": "./packages/perseus-editor/src/widgets/dropdown-editor.tsx", - "name": "./packages/perseus-editor/src/widgets/dropdown-editor.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus-editor/src/widgets/__stories__/dropdown-editor.stories.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/all-editors.ts" - } - ] - }, { "id": "./packages/perseus-editor/src/diffs/text-diff.tsx", "name": "./packages/perseus-editor/src/diffs/text-diff.tsx", @@ -1868,52 +1856,46 @@ "moduleName": "./packages/perseus-editor/src/diffs/__stories__/text-diff.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/diffs/__stories__/structured-item-diff.stories.tsx" + "moduleName": "./packages/perseus-editor/src/diffs/__stories__/tags-diff.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/diffs/__stories__/tags-diff.stories.tsx" + "moduleName": "./packages/perseus-editor/src/diffs/__stories__/structured-item-diff.stories.tsx" } ] }, { - "id": "./packages/perseus-editor/src/diffs/structured-item-diff.tsx", - "name": "./packages/perseus-editor/src/diffs/structured-item-diff.tsx", + "id": "./packages/perseus-editor/src/widgets/categorizer-editor.tsx", + "name": "./packages/perseus-editor/src/widgets/categorizer-editor.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/diffs/__stories__/structured-item-diff.stories.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/__stories__/categorizer-editor.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/index.ts" + "moduleName": "./packages/perseus-editor/src/all-editors.ts" } ] }, { - "id": "./packages/perseus-editor/src/styles/perseus-editor.less", - "name": "./packages/perseus-editor/src/styles/perseus-editor.less", + "id": "./packages/perseus-editor/src/diffs/tags-diff.tsx", + "name": "./packages/perseus-editor/src/diffs/tags-diff.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/diffs/__stories__/structured-item-diff.stories.tsx" + "moduleName": "./packages/perseus-editor/src/diffs/__stories__/tags-diff.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/__stories__/item-editor.stories.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/__stories__/content-preview.stories.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/index.ts" + "moduleName": "./packages/perseus-editor/src/diffs/structured-item-diff.tsx" } ] }, { - "id": "./packages/perseus-editor/src/diffs/tags-diff.tsx", - "name": "./packages/perseus-editor/src/diffs/tags-diff.tsx", + "id": "./packages/perseus-editor/src/widgets/input-number-editor.tsx", + "name": "./packages/perseus-editor/src/widgets/input-number-editor.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/diffs/__stories__/tags-diff.stories.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/__stories__/input-number-editor.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/diffs/structured-item-diff.tsx" + "moduleName": "./packages/perseus-editor/src/all-editors.ts" } ] }, @@ -1930,11 +1912,11 @@ ] }, { - "id": "./packages/perseus-editor/src/widgets/categorizer-editor.tsx", - "name": "./packages/perseus-editor/src/widgets/categorizer-editor.tsx", + "id": "./packages/perseus-editor/src/widgets/dropdown-editor.tsx", + "name": "./packages/perseus-editor/src/widgets/dropdown-editor.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/__stories__/categorizer-editor.stories.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/__stories__/dropdown-editor.stories.tsx" }, { "moduleName": "./packages/perseus-editor/src/all-editors.ts" @@ -1942,14 +1924,32 @@ ] }, { - "id": "./packages/perseus-editor/src/widgets/input-number-editor.tsx", - "name": "./packages/perseus-editor/src/widgets/input-number-editor.tsx", + "id": "./packages/perseus-editor/src/diffs/structured-item-diff.tsx", + "name": "./packages/perseus-editor/src/diffs/structured-item-diff.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/__stories__/input-number-editor.stories.tsx" + "moduleName": "./packages/perseus-editor/src/diffs/__stories__/structured-item-diff.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/all-editors.ts" + "moduleName": "./packages/perseus-editor/src/index.ts" + } + ] + }, + { + "id": "./packages/perseus-editor/src/styles/perseus-editor.less", + "name": "./packages/perseus-editor/src/styles/perseus-editor.less", + "reasons": [ + { + "moduleName": "./packages/perseus-editor/src/diffs/__stories__/structured-item-diff.stories.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/__stories__/item-editor.stories.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/__stories__/content-preview.stories.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/index.ts" } ] }, @@ -2002,11 +2002,11 @@ ] }, { - "id": "./packages/perseus-editor/src/widgets/phet-simulation-editor.tsx", - "name": "./packages/perseus-editor/src/widgets/phet-simulation-editor.tsx", + "id": "./packages/perseus-editor/src/widgets/python-program-editor.tsx", + "name": "./packages/perseus-editor/src/widgets/python-program-editor.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/__stories__/phet-simulation-editor.stories.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/__stories__/python-program-editor.stories.tsx" }, { "moduleName": "./packages/perseus-editor/src/all-editors.ts" @@ -2014,11 +2014,11 @@ ] }, { - "id": "./packages/perseus-editor/src/widgets/python-program-editor.tsx", - "name": "./packages/perseus-editor/src/widgets/python-program-editor.tsx", + "id": "./packages/perseus-editor/src/widgets/phet-simulation-editor.tsx", + "name": "./packages/perseus-editor/src/widgets/phet-simulation-editor.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/__stories__/python-program-editor.stories.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/__stories__/phet-simulation-editor.stories.tsx" }, { "moduleName": "./packages/perseus-editor/src/all-editors.ts" @@ -2038,98 +2038,68 @@ ] }, { - "id": "./packages/keypad-context/src/index.ts", - "name": "./packages/keypad-context/src/index.ts", + "id": "./packages/perseus/src/components/hud.tsx", + "name": "./packages/perseus/src/components/hud.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/__stories__/article-renderer.stories.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/expression/expression.stories.tsx" - }, - { - "moduleName": "./packages/math-input/src/full-mobile-input.stories.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/number-line/number-line.stories.tsx" - }, - { - "moduleName": "./packages/math-input/src/components/keypad/mobile-keypad.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/content-preview.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/__shared__/test-keypad-context-wrapper.tsx" + "moduleName": "./packages/perseus/src/components/__stories__/hud.stories.tsx" }, { - "moduleName": "./packages/math-input/src/components/input/math-input.tsx" + "moduleName": "./packages/perseus/src/components.ts" } ] }, { - "id": "./testing/test-dependencies.tsx", - "name": "./testing/test-dependencies.tsx", + "id": "./testing/server-item-renderer-with-debug-ui.tsx", + "name": "./testing/server-item-renderer-with-debug-ui.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/__stories__/article-renderer.stories.tsx" + "moduleName": "./packages/perseus/src/components/__stories__/graphie.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/definition/definition.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/expression/expression.stories.tsx" }, { "moduleName": "./packages/perseus/src/__stories__/server-item-renderer.stories.tsx" }, { - "moduleName": "./.storybook/preview.tsx" - }, - { - "moduleName": "./testing/server-item-renderer-with-debug-ui.tsx" - }, - { - "moduleName": "./testing/multi-item-renderer-with-debug-ui.tsx" + "moduleName": "./packages/perseus/src/widgets/number-line/number-line.stories.tsx" } ] }, { - "id": "./packages/perseus/src/__testdata__/article-renderer.testdata.ts", - "name": "./packages/perseus/src/__testdata__/article-renderer.testdata.ts", + "id": "./packages/perseus/src/__testdata__/graphie.testdata.ts", + "name": "./packages/perseus/src/__testdata__/graphie.testdata.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/__stories__/article-renderer.stories.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/__stories__/content-preview.stories.tsx" + "moduleName": "./packages/perseus/src/components/__stories__/graphie.stories.tsx" } ] }, { - "id": "./packages/perseus/src/article-renderer.tsx", - "name": "./packages/perseus/src/article-renderer.tsx", + "id": "./packages/perseus/src/components/graphie.tsx", + "name": "./packages/perseus/src/components/graphie.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/__stories__/article-renderer.stories.tsx" + "moduleName": "./packages/perseus/src/components/__stories__/graphie.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/definition/definition.stories.tsx" + "moduleName": "./packages/perseus/src/components.ts" }, { - "moduleName": "./packages/perseus/src/index.ts" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/__shared__/test-keypad-context-wrapper.tsx", - "name": "./packages/perseus/src/widgets/__shared__/test-keypad-context-wrapper.tsx", - "reasons": [ + "moduleName": "./packages/perseus/src/widgets/grapher/util.tsx" + }, { - "moduleName": "./packages/perseus/src/__stories__/article-renderer.stories.tsx" + "moduleName": "./packages/perseus/src/components/svg-image.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/expression/expression.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/number-line/number-line.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/interaction/interaction.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/number-line/number-line.tsx" } ] }, @@ -2197,68 +2167,98 @@ ] }, { - "id": "./testing/server-item-renderer-with-debug-ui.tsx", - "name": "./testing/server-item-renderer-with-debug-ui.tsx", + "id": "./packages/keypad-context/src/index.ts", + "name": "./packages/keypad-context/src/index.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/components/__stories__/graphie.stories.tsx" + "moduleName": "./packages/perseus/src/__stories__/article-renderer.stories.tsx" }, { "moduleName": "./packages/perseus/src/widgets/expression/expression.stories.tsx" }, { - "moduleName": "./packages/perseus/src/__stories__/server-item-renderer.stories.tsx" + "moduleName": "./packages/math-input/src/full-mobile-input.stories.tsx" }, { "moduleName": "./packages/perseus/src/widgets/number-line/number-line.stories.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/__testdata__/graphie.testdata.ts", - "name": "./packages/perseus/src/__testdata__/graphie.testdata.ts", - "reasons": [ + }, { - "moduleName": "./packages/perseus/src/components/__stories__/graphie.stories.tsx" + "moduleName": "./packages/math-input/src/components/keypad/mobile-keypad.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/content-preview.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/__shared__/test-keypad-context-wrapper.tsx" + }, + { + "moduleName": "./packages/math-input/src/components/input/math-input.tsx" } ] }, { - "id": "./packages/perseus/src/components/graphie.tsx", - "name": "./packages/perseus/src/components/graphie.tsx", + "id": "./testing/test-dependencies.tsx", + "name": "./testing/test-dependencies.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/components/__stories__/graphie.stories.tsx" + "moduleName": "./packages/perseus/src/__stories__/article-renderer.stories.tsx" }, { - "moduleName": "./packages/perseus/src/components.ts" + "moduleName": "./packages/perseus/src/widgets/definition/definition.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/grapher/util.tsx" + "moduleName": "./packages/perseus/src/__stories__/server-item-renderer.stories.tsx" }, { - "moduleName": "./packages/perseus/src/components/svg-image.tsx" + "moduleName": "./.storybook/preview.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" + "moduleName": "./testing/server-item-renderer-with-debug-ui.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interaction/interaction.tsx" + "moduleName": "./testing/multi-item-renderer-with-debug-ui.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/__testdata__/article-renderer.testdata.ts", + "name": "./packages/perseus/src/__testdata__/article-renderer.testdata.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/__stories__/article-renderer.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/number-line/number-line.tsx" + "moduleName": "./packages/perseus-editor/src/__stories__/content-preview.stories.tsx" } ] }, { - "id": "./packages/perseus/src/components/hud.tsx", - "name": "./packages/perseus/src/components/hud.tsx", + "id": "./packages/perseus/src/article-renderer.tsx", + "name": "./packages/perseus/src/article-renderer.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/components/__stories__/hud.stories.tsx" + "moduleName": "./packages/perseus/src/__stories__/article-renderer.stories.tsx" }, { - "moduleName": "./packages/perseus/src/components.ts" + "moduleName": "./packages/perseus/src/widgets/definition/definition.stories.tsx" + }, + { + "moduleName": "./packages/perseus/src/index.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/__shared__/test-keypad-context-wrapper.tsx", + "name": "./packages/perseus/src/widgets/__shared__/test-keypad-context-wrapper.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus/src/__stories__/article-renderer.stories.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/expression/expression.stories.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/number-line/number-line.stories.tsx" } ] }, @@ -2294,22 +2294,22 @@ "moduleName": "./packages/perseus/src/article-renderer.tsx" }, { - "moduleName": "./packages/perseus/src/components/svg-image.tsx" + "moduleName": "./packages/perseus/src/components/graphie-movables.ts" }, { - "moduleName": "./packages/perseus/src/components/graphie-movables.ts" + "moduleName": "./packages/perseus/src/components/svg-image.tsx" }, { "moduleName": "./packages/perseus/src/util/tex.ts" }, { - "moduleName": "./packages/perseus/src/renderer.tsx" + "moduleName": "./packages/perseus/src/widgets/iframe/iframe.tsx" }, { - "moduleName": "./packages/perseus/src/widget-container.tsx" + "moduleName": "./packages/perseus/src/renderer.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/iframe/iframe.tsx" + "moduleName": "./packages/perseus/src/widget-container.tsx" }, { "moduleName": "./packages/perseus/src/widgets/video/video.tsx" @@ -2323,15 +2323,15 @@ { "moduleName": "./packages/perseus/src/server-item-renderer.tsx" }, - { - "moduleName": "./packages/perseus/src/widgets/expression/expression.tsx" - }, { "moduleName": "./packages/perseus/src/widgets/phet-simulation/phet-simulation.tsx" }, { "moduleName": "./packages/perseus/src/widgets/video/video-transcript-link.tsx" }, + { + "moduleName": "./packages/perseus/src/widgets/expression/expression.tsx" + }, { "moduleName": "./packages/perseus/src/multi-items/multi-renderer.tsx" }, @@ -2341,15 +2341,15 @@ { "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" }, - { - "moduleName": "./packages/perseus/src/widgets/matcher/matcher.tsx" - }, { "moduleName": "./packages/perseus/src/widgets/label-image/label-image.tsx" }, { "moduleName": "./packages/perseus/src/widgets/passage/passage.tsx" }, + { + "moduleName": "./packages/perseus/src/widgets/matcher/matcher.tsx" + }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-label.tsx" } @@ -2382,18 +2382,6 @@ } ] }, - { - "id": "./packages/perseus/src/components/info-tip/index.tsx", - "name": "./packages/perseus/src/components/info-tip/index.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/components/__stories__/info-tip.stories.tsx" - }, - { - "moduleName": "./packages/perseus/src/components.ts" - } - ] - }, { "id": "./packages/perseus/src/components/inline-icon.tsx", "name": "./packages/perseus/src/components/inline-icon.tsx", @@ -2425,32 +2413,29 @@ ] }, { - "id": "./packages/perseus/src/components/input-with-examples.tsx", - "name": "./packages/perseus/src/components/input-with-examples.tsx", + "id": "./packages/perseus/src/components/info-tip/index.tsx", + "name": "./packages/perseus/src/components/info-tip/index.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/components/__stories__/input-with-examples.stories.tsx" + "moduleName": "./packages/perseus/src/components/__stories__/info-tip.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/numeric-input/numeric-input.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/input-number/input-number.tsx" + "moduleName": "./packages/perseus/src/components.ts" } ] }, { - "id": "./packages/perseus/src/components/math-input.tsx", - "name": "./packages/perseus/src/components/math-input.tsx", + "id": "./packages/perseus/src/components/input-with-examples.tsx", + "name": "./packages/perseus/src/components/input-with-examples.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/components/__stories__/math-input.stories.tsx" + "moduleName": "./packages/perseus/src/components/__stories__/input-with-examples.stories.tsx" }, { - "moduleName": "./packages/perseus/src/components.ts" + "moduleName": "./packages/perseus/src/widgets/numeric-input/numeric-input.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/expression/expression.tsx" + "moduleName": "./packages/perseus/src/widgets/input-number/input-number.tsx" } ] }, @@ -2466,6 +2451,21 @@ } ] }, + { + "id": "./packages/perseus/src/components/math-input.tsx", + "name": "./packages/perseus/src/components/math-input.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus/src/components/__stories__/math-input.stories.tsx" + }, + { + "moduleName": "./packages/perseus/src/components.ts" + }, + { + "moduleName": "./packages/perseus/src/widgets/expression/expression.tsx" + } + ] + }, { "id": "./packages/perseus/src/components/number-input.tsx", "name": "./packages/perseus/src/components/number-input.tsx", @@ -2487,6 +2487,18 @@ } ] }, + { + "id": "./packages/perseus/src/components/range-input.tsx", + "name": "./packages/perseus/src/components/range-input.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus/src/components/__stories__/range-input.stories.tsx" + }, + { + "moduleName": "./packages/perseus/src/components.ts" + } + ] + }, { "id": "./packages/perseus/src/components/simple-keypad-input.tsx", "name": "./packages/perseus/src/components/simple-keypad-input.tsx", @@ -2512,14 +2524,14 @@ ] }, { - "id": "./packages/perseus/src/components/range-input.tsx", - "name": "./packages/perseus/src/components/range-input.tsx", + "id": "./packages/perseus/src/components/stub-tag-editor.tsx", + "name": "./packages/perseus/src/components/stub-tag-editor.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/components/__stories__/range-input.stories.tsx" + "moduleName": "./packages/perseus/src/components/__stories__/stub-tag-editor.stories.tsx" }, { - "moduleName": "./packages/perseus/src/components.ts" + "moduleName": "./packages/perseus/src/perseus-api.tsx" } ] }, @@ -2538,18 +2550,6 @@ } ] }, - { - "id": "./packages/perseus/src/components/stub-tag-editor.tsx", - "name": "./packages/perseus/src/components/stub-tag-editor.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/components/__stories__/stub-tag-editor.stories.tsx" - }, - { - "moduleName": "./packages/perseus/src/perseus-api.tsx" - } - ] - }, { "id": "./packages/perseus/src/components/svg-image.tsx", "name": "./packages/perseus/src/components/svg-image.tsx", @@ -2564,13 +2564,13 @@ "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" }, { - "moduleName": "./packages/perseus/src/components/graph.tsx" + "moduleName": "./packages/perseus/src/widgets/image/image.tsx" }, { - "moduleName": "./packages/perseus/src/renderer.tsx" + "moduleName": "./packages/perseus/src/components/graph.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/image/image.tsx" + "moduleName": "./packages/perseus/src/renderer.tsx" }, { "moduleName": "./packages/perseus/src/widgets/measurer/measurer.tsx" @@ -2581,35 +2581,35 @@ ] }, { - "id": "./packages/perseus/src/components/text-input.tsx", - "name": "./packages/perseus/src/components/text-input.tsx", + "id": "./packages/perseus/src/components/tex.tsx", + "name": "./packages/perseus/src/components/tex.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/components/__stories__/text-input.stories.tsx" - }, - { - "moduleName": "./packages/perseus/src/components.ts" + "moduleName": "./packages/perseus/src/components/__stories__/tex.stories.tsx" }, { - "moduleName": "./packages/perseus/src/components/input-with-examples.tsx" + "moduleName": "./packages/perseus/src/components/zoomable-tex.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/matrix/matrix.tsx" + "moduleName": "./packages/perseus/src/renderer.tsx" } ] }, { - "id": "./packages/perseus/src/components/tex.tsx", - "name": "./packages/perseus/src/components/tex.tsx", + "id": "./packages/perseus/src/components/text-input.tsx", + "name": "./packages/perseus/src/components/text-input.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/components/__stories__/tex.stories.tsx" + "moduleName": "./packages/perseus/src/components/__stories__/text-input.stories.tsx" }, { - "moduleName": "./packages/perseus/src/components/zoomable-tex.tsx" + "moduleName": "./packages/perseus/src/components.ts" }, { - "moduleName": "./packages/perseus/src/renderer.tsx" + "moduleName": "./packages/perseus/src/components/input-with-examples.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/matrix/matrix.tsx" } ] }, @@ -2660,49 +2660,49 @@ "name": "./testing/renderer-with-debug-ui.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/categorizer/categorizer.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/dropdown/dropdown.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/explanation/explanation.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/definition/definition.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/deprecated-standin/__stories__/deprecated-standin.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/categorizer/categorizer.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/dropdown/dropdown.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/image/image.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/input-number/input-number.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/cs-program/cs-program.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/explanation/explanation.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/cs-program/cs-program.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/grapher/grapher.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/definition/definition.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/group/group.stories.tsx" }, { "moduleName": "./packages/perseus/src/widgets/iframe/iframe.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/image/image.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/interaction/interaction.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/grapher/grapher.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/deprecated-standin/__stories__/deprecated-standin.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interaction/interaction.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/group/group.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/input-number/input-number.stories.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-functions.stories.tsx" @@ -2714,10 +2714,10 @@ "moduleName": "./packages/perseus/src/widgets/matcher/matcher.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/matrix/matrix.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/python-program/python-program.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/python-program/python-program.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/matrix/matrix.stories.tsx" }, { "moduleName": "./packages/perseus/src/widgets/number-line/number-line.stories.tsx" @@ -2729,16 +2729,16 @@ "moduleName": "./packages/perseus/src/widgets/numeric-input/numeric-input.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/plotter/plotter.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/__stories__/radio.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/passage/passage.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/plotter/plotter.stories.tsx" }, { "moduleName": "./packages/perseus/src/widgets/passage-ref/passage-ref.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/radio/__stories__/radio.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/passage/passage.stories.tsx" }, { "moduleName": "./packages/perseus/src/widgets/sorter/sorter.stories.tsx" @@ -2751,24 +2751,6 @@ } ] }, - { - "id": "./packages/perseus/src/widgets/categorizer/categorizer.testdata.ts", - "name": "./packages/perseus/src/widgets/categorizer/categorizer.testdata.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/categorizer/categorizer.stories.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/explanation/explanation.testdata.ts", - "name": "./packages/perseus/src/widgets/explanation/explanation.testdata.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/explanation/explanation.stories.tsx" - } - ] - }, { "id": "./packages/perseus/src/widgets/dropdown/dropdown.testdata.ts", "name": "./packages/perseus/src/widgets/dropdown/dropdown.testdata.ts", @@ -2779,20 +2761,20 @@ ] }, { - "id": "./packages/perseus/src/widgets/input-number/input-number.testdata.ts", - "name": "./packages/perseus/src/widgets/input-number/input-number.testdata.ts", + "id": "./packages/perseus/src/widgets/categorizer/categorizer.testdata.ts", + "name": "./packages/perseus/src/widgets/categorizer/categorizer.testdata.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/input-number/input-number.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/categorizer/categorizer.stories.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.testdata.ts", - "name": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.testdata.ts", + "id": "./packages/perseus/src/widgets/image/image.testdata.ts", + "name": "./packages/perseus/src/widgets/image/image.testdata.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/image/image.stories.tsx" } ] }, @@ -2806,62 +2788,56 @@ ] }, { - "id": "./packages/perseus/src/widgets/iframe/iframe.testdata.ts", - "name": "./packages/perseus/src/widgets/iframe/iframe.testdata.ts", + "id": "./packages/perseus/src/widgets/explanation/explanation.testdata.ts", + "name": "./packages/perseus/src/widgets/explanation/explanation.testdata.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/iframe/iframe.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/explanation/explanation.stories.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/graded-group/graded-group.testdata.ts", - "name": "./packages/perseus/src/widgets/graded-group/graded-group.testdata.ts", + "id": "./packages/perseus/src/widgets/grapher/grapher.testdata.ts", + "name": "./packages/perseus/src/widgets/grapher/grapher.testdata.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/grapher/grapher.stories.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/image/image.testdata.ts", - "name": "./packages/perseus/src/widgets/image/image.testdata.ts", + "id": "./packages/perseus/src/widgets/group/group.testdata.ts", + "name": "./packages/perseus/src/widgets/group/group.testdata.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/image/image.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/group/group.stories.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/grapher/grapher.testdata.ts", - "name": "./packages/perseus/src/widgets/grapher/grapher.testdata.ts", + "id": "./packages/perseus/src/widgets/iframe/iframe.testdata.ts", + "name": "./packages/perseus/src/widgets/iframe/iframe.testdata.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/grapher/grapher.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/iframe/iframe.stories.tsx" } ] }, { - "id": "./dev/flipbook.tsx", - "name": "./dev/flipbook.tsx", + "id": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.testdata.ts", + "name": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.testdata.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.stories.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph.testdata.ts", - "name": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph.testdata.ts", + "id": "./packages/perseus/src/widgets/interaction/interaction.testdata.ts", + "name": "./packages/perseus/src/widgets/interaction/interaction.testdata.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph.stories.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-functions.stories.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/__stories__/interactive-graph-editor.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/interaction/interaction.stories.tsx" } ] }, @@ -2917,20 +2893,44 @@ ] }, { - "id": "./packages/perseus/src/widgets/interaction/interaction.testdata.ts", - "name": "./packages/perseus/src/widgets/interaction/interaction.testdata.ts", + "id": "./packages/perseus/src/widgets/graded-group/graded-group.testdata.ts", + "name": "./packages/perseus/src/widgets/graded-group/graded-group.testdata.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interaction/interaction.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.stories.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/group/group.testdata.ts", - "name": "./packages/perseus/src/widgets/group/group.testdata.ts", + "id": "./dev/flipbook.tsx", + "name": "./dev/flipbook.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/group/group.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph.stories.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph.testdata.ts", + "name": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph.testdata.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph.stories.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-functions.stories.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/__stories__/interactive-graph-editor.stories.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/input-number/input-number.testdata.ts", + "name": "./packages/perseus/src/widgets/input-number/input-number.testdata.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/input-number/input-number.stories.tsx" } ] }, @@ -2963,28 +2963,28 @@ "moduleName": "./packages/perseus/src/widgets/definition/definition.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/table/table.tsx" + "moduleName": "./packages/perseus/src/widgets/group/group.tsx" }, { "moduleName": "./packages/perseus/src/widgets/image/image.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/group/group.tsx" + "moduleName": "./packages/perseus/src/widgets/table/table.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/orderer/orderer.tsx" + "moduleName": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx" + "moduleName": "./packages/perseus/src/widgets/orderer/orderer.tsx" }, { "moduleName": "./packages/perseus/src/components/sortable.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/label-image/answer-pill.tsx" + "moduleName": "./packages/perseus/src/server-item-renderer.tsx" }, { - "moduleName": "./packages/perseus/src/server-item-renderer.tsx" + "moduleName": "./packages/perseus/src/widgets/label-image/answer-pill.tsx" }, { "moduleName": "./packages/perseus/src/hint-renderer.tsx" @@ -3004,15 +3004,15 @@ { "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.tsx" }, - { - "moduleName": "./packages/perseus/src/widgets/matcher/matcher.tsx" - }, { "moduleName": "./packages/perseus/src/widgets/label-image/label-image.tsx" }, { "moduleName": "./packages/perseus/src/widgets/passage/passage.tsx" - } + }, + { + "moduleName": "./packages/perseus/src/widgets/matcher/matcher.tsx" + } ] }, { @@ -3079,62 +3079,86 @@ ] }, { - "id": "./packages/perseus-editor/src/components/blur-input.tsx", - "name": "./packages/perseus-editor/src/components/blur-input.tsx", + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/components/interactive-graph-settings.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/components/interactive-graph-settings.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/components/__stories__/blur-input.stories.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/interactive-graph-settings.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/input-number-editor.tsx" - }, + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/interactive-graph-editor.tsx" + } + ] + }, + { + "id": "./packages/perseus-editor/src/components/__stories__/interactive-graph-settings.argtypes.ts", + "name": "./packages/perseus-editor/src/components/__stories__/interactive-graph-settings.argtypes.ts", + "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/image-editor.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/interactive-graph-settings.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/iframe-editor.tsx" - }, + "moduleName": "./packages/perseus-editor/src/widgets/__stories__/interactive-graph-editor.argtypes.ts" + } + ] + }, + { + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx", + "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/video-editor.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-point-settings.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/cs-program-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/plotter-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" } ] }, { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/color-select.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/color-select.tsx", + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-label-settings.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-label-settings.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/components/__stories__/color-select.stories.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-label-settings.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-label-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-vector-settings.tsx" } ] }, + { + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-line-settings.stories.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx" + } + ] + }, { "id": "./packages/perseus-editor/src/item-extras-editor.tsx", "name": "./packages/perseus-editor/src/item-extras-editor.tsx", @@ -3148,17 +3172,14 @@ ] }, { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx", + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-point-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-polygon-settings.stories.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" } ] }, @@ -3175,92 +3196,71 @@ ] }, { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-label-settings.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-label-settings.tsx", + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-label-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-ellipse-settings.stories.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx" - }, + } + ] + }, + { + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/color-select.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/color-select.tsx", + "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/color-select.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-label-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-vector-settings.tsx" - } - ] - }, - { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx", - "reasons": [ + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" + }, { - "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-ellipse-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-vector-settings.tsx" } ] }, { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx", + "id": "./packages/perseus-editor/src/components/blur-input.tsx", + "name": "./packages/perseus-editor/src/components/blur-input.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-line-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/components/__stories__/blur-input.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx" - } - ] - }, - { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/components/interactive-graph-settings.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/components/interactive-graph-settings.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus-editor/src/components/__stories__/interactive-graph-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/input-number-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/interactive-graph-editor.tsx" - } - ] - }, - { - "id": "./packages/perseus-editor/src/components/__stories__/interactive-graph-settings.argtypes.ts", - "name": "./packages/perseus-editor/src/components/__stories__/interactive-graph-settings.argtypes.ts", - "reasons": [ + "moduleName": "./packages/perseus-editor/src/widgets/image-editor.tsx" + }, { - "moduleName": "./packages/perseus-editor/src/components/__stories__/interactive-graph-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/video-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/__stories__/interactive-graph-editor.argtypes.ts" - } - ] - }, - { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx", - "reasons": [ + "moduleName": "./packages/perseus-editor/src/widgets/cs-program-editor.tsx" + }, { - "moduleName": "./packages/perseus-editor/src/components/__stories__/locked-polygon-settings.stories.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/iframe-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/plotter-editor.tsx" } ] }, @@ -3358,38 +3358,38 @@ ] }, { - "id": "./packages/perseus/src/__testdata__/server-item-renderer.testdata.ts", - "name": "./packages/perseus/src/__testdata__/server-item-renderer.testdata.ts", + "id": "./packages/perseus/src/components/button-group.tsx", + "name": "./packages/perseus/src/components/button-group.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/__stories__/server-item-renderer.stories.tsx" + "moduleName": "./packages/perseus/src/components/__stories__/button-group.stories.tsx" + }, + { + "moduleName": "./packages/perseus/src/components.ts" + }, + { + "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" } ] }, { - "id": "./packages/perseus/src/server-item-renderer.tsx", - "name": "./packages/perseus/src/server-item-renderer.tsx", + "id": "./packages/perseus/src/__testdata__/server-item-renderer.testdata.ts", + "name": "./packages/perseus/src/__testdata__/server-item-renderer.testdata.ts", "reasons": [ { "moduleName": "./packages/perseus/src/__stories__/server-item-renderer.stories.tsx" - }, - { - "moduleName": "./packages/perseus/src/index.ts" } ] }, { - "id": "./packages/perseus/src/components/button-group.tsx", - "name": "./packages/perseus/src/components/button-group.tsx", + "id": "./packages/perseus/src/server-item-renderer.tsx", + "name": "./packages/perseus/src/server-item-renderer.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/components/__stories__/button-group.stories.tsx" - }, - { - "moduleName": "./packages/perseus/src/components.ts" + "moduleName": "./packages/perseus/src/__stories__/server-item-renderer.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" + "moduleName": "./packages/perseus/src/index.ts" } ] }, @@ -3444,6 +3444,15 @@ } ] }, + { + "id": "./packages/perseus/src/widgets/python-program/python-program.testdata.ts", + "name": "./packages/perseus/src/widgets/python-program/python-program.testdata.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/python-program/python-program.stories.tsx" + } + ] + }, { "id": "./packages/perseus/src/widgets/matrix/matrix.testdata.ts", "name": "./packages/perseus/src/widgets/matrix/matrix.testdata.ts", @@ -3465,15 +3474,6 @@ } ] }, - { - "id": "./packages/perseus/src/widgets/python-program/python-program.testdata.ts", - "name": "./packages/perseus/src/widgets/python-program/python-program.testdata.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/python-program/python-program.stories.tsx" - } - ] - }, { "id": "./packages/perseus/src/widgets/number-line/number-line.testdata.ts", "name": "./packages/perseus/src/widgets/number-line/number-line.testdata.ts", @@ -3513,54 +3513,6 @@ } ] }, - { - "id": "./packages/perseus/src/widgets/radio/choice-none-above.tsx", - "name": "./packages/perseus/src/widgets/radio/choice-none-above.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/radio/__stories__/choice-none-above.stories.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/radio/__tests__/base-radio.testdata.ts", - "name": "./packages/perseus/src/widgets/radio/__tests__/base-radio.testdata.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/radio/__stories__/base-radio.stories.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/radio/base-radio.tsx", - "name": "./packages/perseus/src/widgets/radio/base-radio.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/radio/__stories__/base-radio.stories.tsx" - }, - { - "moduleName": "./packages/perseus/src/index.ts" - }, - { - "moduleName": "./packages/perseus/src/widgets/radio/radio-component.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/radio/option-status.tsx", - "name": "./packages/perseus/src/widgets/radio/option-status.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/radio/__stories__/option-status.stories.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/radio/choice.tsx" - } - ] - }, { "id": "./packages/perseus/src/styles/constants.ts", "name": "./packages/perseus/src/styles/constants.ts", @@ -3599,10 +3551,10 @@ "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/legacy-grid.tsx" }, { - "moduleName": "./packages/perseus/src/hints-renderer.tsx" + "moduleName": "./packages/perseus/src/components/hud.tsx" }, { - "moduleName": "./packages/perseus/src/components/hud.tsx" + "moduleName": "./packages/perseus/src/hints-renderer.tsx" }, { "moduleName": "./packages/perseus/src/components/lint.tsx" @@ -3617,10 +3569,10 @@ "moduleName": "./packages/perseus/src/widgets/radio/choice-icon/choice-icon.tsx" }, { - "moduleName": "./packages/perseus/src/hint-renderer.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" + "moduleName": "./packages/perseus/src/hint-renderer.tsx" }, { "moduleName": "./packages/perseus/src/styles/shared.ts" @@ -3629,10 +3581,10 @@ "moduleName": "./packages/perseus/src/widgets/cs-program/cs-program.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" + "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.tsx" + "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" } ] }, @@ -3649,17 +3601,38 @@ ] }, { - "id": "./packages/perseus/src/widgets/radio/choice.tsx", - "name": "./packages/perseus/src/widgets/radio/choice.tsx", + "id": "./packages/perseus/src/widgets/radio/__tests__/base-radio.testdata.ts", + "name": "./packages/perseus/src/widgets/radio/__tests__/base-radio.testdata.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/radio/__stories__/choice.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/__stories__/base-radio.stories.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/radio/base-radio.tsx", + "name": "./packages/perseus/src/widgets/radio/base-radio.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/radio/__stories__/base-radio.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/radio/choice-none-above.tsx" + "moduleName": "./packages/perseus/src/index.ts" }, { - "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/radio-component.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/radio/option-status.tsx", + "name": "./packages/perseus/src/widgets/radio/option-status.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/radio/__stories__/option-status.stories.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/radio/choice.tsx" } ] }, @@ -3679,11 +3652,38 @@ "id": "./packages/perseus/src/widgets/radio/__tests__/radio.testdata.ts", "name": "./packages/perseus/src/widgets/radio/__tests__/radio.testdata.ts", "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/radio/__stories__/radio.stories.tsx" + }, { "moduleName": "./packages/perseus-editor/src/__stories__/content-preview.stories.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/radio/choice-none-above.tsx", + "name": "./packages/perseus/src/widgets/radio/choice-none-above.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/radio/__stories__/choice-none-above.stories.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/radio/__stories__/radio.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/radio/choice.tsx", + "name": "./packages/perseus/src/widgets/radio/choice.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/radio/__stories__/choice.stories.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/radio/choice-none-above.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" } ] }, @@ -3798,6 +3798,15 @@ } ] }, + { + "id": "./packages/perseus/src/widgets/passage-ref/passage-ref.testdata.ts", + "name": "./packages/perseus/src/widgets/passage-ref/passage-ref.testdata.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/passage-ref/passage-ref.stories.tsx" + } + ] + }, { "id": "./packages/perseus/src/widgets/passage/__tests__/passage.testdata.ts", "name": "./packages/perseus/src/widgets/passage/__tests__/passage.testdata.ts", @@ -3808,56 +3817,80 @@ ] }, { - "id": "./packages/perseus/src/widgets/passage-ref/passage-ref.testdata.ts", - "name": "./packages/perseus/src/widgets/passage-ref/passage-ref.testdata.ts", + "id": "./packages/perseus/src/widgets/video/video-transcript-link.tsx", + "name": "./packages/perseus/src/widgets/video/video-transcript-link.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/passage-ref/passage-ref.stories.tsx" + "moduleName": "./packages/perseus/src/widgets/video/video-transcript-link.stories.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/video/video.tsx" } ] }, { - "id": "./packages/math-input/src/components/input/cursor-contexts.ts", - "name": "./packages/math-input/src/components/input/cursor-contexts.ts", + "id": "./packages/perseus/src/widgets/sorter/sorter.testdata.ts", + "name": "./packages/perseus/src/widgets/sorter/sorter.testdata.ts", "reasons": [ { - "moduleName": "./packages/math-input/src/components/keypad/keypad-mathquill.stories.tsx" - }, - { - "moduleName": "./packages/math-input/src/components/input/mathquill-helpers.ts" - }, + "moduleName": "./packages/perseus/src/widgets/sorter/sorter.stories.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/video/video.testdata.ts", + "name": "./packages/perseus/src/widgets/video/video.testdata.ts", + "reasons": [ { - "moduleName": "./packages/math-input/src/index.ts" - }, + "moduleName": "./packages/perseus/src/widgets/video/video.stories.tsx" + } + ] + }, + { + "id": "./packages/math-input/src/components/keypad/keypad.tsx", + "name": "./packages/math-input/src/components/keypad/keypad.tsx", + "reasons": [ { - "moduleName": "./packages/math-input/src/components/key-handlers/handle-jump-out.ts" + "moduleName": "./packages/math-input/src/components/keypad/index.tsx" }, { - "moduleName": "./packages/math-input/src/components/keypad/utils.ts" + "moduleName": "./packages/math-input/src/components/keypad/mobile-keypad-internals.tsx" } ] }, { - "id": "./packages/math-input/src/components/input/mathquill-helpers.ts", - "name": "./packages/math-input/src/components/input/mathquill-helpers.ts", + "id": "./packages/math-input/src/components/keypad/mobile-keypad.tsx", + "name": "./packages/math-input/src/components/keypad/mobile-keypad.tsx", "reasons": [ { - "moduleName": "./packages/math-input/src/components/keypad/keypad-mathquill.stories.tsx" - }, + "moduleName": "./packages/math-input/src/components/keypad/index.tsx" + } + ] + }, + { + "id": "./packages/math-input/less/main.less", + "name": "./packages/math-input/less/main.less", + "reasons": [ { "moduleName": "./packages/math-input/src/index.ts" - }, - { - "moduleName": "./packages/math-input/src/components/key-handlers/handle-arrow.ts" - }, - { - "moduleName": "./packages/math-input/src/components/key-handlers/handle-jump-out.ts" - }, + } + ] + }, + { + "id": "./packages/math-input/src/version.ts", + "name": "./packages/math-input/src/version.ts", + "reasons": [ { - "moduleName": "./packages/math-input/src/components/input/math-wrapper.ts" - }, + "moduleName": "./packages/math-input/src/index.ts" + } + ] + }, + { + "id": "./packages/math-input/src/components/input/math-input.tsx", + "name": "./packages/math-input/src/components/input/math-input.tsx", + "reasons": [ { - "moduleName": "./packages/math-input/src/components/key-handlers/handle-backspace.ts" + "moduleName": "./packages/math-input/src/index.ts" } ] }, @@ -3865,6 +3898,9 @@ "id": "./packages/math-input/src/components/input/mathquill-instance.ts", "name": "./packages/math-input/src/components/input/mathquill-instance.ts", "reasons": [ + { + "moduleName": "./packages/math-input/src/index.ts" + }, { "moduleName": "./packages/math-input/src/components/keypad/keypad-mathquill.stories.tsx" }, @@ -3875,14 +3911,11 @@ "moduleName": "./packages/math-input/src/components/key-handlers/key-translator.ts" }, { - "moduleName": "./packages/math-input/src/index.ts" + "moduleName": "./packages/math-input/src/components/key-handlers/handle-arrow.ts" }, { "moduleName": "./packages/math-input/src/components/key-handlers/handle-exponent.ts" }, - { - "moduleName": "./packages/math-input/src/components/key-handlers/handle-arrow.ts" - }, { "moduleName": "./packages/math-input/src/components/key-handlers/handle-jump-out.ts" }, @@ -3895,98 +3928,224 @@ ] }, { - "id": "./packages/math-input/src/components/key-handlers/key-translator.ts", - "name": "./packages/math-input/src/components/key-handlers/key-translator.ts", + "id": "./packages/math-input/src/components/input/cursor-contexts.ts", + "name": "./packages/math-input/src/components/input/cursor-contexts.ts", "reasons": [ + { + "moduleName": "./packages/math-input/src/index.ts" + }, { "moduleName": "./packages/math-input/src/components/keypad/keypad-mathquill.stories.tsx" }, { - "moduleName": "./packages/math-input/src/index.ts" + "moduleName": "./packages/math-input/src/components/input/mathquill-helpers.ts" }, { - "moduleName": "./packages/math-input/src/components/input/math-wrapper.ts" - } - ] - }, - { - "id": "./packages/perseus/src/init.ts", - "name": "./packages/perseus/src/init.ts", - "reasons": [ + "moduleName": "./packages/math-input/src/components/key-handlers/handle-jump-out.ts" + }, { - "moduleName": "./packages/perseus/src/index.ts" + "moduleName": "./packages/math-input/src/components/keypad/utils.ts" } ] }, { - "id": "./packages/perseus/src/perseus-api.tsx", - "name": "./packages/perseus/src/perseus-api.tsx", + "id": "./packages/math-input/src/components/input/mathquill-helpers.ts", + "name": "./packages/math-input/src/components/input/mathquill-helpers.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/index.ts" + "moduleName": "./packages/math-input/src/index.ts" }, { - "moduleName": "./packages/perseus/src/components/input-with-examples.tsx" + "moduleName": "./packages/math-input/src/components/keypad/keypad-mathquill.stories.tsx" }, { - "moduleName": "./packages/perseus/src/article-renderer.tsx" + "moduleName": "./packages/math-input/src/components/key-handlers/handle-arrow.ts" }, { - "moduleName": "./packages/perseus/src/renderer.tsx" + "moduleName": "./packages/math-input/src/components/key-handlers/handle-jump-out.ts" }, { - "moduleName": "./packages/perseus/src/widgets/table/table.tsx" + "moduleName": "./packages/math-input/src/components/input/math-wrapper.ts" }, { - "moduleName": "./packages/perseus/src/widgets/plotter/plotter.tsx" - }, + "moduleName": "./packages/math-input/src/components/key-handlers/handle-backspace.ts" + } + ] + }, + { + "id": "./packages/math-input/src/components/i18n-context.tsx", + "name": "./packages/math-input/src/components/i18n-context.tsx", + "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/dropdown/dropdown.tsx" + "moduleName": "./packages/math-input/src/index.ts" }, { - "moduleName": "./packages/perseus/src/widgets/group/group.tsx" + "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/geometry-page.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/number-line/number-line.tsx" + "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/numbers-page.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/orderer/orderer.tsx" + "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/operators-page.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/measurer/measurer.tsx" + "moduleName": "./packages/math-input/src/components/keypad/button-assets.tsx" }, { - "moduleName": "./packages/perseus/src/hints-renderer.tsx" + "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/extras-page.tsx" }, { - "moduleName": "./packages/perseus/src/components/sortable.tsx" + "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/fractions-page.tsx" }, { - "moduleName": "./packages/perseus/src/server-item-renderer.tsx" + "moduleName": "./packages/math-input/src/components/keypad/shared-keys.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/expression/expression.tsx" + "moduleName": "./packages/math-input/src/components/keypad/navigation-pad.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/radio/choice.tsx" - }, + "moduleName": "./packages/math-input/src/components/input/math-input.tsx" + } + ] + }, + { + "id": "./packages/math-input/src/components/prop-types.ts", + "name": "./packages/math-input/src/components/prop-types.ts", + "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/numeric-input/numeric-input.tsx" - }, + "moduleName": "./packages/math-input/src/index.ts" + } + ] + }, + { + "id": "./packages/math-input/src/utils.ts", + "name": "./packages/math-input/src/utils.ts", + "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" + "moduleName": "./packages/math-input/src/index.ts" }, { - "moduleName": "./packages/perseus/src/widgets/input-number/input-number.tsx" + "moduleName": "./packages/math-input/src/components/key-handlers/key-translator.ts" }, { - "moduleName": "./packages/perseus/src/widgets/matrix/matrix.tsx" + "moduleName": "./packages/math-input/src/components/keypad/button-assets.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/categorizer/categorizer.tsx" + "moduleName": "./packages/math-input/src/components/keypad/shared-keys.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.tsx" + "moduleName": "./packages/math-input/src/components/input/mathquill-instance.ts" + } + ] + }, + { + "id": "./packages/math-input/src/data/keys.ts", + "name": "./packages/math-input/src/data/keys.ts", + "reasons": [ + { + "moduleName": "./packages/math-input/src/index.ts" + } + ] + }, + { + "id": "./packages/math-input/src/enums.ts", + "name": "./packages/math-input/src/enums.ts", + "reasons": [ + { + "moduleName": "./packages/math-input/src/index.ts" + } + ] + }, + { + "id": "./packages/math-input/src/components/key-handlers/key-translator.ts", + "name": "./packages/math-input/src/components/key-handlers/key-translator.ts", + "reasons": [ + { + "moduleName": "./packages/math-input/src/index.ts" + }, + { + "moduleName": "./packages/math-input/src/components/keypad/keypad-mathquill.stories.tsx" + }, + { + "moduleName": "./packages/math-input/src/components/input/math-wrapper.ts" + } + ] + }, + { + "id": "./packages/perseus/src/init.ts", + "name": "./packages/perseus/src/init.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/index.ts" + } + ] + }, + { + "id": "./packages/perseus/src/perseus-api.tsx", + "name": "./packages/perseus/src/perseus-api.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus/src/index.ts" + }, + { + "moduleName": "./packages/perseus/src/components/input-with-examples.tsx" + }, + { + "moduleName": "./packages/perseus/src/article-renderer.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/group/group.tsx" + }, + { + "moduleName": "./packages/perseus/src/renderer.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/table/table.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/plotter/plotter.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/dropdown/dropdown.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/number-line/number-line.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/orderer/orderer.tsx" + }, + { + "moduleName": "./packages/perseus/src/hints-renderer.tsx" + }, + { + "moduleName": "./packages/perseus/src/components/sortable.tsx" + }, + { + "moduleName": "./packages/perseus/src/server-item-renderer.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/radio/choice.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/expression/expression.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/numeric-input/numeric-input.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/input-number/input-number.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/matrix/matrix.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/categorizer/categorizer.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.tsx" } ] }, @@ -4040,10 +4199,10 @@ "moduleName": "./packages/perseus/src/index.ts" }, { - "moduleName": "./packages/perseus/src/item-version.ts" + "moduleName": "./packages/perseus/src/init.ts" }, { - "moduleName": "./packages/perseus/src/init.ts" + "moduleName": "./packages/perseus/src/item-version.ts" }, { "moduleName": "./packages/perseus/src/renderability.ts" @@ -4283,10 +4442,10 @@ "moduleName": "./packages/perseus/src/widgets.ts" }, { - "moduleName": "./packages/perseus/src/components/svg-image.tsx" + "moduleName": "./packages/perseus/src/util/graphie.ts" }, { - "moduleName": "./packages/perseus/src/util/graphie.ts" + "moduleName": "./packages/perseus/src/components/svg-image.tsx" }, { "moduleName": "./packages/perseus/src/widgets/expression/expression-validator.ts" @@ -4336,15 +4495,15 @@ { "moduleName": "./packages/perseus/src/util/graphie.ts" }, - { - "moduleName": "./packages/perseus/src/util/answer-types.ts" - }, { "moduleName": "./packages/perseus/src/interactive2/wrapped-line.ts" }, { "moduleName": "./packages/perseus/src/util/geometry.ts" }, + { + "moduleName": "./packages/perseus/src/util/answer-types.ts" + }, { "moduleName": "./packages/perseus/src/util/tex.ts" }, @@ -4397,10 +4556,10 @@ "moduleName": "./packages/perseus/src/widgets/radio/choice.tsx" }, { - "moduleName": "./packages/perseus/src/hint-renderer.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" + "moduleName": "./packages/perseus/src/hint-renderer.tsx" }, { "moduleName": "./packages/perseus/src/styles/shared.ts" @@ -4436,14 +4595,17 @@ "moduleName": "./packages/perseus/src/index.ts" }, { - "moduleName": "./packages/perseus/src/__testdata__/server-item-renderer.testdata.ts" + "moduleName": "./packages/perseus/src/__testdata__/graphie.testdata.ts" }, { - "moduleName": "./packages/perseus/src/__testdata__/graphie.testdata.ts" + "moduleName": "./packages/perseus/src/__testdata__/server-item-renderer.testdata.ts" }, { "moduleName": "./packages/perseus/src/widgets/expression/expression.testdata.ts" }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-label.tsx" + }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-ellipse.tsx" }, @@ -4451,14 +4613,11 @@ "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-function.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-label.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-point.tsx" }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx" - }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-polygon.tsx" }, @@ -4541,37 +4700,37 @@ "moduleName": "./packages/perseus/src/widgets/definition/definition.tsx" }, { - "moduleName": "./packages/perseus/src/components/number-input.tsx" + "moduleName": "./packages/perseus/src/widgets/group/group.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/table/table.tsx" + "moduleName": "./packages/perseus/src/widgets/image/image.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/plotter/plotter.tsx" + "moduleName": "./packages/perseus/src/components/number-input.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/image/image.tsx" + "moduleName": "./packages/perseus/src/widgets/table/table.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/group/group.tsx" + "moduleName": "./packages/perseus/src/widgets/plotter/plotter.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/number-line/number-line.tsx" + "moduleName": "./packages/perseus/src/widgets/molecule/molecule.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/orderer/orderer.tsx" + "moduleName": "./packages/perseus/src/widgets/passage-ref/passage-ref.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx" + "moduleName": "./packages/perseus/src/widgets/video/video.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/video/video.tsx" + "moduleName": "./packages/perseus/src/widgets/number-line/number-line.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/passage-ref/passage-ref.tsx" + "moduleName": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/molecule/molecule.tsx" + "moduleName": "./packages/perseus/src/widgets/orderer/orderer.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/mafs-graph.tsx" @@ -4585,11 +4744,14 @@ { "moduleName": "./packages/perseus/src/hints-renderer.tsx" }, + { + "moduleName": "./packages/perseus/src/components/sortable.tsx" + }, { "moduleName": "./packages/perseus/src/components/math-input.tsx" }, { - "moduleName": "./packages/perseus/src/components/sortable.tsx" + "moduleName": "./packages/perseus/src/server-item-renderer.tsx" }, { "moduleName": "./packages/perseus/src/widgets/label-image/answer-pill.tsx" @@ -4598,34 +4760,31 @@ "moduleName": "./packages/perseus/src/widgets/label-image/marker.tsx" }, { - "moduleName": "./packages/perseus/src/server-item-renderer.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/expression/expression.tsx" + "moduleName": "./packages/perseus/src/widgets/phet-simulation/phet-simulation.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/phet-simulation/phet-simulation.tsx" + "moduleName": "./packages/perseus/src/widgets/video/video-transcript-link.tsx" }, { "moduleName": "./packages/perseus/src/widgets/radio/choice.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/radio/option-status.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/choice-icon/choice-icon.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/radio/choice-icon/choice-icon.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/option-status.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/numeric-input/numeric-input.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" }, { - "moduleName": "./packages/perseus/src/hint-renderer.tsx" + "moduleName": "./packages/perseus/src/widgets/expression/expression.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" + "moduleName": "./packages/perseus/src/widgets/numeric-input/numeric-input.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/video/video-transcript-link.tsx" + "moduleName": "./packages/perseus/src/hint-renderer.tsx" }, { "moduleName": "./packages/perseus/src/widgets/input-number/input-number.tsx" @@ -4642,14 +4801,11 @@ { "moduleName": "./packages/perseus/src/widgets/explanation/explanation.tsx" }, - { - "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" - }, { "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/matcher/matcher.tsx" + "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" }, { "moduleName": "./packages/perseus/src/widgets/label-image/label-image.tsx" @@ -4657,6 +4813,9 @@ { "moduleName": "./packages/perseus/src/widgets/passage/passage.tsx" }, + { + "moduleName": "./packages/perseus/src/widgets/matcher/matcher.tsx" + }, { "moduleName": "./packages/perseus/src/widgets/label-image/hide-answers-toggle.tsx" }, @@ -4685,28 +4844,28 @@ "moduleName": "./packages/perseus/src/article-renderer.tsx" }, { - "moduleName": "./packages/perseus/src/components/svg-image.tsx" + "moduleName": "./packages/perseus/src/components/graphie-classes.ts" }, { - "moduleName": "./packages/perseus/src/components/graphie-classes.ts" + "moduleName": "./packages/perseus/src/components/svg-image.tsx" }, { "moduleName": "./dev/flipbook.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/radio/radio.ts" + "moduleName": "./packages/perseus/src/widgets/interactive-graph.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graph.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/radio.ts" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph-validator.ts" + "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" }, { "moduleName": "./packages/perseus/src/util/geometry.ts" }, { - "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph-validator.ts" }, { "moduleName": "./packages/perseus/src/widgets/plotter/plotter-validator.ts" @@ -4715,7 +4874,10 @@ "moduleName": "./packages/perseus/src/widgets/radio/radio-component.tsx" }, { - "moduleName": "./packages/perseus/src/components/number-input.tsx" + "moduleName": "./packages/perseus/src/widgets/iframe/iframe.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interaction/interaction.tsx" }, { "moduleName": "./packages/perseus/src/components/graphie.tsx" @@ -4724,23 +4886,20 @@ "moduleName": "./packages/perseus/src/components/graph.tsx" }, { - "moduleName": "./packages/perseus/src/renderer.tsx" + "moduleName": "./packages/perseus/src/components/number-input.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/table/table.tsx" + "moduleName": "./packages/perseus/src/renderer.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/iframe/iframe.tsx" + "moduleName": "./packages/perseus/src/widgets/table/table.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interaction/interaction.tsx" + "moduleName": "./packages/perseus/src/widgets/sorter/sorter.tsx" }, { "moduleName": "./packages/perseus/src/widgets/orderer/orderer.tsx" }, - { - "moduleName": "./packages/perseus/src/widgets/sorter/sorter.tsx" - }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/reducer/interactive-graph-reducer.ts" }, @@ -4793,10 +4952,10 @@ "moduleName": "./packages/perseus/src/widgets/interactive-graph.tsx" }, { - "moduleName": "./packages/perseus/src/interactive2.ts" + "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" + "moduleName": "./packages/perseus/src/interactive2.ts" }, { "moduleName": "./packages/perseus/src/util/interactive.ts" @@ -4964,25 +5123,25 @@ "moduleName": "./packages/perseus/src/widgets/iframe/iframe.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/image/image.tsx" + "moduleName": "./packages/perseus/src/widgets/group/group.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/group/group.tsx" + "moduleName": "./packages/perseus/src/widgets/image/image.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interaction/interaction.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/number-line/number-line.tsx" + "moduleName": "./packages/perseus/src/widgets/passage-ref/passage-ref.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx" + "moduleName": "./packages/perseus/src/widgets/video/video.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/video/video.tsx" + "moduleName": "./packages/perseus/src/widgets/number-line/number-line.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/passage-ref/passage-ref.tsx" + "moduleName": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx" }, { "moduleName": "./packages/perseus/src/widgets/expression/expression.tsx" @@ -4997,10 +5156,10 @@ "moduleName": "./packages/perseus/src/widgets/explanation/explanation.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" + "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.tsx" + "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" } ] }, @@ -5100,6 +5259,15 @@ } ] }, + { + "id": "./packages/keypad-context/src/keypad-context.tsx", + "name": "./packages/keypad-context/src/keypad-context.tsx", + "reasons": [ + { + "moduleName": "./packages/keypad-context/src/index.ts" + } + ] + }, { "id": "./packages/math-input/src/components/input/mathquill-types.ts", "name": "./packages/math-input/src/components/input/mathquill-types.ts", @@ -5108,10 +5276,10 @@ "moduleName": "./packages/math-input/src/components/input/mathquill-helpers.ts" }, { - "moduleName": "./packages/math-input/src/components/key-handlers/handle-exponent.ts" + "moduleName": "./packages/math-input/src/components/key-handlers/handle-arrow.ts" }, { - "moduleName": "./packages/math-input/src/components/key-handlers/handle-arrow.ts" + "moduleName": "./packages/math-input/src/components/key-handlers/handle-exponent.ts" }, { "moduleName": "./packages/math-input/src/components/key-handlers/handle-jump-out.ts" @@ -5122,23 +5290,14 @@ ] }, { - "id": "./packages/math-input/src/utils.ts", - "name": "./packages/math-input/src/utils.ts", + "id": "./packages/perseus-editor/src/all-editors.ts", + "name": "./packages/perseus-editor/src/all-editors.ts", "reasons": [ { - "moduleName": "./packages/math-input/src/components/key-handlers/key-translator.ts" - }, - { - "moduleName": "./packages/math-input/src/index.ts" - }, - { - "moduleName": "./packages/math-input/src/components/keypad/button-assets.tsx" - }, - { - "moduleName": "./packages/math-input/src/components/keypad/shared-keys.tsx" + "moduleName": "./packages/perseus-editor/src/util/register-all-widgets-and-editors-for-testing.ts" }, { - "moduleName": "./packages/math-input/src/components/input/mathquill-instance.ts" + "moduleName": "./packages/perseus-editor/src/index.ts" } ] }, @@ -5169,168 +5328,6 @@ } ] }, - { - "id": "./packages/perseus/src/widgets/sorter/sorter.testdata.ts", - "name": "./packages/perseus/src/widgets/sorter/sorter.testdata.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/sorter/sorter.stories.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/video/video-transcript-link.tsx", - "name": "./packages/perseus/src/widgets/video/video-transcript-link.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/video/video-transcript-link.stories.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/video/video.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/video/video.testdata.ts", - "name": "./packages/perseus/src/widgets/video/video.testdata.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/video/video.stories.tsx" - } - ] - }, - { - "id": "./packages/math-input/src/components/keypad/keypad.tsx", - "name": "./packages/math-input/src/components/keypad/keypad.tsx", - "reasons": [ - { - "moduleName": "./packages/math-input/src/components/keypad/index.tsx" - }, - { - "moduleName": "./packages/math-input/src/components/keypad/mobile-keypad-internals.tsx" - } - ] - }, - { - "id": "./packages/math-input/src/components/keypad/mobile-keypad.tsx", - "name": "./packages/math-input/src/components/keypad/mobile-keypad.tsx", - "reasons": [ - { - "moduleName": "./packages/math-input/src/components/keypad/index.tsx" - } - ] - }, - { - "id": "./packages/math-input/src/components/i18n-context.tsx", - "name": "./packages/math-input/src/components/i18n-context.tsx", - "reasons": [ - { - "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/geometry-page.tsx" - }, - { - "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/numbers-page.tsx" - }, - { - "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/operators-page.tsx" - }, - { - "moduleName": "./packages/math-input/src/index.ts" - }, - { - "moduleName": "./packages/math-input/src/components/keypad/button-assets.tsx" - }, - { - "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/extras-page.tsx" - }, - { - "moduleName": "./packages/math-input/src/components/keypad/shared-keys.tsx" - }, - { - "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/fractions-page.tsx" - }, - { - "moduleName": "./packages/math-input/src/components/keypad/navigation-pad.tsx" - }, - { - "moduleName": "./packages/math-input/src/components/input/math-input.tsx" - } - ] - }, - { - "id": "./packages/math-input/less/main.less", - "name": "./packages/math-input/less/main.less", - "reasons": [ - { - "moduleName": "./packages/math-input/src/index.ts" - } - ] - }, - { - "id": "./packages/math-input/src/version.ts", - "name": "./packages/math-input/src/version.ts", - "reasons": [ - { - "moduleName": "./packages/math-input/src/index.ts" - } - ] - }, - { - "id": "./packages/math-input/src/components/input/math-input.tsx", - "name": "./packages/math-input/src/components/input/math-input.tsx", - "reasons": [ - { - "moduleName": "./packages/math-input/src/index.ts" - } - ] - }, - { - "id": "./packages/math-input/src/components/prop-types.ts", - "name": "./packages/math-input/src/components/prop-types.ts", - "reasons": [ - { - "moduleName": "./packages/math-input/src/index.ts" - } - ] - }, - { - "id": "./packages/math-input/src/data/keys.ts", - "name": "./packages/math-input/src/data/keys.ts", - "reasons": [ - { - "moduleName": "./packages/math-input/src/index.ts" - } - ] - }, - { - "id": "./packages/math-input/src/enums.ts", - "name": "./packages/math-input/src/enums.ts", - "reasons": [ - { - "moduleName": "./packages/math-input/src/index.ts" - } - ] - }, - { - "id": "./packages/perseus-editor/src/all-editors.ts", - "name": "./packages/perseus-editor/src/all-editors.ts", - "reasons": [ - { - "moduleName": "./packages/perseus-editor/src/util/register-all-widgets-and-editors-for-testing.ts" - }, - { - "moduleName": "./packages/perseus-editor/src/index.ts" - } - ] - }, - { - "id": "./packages/keypad-context/src/keypad-context.tsx", - "name": "./packages/keypad-context/src/keypad-context.tsx", - "reasons": [ - { - "moduleName": "./packages/keypad-context/src/index.ts" - } - ] - }, { "id": "./packages/perseus-editor/src/version.ts", "name": "./packages/perseus-editor/src/version.ts", @@ -5408,13 +5405,13 @@ "moduleName": "./packages/perseus-editor/src/widgets/matrix-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/group-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/passage-editor.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/table-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/passage-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/group-editor.tsx" }, { "moduleName": "./packages/perseus-editor/src/multirenderer-editor.tsx" @@ -5538,15 +5535,6 @@ } ] }, - { - "id": "./packages/perseus/src/components/info-tip/info-tip-base.tsx", - "name": "./packages/perseus/src/components/info-tip/info-tip-base.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/components/info-tip/index.tsx" - } - ] - }, { "id": "./packages/perseus/src/asset-context.ts", "name": "./packages/perseus/src/asset-context.ts", @@ -5555,13 +5543,13 @@ "moduleName": "./packages/perseus/src/components/zoomable-tex.tsx" }, { - "moduleName": "./packages/perseus/src/components/graph.tsx" + "moduleName": "./packages/perseus/src/widgets/image/image.tsx" }, { - "moduleName": "./packages/perseus/src/renderer.tsx" + "moduleName": "./packages/perseus/src/components/graph.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/image/image.tsx" + "moduleName": "./packages/perseus/src/renderer.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/legacy-grid.tsx" @@ -5575,26 +5563,11 @@ ] }, { - "id": "./packages/perseus/src/basic-widgets.ts", - "name": "./packages/perseus/src/basic-widgets.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/all-widgets.ts" - }, - { - "moduleName": "./packages/perseus/src/init.ts" - } - ] - }, - { - "id": "./packages/perseus/src/extra-widgets.ts", - "name": "./packages/perseus/src/extra-widgets.ts", + "id": "./packages/perseus/src/components/info-tip/info-tip-base.tsx", + "name": "./packages/perseus/src/components/info-tip/info-tip-base.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/all-widgets.ts" - }, - { - "moduleName": "./packages/perseus/src/init.ts" + "moduleName": "./packages/perseus/src/components/info-tip/index.tsx" } ] }, @@ -5602,6 +5575,9 @@ "id": "./packages/perseus-core/src/index.ts", "name": "./packages/perseus-core/src/index.ts", "reasons": [ + { + "moduleName": "./packages/math-input/src/version.ts" + }, { "moduleName": "./packages/perseus/src/version.ts" }, @@ -5614,9 +5590,6 @@ { "moduleName": "./packages/perseus/src/multi-items/trees.ts" }, - { - "moduleName": "./packages/math-input/src/version.ts" - }, { "moduleName": "./packages/perseus-editor/src/article-editor.tsx" }, @@ -5629,9 +5602,6 @@ { "moduleName": "./packages/perseus-editor/src/version.ts" }, - { - "moduleName": "./packages/perseus/src/components/svg-image.tsx" - }, { "moduleName": "./packages/perseus/src/components/graphie-classes.ts" }, @@ -5641,9 +5611,15 @@ { "moduleName": "./packages/perseus/src/util/graphie.ts" }, + { + "moduleName": "./packages/perseus/src/components/svg-image.tsx" + }, { "moduleName": "./packages/perseus/src/widgets/expression/expression-validator.ts" }, + { + "moduleName": "./packages/perseus/src/error-boundary.tsx" + }, { "moduleName": "./packages/perseus/src/widgets/interactive-graph.tsx" }, @@ -5653,9 +5629,6 @@ { "moduleName": "./packages/perseus-editor/src/editor.tsx" }, - { - "moduleName": "./packages/perseus/src/error-boundary.tsx" - }, { "moduleName": "./packages/kmath/src/version.ts" }, @@ -5663,19 +5636,19 @@ "moduleName": "./packages/kas/src/version.ts" }, { - "moduleName": "./packages/perseus-linter/src/rule.ts" + "moduleName": "./packages/perseus/src/interactive2/movable-helper-methods.ts" }, { - "moduleName": "./packages/perseus-linter/src/version.ts" + "moduleName": "./packages/perseus/src/util/interactive.ts" }, { - "moduleName": "./packages/perseus-linter/src/tree-transformer.ts" + "moduleName": "./packages/perseus-linter/src/rule.ts" }, { - "moduleName": "./packages/perseus/src/interactive2/movable-helper-methods.ts" + "moduleName": "./packages/perseus-linter/src/version.ts" }, { - "moduleName": "./packages/perseus/src/util/interactive.ts" + "moduleName": "./packages/perseus-linter/src/tree-transformer.ts" }, { "moduleName": "./packages/perseus/src/interactive2/movable.ts" @@ -5687,10 +5660,10 @@ "moduleName": "./packages/pure-markdown/src/version.ts" }, { - "moduleName": "./packages/simple-markdown/src/version.ts" + "moduleName": "./packages/perseus-editor/src/widgets/cs-program-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/cs-program-editor.tsx" + "moduleName": "./packages/simple-markdown/src/version.ts" }, { "moduleName": "./packages/perseus/src/mixins/changeable.ts" @@ -5722,11 +5695,11 @@ ] }, { - "id": "./packages/perseus/src/widgets/radio/radio.ts", - "name": "./packages/perseus/src/widgets/radio/radio.ts", + "id": "./packages/math-input/src/components/keypad/mobile-keypad-internals.tsx", + "name": "./packages/math-input/src/components/keypad/mobile-keypad-internals.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/radio/index.ts" + "moduleName": "./packages/math-input/src/components/keypad/mobile-keypad.tsx" } ] }, @@ -5739,6 +5712,30 @@ } ] }, + { + "id": "./packages/perseus/src/basic-widgets.ts", + "name": "./packages/perseus/src/basic-widgets.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/init.ts" + }, + { + "moduleName": "./packages/perseus/src/all-widgets.ts" + } + ] + }, + { + "id": "./packages/perseus/src/extra-widgets.ts", + "name": "./packages/perseus/src/extra-widgets.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/init.ts" + }, + { + "moduleName": "./packages/perseus/src/all-widgets.ts" + } + ] + }, { "id": "./packages/perseus/src/widgets/categorizer/categorizer.tsx", "name": "./packages/perseus/src/widgets/categorizer/categorizer.tsx", @@ -5748,6 +5745,24 @@ } ] }, + { + "id": "./packages/perseus/src/widgets/radio/radio.ts", + "name": "./packages/perseus/src/widgets/radio/radio.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/radio/index.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/table/table.tsx", + "name": "./packages/perseus/src/widgets/table/table.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/table/index.ts" + } + ] + }, { "id": "./packages/perseus/src/widgets/matrix/matrix.tsx", "name": "./packages/perseus/src/widgets/matrix/matrix.tsx", @@ -5796,15 +5811,6 @@ } ] }, - { - "id": "./packages/perseus/src/widgets/table/table.tsx", - "name": "./packages/perseus/src/widgets/table/table.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/table/index.ts" - } - ] - }, { "id": "./packages/perseus/src/multi-items/multi-renderer.tsx", "name": "./packages/perseus/src/multi-items/multi-renderer.tsx", @@ -5823,15 +5829,6 @@ } ] }, - { - "id": "./packages/math-input/src/components/keypad/mobile-keypad-internals.tsx", - "name": "./packages/math-input/src/components/keypad/mobile-keypad-internals.tsx", - "reasons": [ - { - "moduleName": "./packages/math-input/src/components/keypad/mobile-keypad.tsx" - } - ] - }, { "id": "./packages/perseus-editor/src/components/json-editor.tsx", "name": "./packages/perseus-editor/src/components/json-editor.tsx", @@ -5864,28 +5861,28 @@ "moduleName": "./packages/perseus/src/widgets/radio/radio-component.tsx" }, { - "moduleName": "./packages/perseus/src/renderer.tsx" + "moduleName": "./packages/perseus/src/widgets/group/group.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/table/table.tsx" + "moduleName": "./packages/perseus/src/widgets/image/image.tsx" }, { - "moduleName": "./packages/perseus/src/widget-container.tsx" + "moduleName": "./packages/perseus/src/renderer.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/image/image.tsx" + "moduleName": "./packages/perseus/src/widgets/table/table.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/group/group.tsx" + "moduleName": "./packages/perseus/src/widget-container.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/orderer/orderer.tsx" + "moduleName": "./packages/perseus/src/widgets/sorter/sorter.tsx" }, { "moduleName": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/sorter/sorter.tsx" + "moduleName": "./packages/perseus/src/widgets/orderer/orderer.tsx" }, { "moduleName": "./packages/perseus/src/hints-renderer.tsx" @@ -5917,17 +5914,17 @@ { "moduleName": "./packages/perseus/src/widgets/explanation/explanation.tsx" }, - { - "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" - }, { "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/matcher/matcher.tsx" + "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" }, { "moduleName": "./packages/perseus/src/widgets/passage/passage.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/matcher/matcher.tsx" } ] }, @@ -5954,16 +5951,16 @@ "moduleName": "./packages/perseus/src/widgets/interactive-graph.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph-validator.ts" + "moduleName": "./packages/perseus/src/interactive2/wrapped-line.ts" }, { - "moduleName": "./packages/perseus/src/interactive2/wrapped-line.ts" + "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" }, { "moduleName": "./packages/perseus/src/util/geometry.ts" }, { - "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/interactive-graph-validator.ts" }, { "moduleName": "./packages/perseus/src/interactive2/movable-helper-methods.ts" @@ -5971,6 +5968,9 @@ { "moduleName": "./packages/perseus/src/util/interactive.ts" }, + { + "moduleName": "./packages/perseus/src/interactive2/wrapped-drawing.ts" + }, { "moduleName": "./packages/perseus/src/interactive2/movable-line.ts" }, @@ -5980,9 +5980,6 @@ { "moduleName": "./packages/perseus/src/interactive2/movable-point.tsx" }, - { - "moduleName": "./packages/perseus/src/interactive2/wrapped-drawing.ts" - }, { "moduleName": "./packages/perseus/src/interactive2/movable-polygon.ts" }, @@ -5996,16 +5993,16 @@ "moduleName": "./packages/perseus/src/interactive2/wrapped-ellipse.ts" }, { - "moduleName": "./packages/perseus/src/components/number-input.tsx" + "moduleName": "./packages/perseus/src/widgets/interaction/interaction.tsx" }, { "moduleName": "./packages/perseus/src/components/graph.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/plotter-editor.tsx" + "moduleName": "./packages/perseus/src/components/number-input.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interaction/interaction.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/plotter-editor.tsx" }, { "moduleName": "./packages/perseus/src/widgets/number-line/number-line.tsx" @@ -6017,10 +6014,10 @@ "moduleName": "./packages/perseus/src/interactive2/movable-point-options.ts" }, { - "moduleName": "./packages/perseus/src/interactive2/movable-polygon-options.ts" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/reducer/interactive-graph-reducer.ts" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/reducer/interactive-graph-reducer.ts" + "moduleName": "./packages/perseus/src/interactive2/movable-polygon-options.ts" }, { "moduleName": "./packages/perseus/src/interactive2/get-clip-point.ts" @@ -6102,6 +6099,30 @@ } ] }, + { + "id": "./testing/ke-score-ui.tsx", + "name": "./testing/ke-score-ui.tsx", + "reasons": [ + { + "moduleName": "./testing/server-item-renderer-with-debug-ui.tsx" + }, + { + "moduleName": "./testing/multi-item-renderer-with-debug-ui.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/multi-items/__testdata__/multi-renderer.testdata.ts", + "name": "./packages/perseus/src/multi-items/__testdata__/multi-renderer.testdata.ts", + "reasons": [ + { + "moduleName": "./testing/multi-item-renderer-with-debug-ui.tsx" + }, + { + "moduleName": "./packages/perseus/src/multi-items/__stories__/multi-renderer.stories.tsx" + } + ] + }, { "id": "./packages/perseus-editor/src/widgets/cs-program-editor.tsx", "name": "./packages/perseus-editor/src/widgets/cs-program-editor.tsx", @@ -6366,30 +6387,6 @@ } ] }, - { - "id": "./testing/ke-score-ui.tsx", - "name": "./testing/ke-score-ui.tsx", - "reasons": [ - { - "moduleName": "./testing/server-item-renderer-with-debug-ui.tsx" - }, - { - "moduleName": "./testing/multi-item-renderer-with-debug-ui.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/multi-items/__testdata__/multi-renderer.testdata.ts", - "name": "./packages/perseus/src/multi-items/__testdata__/multi-renderer.testdata.ts", - "reasons": [ - { - "moduleName": "./testing/multi-item-renderer-with-debug-ui.tsx" - }, - { - "moduleName": "./packages/perseus/src/multi-items/__stories__/multi-renderer.stories.tsx" - } - ] - }, { "id": "./packages/perseus/src/util/geometry.ts", "name": "./packages/perseus/src/util/geometry.ts", @@ -6552,6 +6549,18 @@ } ] }, + { + "id": "./packages/perseus-editor/src/diffs/widget-diff.tsx", + "name": "./packages/perseus-editor/src/diffs/widget-diff.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus-editor/src/diffs/renderer-diff.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/diffs/item-diff.tsx" + } + ] + }, { "id": "./packages/perseus-editor/src/components/heading.tsx", "name": "./packages/perseus-editor/src/components/heading.tsx", @@ -6654,18 +6663,6 @@ } ] }, - { - "id": "./packages/perseus-editor/src/diffs/widget-diff.tsx", - "name": "./packages/perseus-editor/src/diffs/widget-diff.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus-editor/src/diffs/renderer-diff.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/diffs/item-diff.tsx" - } - ] - }, { "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-angle.tsx", "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-angle.tsx", @@ -6742,63 +6739,168 @@ { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-angle.tsx" }, + { + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-quadratic.tsx" + }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-sinusoid.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/util/graphie.ts", + "name": "./packages/perseus/src/util/graphie.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/util/graph-utils.ts" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-quadratic.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graph.tsx" + }, + { + "moduleName": "./packages/perseus/src/util/interactive.ts" + }, + { + "moduleName": "./packages/perseus/src/components/graphie.tsx" } ] }, { - "id": "./packages/perseus/src/zoom.ts", - "name": "./packages/perseus/src/zoom.ts", + "id": "./packages/perseus/src/util/interactive.ts", + "name": "./packages/perseus/src/util/interactive.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/components/svg-image.tsx" + "moduleName": "./packages/perseus/src/util/graph-utils.ts" } ] }, { - "id": "./packages/perseus-linter/src/rule.ts", - "name": "./packages/perseus-linter/src/rule.ts", + "id": "./packages/perseus/src/interactive2/movable-helper-methods.ts", + "name": "./packages/perseus/src/interactive2/movable-helper-methods.ts", "reasons": [ { - "moduleName": "./packages/perseus-linter/src/index.ts" - }, + "moduleName": "./packages/perseus/src/interactive2/interactive-util.ts" + } + ] + }, + { + "id": "./packages/perseus/src/interactive2.ts", + "name": "./packages/perseus/src/interactive2.ts", + "reasons": [ { - "moduleName": "./packages/perseus-linter/src/rules/absolute-url.ts" + "moduleName": "./packages/perseus/src/components/graphie-movables.ts" }, { - "moduleName": "./packages/perseus-linter/src/rules/blockquoted-math.ts" + "moduleName": "./packages/perseus/src/widgets/interactive-graph.tsx" }, { - "moduleName": "./packages/perseus-linter/src/rules/blockquoted-widget.ts" + "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" }, { - "moduleName": "./packages/perseus-linter/src/rules/double-spacing-after-terminal.ts" - }, + "moduleName": "./packages/perseus/src/widgets/plotter/plotter.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/components/graphie-classes.ts", + "name": "./packages/perseus/src/components/graphie-classes.ts", + "reasons": [ { - "moduleName": "./packages/perseus-linter/src/rules/expression-widget.ts" + "moduleName": "./packages/perseus/src/components/graphie-movables.ts" }, { - "moduleName": "./packages/perseus-linter/src/rules/extra-content-spacing.ts" - }, + "moduleName": "./packages/perseus/src/components/graphie.tsx" + } + ] + }, + { + "id": "./vendor/raphael/raphael.js", + "name": "./vendor/raphael/raphael.js", + "reasons": [ { - "moduleName": "./packages/perseus-linter/src/rules/heading-level-1.ts" - }, + "moduleName": "./packages/perseus/src/util/graphie.ts" + } + ] + }, + { + "id": "./packages/perseus/src/util/drawing-transform.ts", + "name": "./packages/perseus/src/util/drawing-transform.ts", + "reasons": [ { - "moduleName": "./packages/perseus-linter/src/rules/heading-level-skip.ts" + "moduleName": "./packages/perseus/src/util/graphie.ts" + } + ] + }, + { + "id": "./packages/perseus/src/util/graph-bounds.ts", + "name": "./packages/perseus/src/util/graph-bounds.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/util/graphie.ts" + } + ] + }, + { + "id": "./packages/perseus/src/util/tex.ts", + "name": "./packages/perseus/src/util/tex.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/util/graphie.ts" }, { - "moduleName": "./packages/perseus-linter/src/rules/heading-sentence-case.ts" + "moduleName": "./packages/perseus/src/interactive2/movable-point.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/zoom.ts", + "name": "./packages/perseus/src/zoom.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/components/svg-image.tsx" + } + ] + }, + { + "id": "./packages/perseus-linter/src/rule.ts", + "name": "./packages/perseus-linter/src/rule.ts", + "reasons": [ + { + "moduleName": "./packages/perseus-linter/src/index.ts" }, { - "moduleName": "./packages/perseus-linter/src/rules/heading-title-case.ts" + "moduleName": "./packages/perseus-linter/src/rules/absolute-url.ts" + }, + { + "moduleName": "./packages/perseus-linter/src/rules/blockquoted-math.ts" + }, + { + "moduleName": "./packages/perseus-linter/src/rules/blockquoted-widget.ts" + }, + { + "moduleName": "./packages/perseus-linter/src/rules/double-spacing-after-terminal.ts" + }, + { + "moduleName": "./packages/perseus-linter/src/rules/expression-widget.ts" + }, + { + "moduleName": "./packages/perseus-linter/src/rules/extra-content-spacing.ts" + }, + { + "moduleName": "./packages/perseus-linter/src/rules/heading-level-1.ts" + }, + { + "moduleName": "./packages/perseus-linter/src/rules/heading-level-skip.ts" + }, + { + "moduleName": "./packages/perseus-linter/src/rules/heading-sentence-case.ts" }, { "moduleName": "./packages/perseus-linter/src/rules/image-alt-text.ts" }, + { + "moduleName": "./packages/perseus-linter/src/rules/heading-title-case.ts" + }, { "moduleName": "./packages/perseus-linter/src/rules/image-in-table.ts" }, @@ -6814,18 +6916,18 @@ { "moduleName": "./packages/perseus-linter/src/rules/image-widget.ts" }, - { - "moduleName": "./packages/perseus-linter/src/rules/math-align-extra-break.ts" - }, { "moduleName": "./packages/perseus-linter/src/rules/math-adjacent.ts" }, { - "moduleName": "./packages/perseus-linter/src/rules/math-align-linebreaks.ts" + "moduleName": "./packages/perseus-linter/src/rules/math-align-extra-break.ts" }, { "moduleName": "./packages/perseus-linter/src/rules/math-empty.ts" }, + { + "moduleName": "./packages/perseus-linter/src/rules/math-align-linebreaks.ts" + }, { "moduleName": "./packages/perseus-linter/src/rules/math-font-size.ts" }, @@ -6835,6 +6937,9 @@ { "moduleName": "./packages/perseus-linter/src/rules/math-nested.ts" }, + { + "moduleName": "./packages/perseus-linter/src/rules/math-text-empty.ts" + }, { "moduleName": "./packages/perseus-linter/src/rules/math-starts-with-space.ts" }, @@ -6844,17 +6949,14 @@ { "moduleName": "./packages/perseus-linter/src/rules/nested-lists.ts" }, - { - "moduleName": "./packages/perseus-linter/src/rules/math-text-empty.ts" - }, { "moduleName": "./packages/perseus-linter/src/rules/static-widget-in-question-stem.ts" }, { - "moduleName": "./packages/perseus-linter/src/rules/unbalanced-code-delimiters.ts" + "moduleName": "./packages/perseus-linter/src/rules/table-missing-cells.ts" }, { - "moduleName": "./packages/perseus-linter/src/rules/table-missing-cells.ts" + "moduleName": "./packages/perseus-linter/src/rules/unbalanced-code-delimiters.ts" }, { "moduleName": "./packages/perseus-linter/src/rules/unescaped-dollar.ts" @@ -6900,111 +7002,6 @@ } ] }, - { - "id": "./packages/perseus/src/util/graphie.ts", - "name": "./packages/perseus/src/util/graphie.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/util/graph-utils.ts" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graph.tsx" - }, - { - "moduleName": "./packages/perseus/src/util/interactive.ts" - }, - { - "moduleName": "./packages/perseus/src/components/graphie.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/util/interactive.ts", - "name": "./packages/perseus/src/util/interactive.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/util/graph-utils.ts" - } - ] - }, - { - "id": "./packages/perseus/src/interactive2/movable-helper-methods.ts", - "name": "./packages/perseus/src/interactive2/movable-helper-methods.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/interactive2/interactive-util.ts" - } - ] - }, - { - "id": "./packages/perseus/src/interactive2.ts", - "name": "./packages/perseus/src/interactive2.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/components/graphie-movables.ts" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graph.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/grapher/grapher.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/plotter/plotter.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/components/graphie-classes.ts", - "name": "./packages/perseus/src/components/graphie-classes.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/components/graphie-movables.ts" - }, - { - "moduleName": "./packages/perseus/src/components/graphie.tsx" - } - ] - }, - { - "id": "./vendor/raphael/raphael.js", - "name": "./vendor/raphael/raphael.js", - "reasons": [ - { - "moduleName": "./packages/perseus/src/util/graphie.ts" - } - ] - }, - { - "id": "./packages/perseus/src/util/drawing-transform.ts", - "name": "./packages/perseus/src/util/drawing-transform.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/util/graphie.ts" - } - ] - }, - { - "id": "./packages/perseus/src/util/graph-bounds.ts", - "name": "./packages/perseus/src/util/graph-bounds.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/util/graphie.ts" - } - ] - }, - { - "id": "./packages/perseus/src/util/tex.ts", - "name": "./packages/perseus/src/util/tex.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/util/graphie.ts" - }, - { - "moduleName": "./packages/perseus/src/interactive2/movable-point.tsx" - } - ] - }, { "id": "./dev/cache.ts", "name": "./dev/cache.ts", @@ -7062,6 +7059,24 @@ } ] }, + { + "id": "./packages/math-input/src/components/keypad/utils.ts", + "name": "./packages/math-input/src/components/keypad/utils.ts", + "reasons": [ + { + "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/fractions-page.tsx" + }, + { + "moduleName": "./packages/math-input/src/components/keypad/shared-keys.tsx" + }, + { + "moduleName": "./packages/math-input/src/components/keypad/keypad.tsx" + }, + { + "moduleName": "./packages/math-input/src/components/keypad/mobile-keypad-internals.tsx" + } + ] + }, { "id": "./packages/kas/src/index.js", "name": "./packages/kas/src/index.js", @@ -7305,27 +7320,6 @@ } ] }, - { - "id": "./packages/perseus/src/tex-wrangler.ts", - "name": "./packages/perseus/src/tex-wrangler.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/numeric-input/numeric-input-validator.ts" - }, - { - "moduleName": "./packages/perseus/src/widgets/input-number/input-number-validator.ts" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/radio/radio-component.tsx", - "name": "./packages/perseus/src/widgets/radio/radio-component.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/radio/radio.ts" - } - ] - }, { "id": "./packages/perseus/src/interactive2/wrapped-line.ts", "name": "./packages/perseus/src/interactive2/wrapped-line.ts", @@ -7396,122 +7390,53 @@ ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts", - "name": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts", + "id": "./packages/perseus/src/widgets/radio/radio-component.tsx", + "name": "./packages/perseus/src/widgets/radio/radio-component.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/utils.ts" - }, + "moduleName": "./packages/perseus/src/widgets/radio/radio.ts" + } + ] + }, + { + "id": "./packages/math-input/src/components/input/cursor-styles.ts", + "name": "./packages/math-input/src/components/input/cursor-styles.ts", + "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/mafs-graph.tsx" + "moduleName": "./packages/math-input/src/components/input/cursor-handle.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/reducer/interactive-graph-reducer.ts" - }, + "moduleName": "./packages/math-input/src/components/input/math-input.tsx" + } + ] + }, + { + "id": "./packages/math-input/src/fake-react-native-web/text.tsx", + "name": "./packages/math-input/src/fake-react-native-web/text.tsx", + "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-labels.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/protractor.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/grid.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/legacy-grid.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-ticks.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-polygon.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/use-transform.ts" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/use-draggable.ts" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/arrowhead.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/circle.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/sinusoid.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-point.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/vector.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/angle-indicators.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/svg-line.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-point-view.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/interactive2/movable.ts", - "name": "./packages/perseus/src/interactive2/movable.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/interactive2.ts" - } - ] - }, - { - "id": "./packages/perseus/src/interactive2/movable-line.ts", - "name": "./packages/perseus/src/interactive2/movable-line.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/interactive2.ts" + "moduleName": "./packages/math-input/src/fake-react-native-web/index.ts" } ] }, { - "id": "./packages/perseus/src/interactive2/movable-point.tsx", - "name": "./packages/perseus/src/interactive2/movable-point.tsx", + "id": "./packages/math-input/src/fake-react-native-web/view.tsx", + "name": "./packages/math-input/src/fake-react-native-web/view.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/interactive2.ts" + "moduleName": "./packages/math-input/src/fake-react-native-web/index.ts" } ] }, { - "id": "./packages/perseus/src/interactive2/movable-polygon.ts", - "name": "./packages/perseus/src/interactive2/movable-polygon.ts", + "id": "./packages/perseus/src/tex-wrangler.ts", + "name": "./packages/perseus/src/tex-wrangler.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/interactive2.ts" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/interactive-graphs/stateful-mafs-graph.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/stateful-mafs-graph.tsx", - "reasons": [ + "moduleName": "./packages/perseus/src/widgets/numeric-input/numeric-input-validator.ts" + }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/index.ts" + "moduleName": "./packages/perseus/src/widgets/input-number/input-number-validator.ts" } ] }, @@ -7522,6 +7447,9 @@ { "moduleName": "./packages/perseus/src/interactive2/wrapped-line.ts" }, + { + "moduleName": "./packages/perseus/src/interactive2/wrapped-drawing.ts" + }, { "moduleName": "./packages/perseus/src/interactive2/movable-line.ts" }, @@ -7531,9 +7459,6 @@ { "moduleName": "./packages/perseus/src/interactive2/movable-point.tsx" }, - { - "moduleName": "./packages/perseus/src/interactive2/wrapped-drawing.ts" - }, { "moduleName": "./packages/perseus/src/interactive2/movable-polygon.ts" }, @@ -7579,77 +7504,92 @@ ] }, { - "id": "./packages/perseus-editor/src/katex-mhchem/index.js", - "name": "./packages/perseus-editor/src/katex-mhchem/index.js", + "id": "./packages/perseus/src/widgets/interactive-graphs/stateful-mafs-graph.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/stateful-mafs-graph.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/editor.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/index.ts" } ] }, { - "id": "./packages/perseus-editor/src/components/drag-target.tsx", - "name": "./packages/perseus-editor/src/components/drag-target.tsx", + "id": "./packages/perseus/src/interactive2/movable.ts", + "name": "./packages/perseus/src/interactive2/movable.ts", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/editor.tsx" + "moduleName": "./packages/perseus/src/interactive2.ts" } ] }, { - "id": "./packages/perseus-editor/src/components/widget-editor.tsx", - "name": "./packages/perseus-editor/src/components/widget-editor.tsx", + "id": "./packages/perseus/src/interactive2/movable-line.ts", + "name": "./packages/perseus/src/interactive2/movable-line.ts", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/editor.tsx" + "moduleName": "./packages/perseus/src/interactive2.ts" } ] }, { - "id": "./packages/perseus-editor/src/components/widget-select.tsx", - "name": "./packages/perseus-editor/src/components/widget-select.tsx", + "id": "./packages/perseus/src/interactive2/movable-point.tsx", + "name": "./packages/perseus/src/interactive2/movable-point.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/editor.tsx" + "moduleName": "./packages/perseus/src/interactive2.ts" } ] }, { - "id": "./packages/perseus-editor/src/katex-mhchem/parser.js", - "name": "./packages/perseus-editor/src/katex-mhchem/parser.js", + "id": "./packages/perseus/src/interactive2/movable-polygon.ts", + "name": "./packages/perseus/src/interactive2/movable-polygon.ts", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/katex-mhchem/index.js" + "moduleName": "./packages/perseus/src/interactive2.ts" } ] }, { - "id": "./packages/math-input/src/components/input/cursor-styles.ts", - "name": "./packages/math-input/src/components/input/cursor-styles.ts", + "id": "./packages/perseus-editor/src/katex-mhchem/index.js", + "name": "./packages/perseus-editor/src/katex-mhchem/index.js", "reasons": [ { - "moduleName": "./packages/math-input/src/components/input/cursor-handle.tsx" - }, + "moduleName": "./packages/perseus-editor/src/editor.tsx" + } + ] + }, + { + "id": "./packages/perseus-editor/src/components/drag-target.tsx", + "name": "./packages/perseus-editor/src/components/drag-target.tsx", + "reasons": [ { - "moduleName": "./packages/math-input/src/components/input/math-input.tsx" + "moduleName": "./packages/perseus-editor/src/editor.tsx" } ] }, { - "id": "./packages/math-input/src/fake-react-native-web/text.tsx", - "name": "./packages/math-input/src/fake-react-native-web/text.tsx", + "id": "./packages/perseus-editor/src/components/widget-editor.tsx", + "name": "./packages/perseus-editor/src/components/widget-editor.tsx", "reasons": [ { - "moduleName": "./packages/math-input/src/fake-react-native-web/index.ts" + "moduleName": "./packages/perseus-editor/src/editor.tsx" } ] }, { - "id": "./packages/math-input/src/fake-react-native-web/view.tsx", - "name": "./packages/math-input/src/fake-react-native-web/view.tsx", + "id": "./packages/perseus-editor/src/components/widget-select.tsx", + "name": "./packages/perseus-editor/src/components/widget-select.tsx", "reasons": [ { - "moduleName": "./packages/math-input/src/fake-react-native-web/index.ts" + "moduleName": "./packages/perseus-editor/src/editor.tsx" + } + ] + }, + { + "id": "./packages/perseus-editor/src/katex-mhchem/parser.js", + "name": "./packages/perseus-editor/src/katex-mhchem/parser.js", + "reasons": [ + { + "moduleName": "./packages/perseus-editor/src/katex-mhchem/index.js" } ] }, @@ -7672,20 +7612,77 @@ ] }, { - "id": "./packages/math-input/src/components/keypad/utils.ts", - "name": "./packages/math-input/src/components/keypad/utils.ts", + "id": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts", + "name": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts", "reasons": [ { - "moduleName": "./packages/math-input/src/components/keypad/shared-keys.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/utils.ts" }, { - "moduleName": "./packages/math-input/src/components/keypad/keypad-pages/fractions-page.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/mafs-graph.tsx" }, { - "moduleName": "./packages/math-input/src/components/keypad/keypad.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/reducer/interactive-graph-reducer.ts" }, { - "moduleName": "./packages/math-input/src/components/keypad/mobile-keypad-internals.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/grid.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-labels.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/legacy-grid.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-ticks.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/protractor.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/use-transform.ts" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/arrowhead.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/circle.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/sinusoid.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-polygon.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/use-draggable.ts" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-point.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/svg-line.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/vector.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/angle-indicators.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-point-view.tsx" } ] }, @@ -7712,10 +7709,10 @@ "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/line-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/point-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/parametric-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/parametric-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/point-editor.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/rectangle-editor.tsx" @@ -7742,10 +7739,10 @@ "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/movable-point-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/point-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/parametric-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/parametric-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/point-editor.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interaction-editor/rectangle-editor.tsx" @@ -7792,13 +7789,61 @@ ] }, { - "id": "./packages/perseus-linter/src/selector.ts", - "name": "./packages/perseus-linter/src/selector.ts", + "id": "./packages/perseus/src/util/react-render.tsx", + "name": "./packages/perseus/src/util/react-render.tsx", "reasons": [ { - "moduleName": "./packages/perseus-linter/src/rule.ts" - } - ] + "moduleName": "./packages/perseus/src/util/tex.ts" + }, + { + "moduleName": "./packages/perseus/src/interactive2/movable-point.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/jquery.mobile.vmouse.js", + "name": "./packages/perseus/src/jquery.mobile.vmouse.js", + "reasons": [ + { + "moduleName": "./packages/perseus/src/util/interactive.ts" + } + ] + }, + { + "id": "./packages/perseus/src/interactive2/arrowhead.ts", + "name": "./packages/perseus/src/interactive2/arrowhead.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/util/interactive.ts" + }, + { + "moduleName": "./packages/perseus/src/interactive2/movable-line-options.ts" + } + ] + }, + { + "id": "./packages/perseus/src/interactive2/wrapped-ellipse.ts", + "name": "./packages/perseus/src/interactive2/wrapped-ellipse.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/util/interactive.ts" + }, + { + "moduleName": "./packages/perseus/src/interactive2/movable-point.tsx" + }, + { + "moduleName": "./packages/perseus/src/interactive2/movable-point-options.ts" + } + ] + }, + { + "id": "./packages/perseus-linter/src/selector.ts", + "name": "./packages/perseus-linter/src/selector.ts", + "reasons": [ + { + "moduleName": "./packages/perseus-linter/src/rule.ts" + } + ] }, { "id": "./packages/perseus-linter/src/rules/absolute-url.ts", @@ -8089,77 +8134,50 @@ ] }, { - "id": "./packages/perseus/src/util/react-render.tsx", - "name": "./packages/perseus/src/util/react-render.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/util/tex.ts" - }, - { - "moduleName": "./packages/perseus/src/interactive2/movable-point.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/jquery.mobile.vmouse.js", - "name": "./packages/perseus/src/jquery.mobile.vmouse.js", + "id": "./packages/perseus/src/widgets/cs-program/cs-program.tsx", + "name": "./packages/perseus/src/widgets/cs-program/cs-program.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/util/interactive.ts" + "moduleName": "./packages/perseus/src/widgets/cs-program/index.ts" } ] }, { - "id": "./packages/perseus/src/interactive2/arrowhead.ts", - "name": "./packages/perseus/src/interactive2/arrowhead.ts", + "id": "./packages/perseus/src/widgets/definition/definition.tsx", + "name": "./packages/perseus/src/widgets/definition/definition.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/util/interactive.ts" - }, - { - "moduleName": "./packages/perseus/src/interactive2/movable-line-options.ts" + "moduleName": "./packages/perseus/src/widgets/definition/index.ts" } ] }, { - "id": "./packages/perseus/src/interactive2/wrapped-ellipse.ts", - "name": "./packages/perseus/src/interactive2/wrapped-ellipse.ts", + "id": "./packages/perseus/src/widgets/dropdown/dropdown.tsx", + "name": "./packages/perseus/src/widgets/dropdown/dropdown.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/util/interactive.ts" - }, - { - "moduleName": "./packages/perseus/src/interactive2/movable-point.tsx" - }, - { - "moduleName": "./packages/perseus/src/interactive2/movable-point-options.ts" + "moduleName": "./packages/perseus/src/widgets/dropdown/index.ts" } ] }, { - "id": "./packages/perseus/src/widgets/cs-program/cs-program.tsx", - "name": "./packages/perseus/src/widgets/cs-program/cs-program.tsx", + "id": "./packages/perseus/src/widgets/explanation/explanation.tsx", + "name": "./packages/perseus/src/widgets/explanation/explanation.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/cs-program/index.ts" + "moduleName": "./packages/perseus/src/widgets/explanation/index.ts" } ] }, { - "id": "./packages/perseus/src/widgets/definition/definition.tsx", - "name": "./packages/perseus/src/widgets/definition/definition.tsx", + "id": "./packages/perseus/src/widgets/graded-group/graded-group.tsx", + "name": "./packages/perseus/src/widgets/graded-group/graded-group.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/definition/index.ts" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/dropdown/dropdown.tsx", - "name": "./packages/perseus/src/widgets/dropdown/dropdown.tsx", - "reasons": [ + "moduleName": "./packages/perseus/src/widgets/graded-group/index.ts" + }, { - "moduleName": "./packages/perseus/src/widgets/dropdown/index.ts" + "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" } ] }, @@ -8180,19 +8198,19 @@ "moduleName": "./packages/perseus/src/widgets/interaction/interaction.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx" + "moduleName": "./packages/perseus/src/widgets/molecule/molecule.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/video/video.tsx" + "moduleName": "./packages/perseus/src/widgets/measurer/measurer.tsx" }, { "moduleName": "./packages/perseus/src/widgets/passage-ref/passage-ref.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/molecule/molecule.tsx" + "moduleName": "./packages/perseus/src/widgets/video/video.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/measurer/measurer.tsx" + "moduleName": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx" }, { "moduleName": "./packages/perseus/src/widgets/explanation/explanation.tsx" @@ -8202,15 +8220,6 @@ } ] }, - { - "id": "./packages/perseus/src/widgets/explanation/explanation.tsx", - "name": "./packages/perseus/src/widgets/explanation/explanation.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/explanation/index.ts" - } - ] - }, { "id": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx", "name": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx", @@ -8220,18 +8229,6 @@ } ] }, - { - "id": "./packages/perseus/src/widgets/graded-group/graded-group.tsx", - "name": "./packages/perseus/src/widgets/graded-group/graded-group.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/graded-group/index.ts" - }, - { - "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" - } - ] - }, { "id": "./packages/perseus/src/widgets/group/group.tsx", "name": "./packages/perseus/src/widgets/group/group.tsx", @@ -8287,20 +8284,20 @@ ] }, { - "id": "./packages/perseus/src/widgets/orderer/orderer.tsx", - "name": "./packages/perseus/src/widgets/orderer/orderer.tsx", + "id": "./packages/perseus/src/widgets/number-line/number-line.tsx", + "name": "./packages/perseus/src/widgets/number-line/number-line.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/orderer/index.ts" + "moduleName": "./packages/perseus/src/widgets/number-line/index.ts" } ] }, { - "id": "./packages/perseus/src/widgets/number-line/number-line.tsx", - "name": "./packages/perseus/src/widgets/number-line/number-line.tsx", + "id": "./packages/perseus/src/widgets/orderer/orderer.tsx", + "name": "./packages/perseus/src/widgets/orderer/orderer.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/number-line/index.ts" + "moduleName": "./packages/perseus/src/widgets/orderer/index.ts" } ] }, @@ -8310,6 +8307,9 @@ "reasons": [ { "moduleName": "./packages/perseus/src/widgets/passage/index.ts" + }, + { + "moduleName": "./packages/perseus/src/widgets/passage/utils.ts" } ] }, @@ -8334,33 +8334,6 @@ } ] }, - { - "id": "./packages/perseus/src/widgets/measurer/measurer.tsx", - "name": "./packages/perseus/src/widgets/measurer/measurer.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/measurer/index.ts" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/molecule/molecule.tsx", - "name": "./packages/perseus/src/widgets/molecule/molecule.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/molecule/index.ts" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx", - "name": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/passage-ref-target/index.ts" - } - ] - }, { "id": "./packages/perseus/src/widgets/sorter/sorter.tsx", "name": "./packages/perseus/src/widgets/sorter/sorter.tsx", @@ -8380,107 +8353,29 @@ ] }, { - "id": "./packages/perseus/src/interactive2/movable-line-options.ts", - "name": "./packages/perseus/src/interactive2/movable-line-options.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/interactive2/movable-line.ts" - } - ] - }, - { - "id": "./packages/perseus/src/interactive2/movable-point-options.ts", - "name": "./packages/perseus/src/interactive2/movable-point-options.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/interactive2/movable-point.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/interactive-graphs/math/clamp.ts", - "name": "./packages/perseus/src/widgets/interactive-graphs/math/clamp.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/box.ts" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/interpolation.ts" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/interactive-graphs/math/snap.ts", - "name": "./packages/perseus/src/widgets/interactive-graphs/math/snap.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/interactive-graphs/math/box.ts", - "name": "./packages/perseus/src/widgets/interactive-graphs/math/box.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/interactive-graphs/math/coordinates.ts", - "name": "./packages/perseus/src/widgets/interactive-graphs/math/coordinates.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/box.ts" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/interactive-graphs/math/interval.ts", - "name": "./packages/perseus/src/widgets/interactive-graphs/math/interval.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/box.ts" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/interactive-graphs/math/interpolation.ts", - "name": "./packages/perseus/src/widgets/interactive-graphs/math/interpolation.ts", + "id": "./packages/perseus/src/widgets/measurer/measurer.tsx", + "name": "./packages/perseus/src/widgets/measurer/measurer.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" + "moduleName": "./packages/perseus/src/widgets/measurer/index.ts" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/math/geometry.ts", - "name": "./packages/perseus/src/widgets/interactive-graphs/math/geometry.ts", + "id": "./packages/perseus/src/widgets/molecule/molecule.tsx", + "name": "./packages/perseus/src/widgets/molecule/molecule.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" + "moduleName": "./packages/perseus/src/widgets/molecule/index.ts" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/math/angles.ts", - "name": "./packages/perseus/src/widgets/interactive-graphs/math/angles.ts", + "id": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx", + "name": "./packages/perseus/src/widgets/passage-ref-target/passage-ref-target.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" + "moduleName": "./packages/perseus/src/widgets/passage-ref-target/index.ts" } ] }, @@ -8519,10 +8414,10 @@ "moduleName": "./packages/perseus/src/widgets/interactive-graphs/reducer/interactive-graph-reducer.ts" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/quadratic.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/point.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/point.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/quadratic.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/segment.tsx" @@ -8530,11 +8425,14 @@ { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear.tsx" }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/ray.tsx" + }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear-system.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/ray.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/circle.tsx" @@ -8542,9 +8440,6 @@ { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/sinusoid.tsx" }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx" - }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" } @@ -8575,20 +8470,29 @@ ] }, { - "id": "./packages/perseus/src/interactive2/movable-polygon-options.ts", - "name": "./packages/perseus/src/interactive2/movable-polygon-options.ts", + "id": "./packages/perseus/src/interactive2/movable-line-options.ts", + "name": "./packages/perseus/src/interactive2/movable-line-options.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/interactive2/movable-polygon.ts" + "moduleName": "./packages/perseus/src/interactive2/movable-line.ts" } ] }, { - "id": "./packages/perseus/src/widgets/radio/radio-validator.ts", - "name": "./packages/perseus/src/widgets/radio/radio-validator.ts", + "id": "./packages/perseus/src/interactive2/movable-point-options.ts", + "name": "./packages/perseus/src/interactive2/movable-point-options.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/radio/radio-component.tsx" + "moduleName": "./packages/perseus/src/interactive2/movable-point.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/interactive2/movable-polygon-options.ts", + "name": "./packages/perseus/src/interactive2/movable-polygon-options.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/interactive2/movable-polygon.ts" } ] }, @@ -8619,6 +8523,93 @@ } ] }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/math/clamp.ts", + "name": "./packages/perseus/src/widgets/interactive-graphs/math/clamp.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/box.ts" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/interpolation.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/math/snap.ts", + "name": "./packages/perseus/src/widgets/interactive-graphs/math/snap.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/math/box.ts", + "name": "./packages/perseus/src/widgets/interactive-graphs/math/box.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/math/coordinates.ts", + "name": "./packages/perseus/src/widgets/interactive-graphs/math/coordinates.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/box.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/math/interval.ts", + "name": "./packages/perseus/src/widgets/interactive-graphs/math/interval.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/box.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/math/interpolation.ts", + "name": "./packages/perseus/src/widgets/interactive-graphs/math/interpolation.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/math/geometry.ts", + "name": "./packages/perseus/src/widgets/interactive-graphs/math/geometry.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/math/angles.ts", + "name": "./packages/perseus/src/widgets/interactive-graphs/math/angles.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/math/index.ts" + } + ] + }, { "id": "./packages/kas/src/__genfiles__/unitparser.js", "name": "./packages/kas/src/__genfiles__/unitparser.js", @@ -8638,11 +8629,11 @@ ] }, { - "id": "./packages/perseus-linter/src/rules/lint-utils.ts", - "name": "./packages/perseus-linter/src/rules/lint-utils.ts", + "id": "./packages/perseus/src/widgets/radio/radio-validator.ts", + "name": "./packages/perseus/src/widgets/radio/radio-validator.ts", "reasons": [ { - "moduleName": "./packages/perseus-linter/src/rules/absolute-url.ts" + "moduleName": "./packages/perseus/src/widgets/radio/radio-component.tsx" } ] }, @@ -8667,6 +8658,24 @@ } ] }, + { + "id": "./packages/perseus-linter/src/rules/lint-utils.ts", + "name": "./packages/perseus-linter/src/rules/lint-utils.ts", + "reasons": [ + { + "moduleName": "./packages/perseus-linter/src/rules/absolute-url.ts" + } + ] + }, + { + "id": "./packages/math-input/src/components/aphrodite-css-transition-group/transition-child.tsx", + "name": "./packages/math-input/src/components/aphrodite-css-transition-group/transition-child.tsx", + "reasons": [ + { + "moduleName": "./packages/math-input/src/components/aphrodite-css-transition-group/index.tsx" + } + ] + }, { "id": "./packages/perseus/src/definition-context.tsx", "name": "./packages/perseus/src/definition-context.tsx", @@ -8680,17 +8689,26 @@ ] }, { - "id": "./packages/perseus/src/components/visibility-observer/create-visibility-observer.ts", - "name": "./packages/perseus/src/components/visibility-observer/create-visibility-observer.ts", + "id": "./packages/perseus/src/widgets/iframe/iframe-validator.ts", + "name": "./packages/perseus/src/widgets/iframe/iframe-validator.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/components/visibility-observer/visibility-observer.tsx" + "moduleName": "./packages/perseus/src/widgets/iframe/iframe.tsx" } ] }, { - "id": "./packages/perseus/src/components/visibility-observer/get-scroll-parent.ts", - "name": "./packages/perseus/src/components/visibility-observer/get-scroll-parent.ts", + "id": "./packages/perseus/src/components/graphie-movables.ts", + "name": "./packages/perseus/src/components/graphie-movables.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/components/graphie.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/components/visibility-observer/create-visibility-observer.ts", + "name": "./packages/perseus/src/components/visibility-observer/create-visibility-observer.ts", "reasons": [ { "moduleName": "./packages/perseus/src/components/visibility-observer/visibility-observer.tsx" @@ -8698,11 +8716,11 @@ ] }, { - "id": "./packages/perseus/src/components/graphie-movables.ts", - "name": "./packages/perseus/src/components/graphie-movables.ts", + "id": "./packages/perseus/src/components/visibility-observer/get-scroll-parent.ts", + "name": "./packages/perseus/src/components/visibility-observer/get-scroll-parent.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/components/graphie.tsx" + "moduleName": "./packages/perseus/src/components/visibility-observer/visibility-observer.tsx" } ] }, @@ -8782,29 +8800,50 @@ ] }, { - "id": "./packages/perseus/src/widgets/iframe/iframe-validator.ts", - "name": "./packages/perseus/src/widgets/iframe/iframe-validator.ts", + "id": "./packages/math-input/src/components/aphrodite-css-transition-group/util.ts", + "name": "./packages/math-input/src/components/aphrodite-css-transition-group/util.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/iframe/iframe.tsx" + "moduleName": "./packages/math-input/src/components/aphrodite-css-transition-group/transition-child.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/number-line/number-line-validator.ts", - "name": "./packages/perseus/src/widgets/number-line/number-line-validator.ts", + "id": "./packages/perseus/src/widgets/molecule/molecule-drawing.ts", + "name": "./packages/perseus/src/widgets/molecule/molecule-drawing.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/number-line/number-line.tsx" + "moduleName": "./packages/perseus/src/widgets/molecule/molecule.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/orderer/orderer-validator.ts", - "name": "./packages/perseus/src/widgets/orderer/orderer-validator.ts", + "id": "./packages/perseus/src/widgets/molecule/molecule-layout.ts", + "name": "./packages/perseus/src/widgets/molecule/molecule-layout.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/orderer/orderer.tsx" + "moduleName": "./packages/perseus/src/widgets/molecule/molecule.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/molecule/smiles-parser.ts", + "name": "./packages/perseus/src/widgets/molecule/smiles-parser.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/molecule/molecule.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/passage/utils.ts", + "name": "./packages/perseus/src/widgets/passage/utils.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/passage-ref/passage-ref.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/passage/passage.tsx" } ] }, @@ -8830,38 +8869,29 @@ { "moduleName": "./packages/perseus/src/widgets/expression/expression.tsx" }, - { - "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" - }, { "moduleName": "./packages/perseus/src/widgets/graded-group/graded-group.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/molecule/molecule-drawing.ts", - "name": "./packages/perseus/src/widgets/molecule/molecule-drawing.ts", - "reasons": [ + }, { - "moduleName": "./packages/perseus/src/widgets/molecule/molecule.tsx" + "moduleName": "./packages/perseus/src/widgets/graded-group-set/graded-group-set.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/molecule/molecule-layout.ts", - "name": "./packages/perseus/src/widgets/molecule/molecule-layout.ts", + "id": "./packages/perseus/src/widgets/number-line/number-line-validator.ts", + "name": "./packages/perseus/src/widgets/number-line/number-line-validator.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/molecule/molecule.tsx" + "moduleName": "./packages/perseus/src/widgets/number-line/number-line.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/molecule/smiles-parser.ts", - "name": "./packages/perseus/src/widgets/molecule/smiles-parser.ts", + "id": "./packages/perseus/src/widgets/orderer/orderer-validator.ts", + "name": "./packages/perseus/src/widgets/orderer/orderer-validator.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/molecule/molecule.tsx" + "moduleName": "./packages/perseus/src/widgets/orderer/orderer.tsx" } ] }, @@ -8978,16 +9008,16 @@ "moduleName": "./packages/perseus/src/widgets/interactive-graphs/mafs-graph.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-labels.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-arrows.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/protractor.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-labels.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-arrows.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-ticks.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-ticks.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/protractor.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/point.tsx" @@ -8999,19 +9029,19 @@ "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/use-transform.ts" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/use-draggable.ts" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/circle.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-point.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/use-draggable.ts" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-point.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx" @@ -9042,24 +9072,6 @@ } ] }, - { - "id": "./packages/math-input/src/components/aphrodite-css-transition-group/transition-child.tsx", - "name": "./packages/math-input/src/components/aphrodite-css-transition-group/transition-child.tsx", - "reasons": [ - { - "moduleName": "./packages/math-input/src/components/aphrodite-css-transition-group/index.tsx" - } - ] - }, - { - "id": "./packages/math-input/src/components/aphrodite-css-transition-group/util.ts", - "name": "./packages/math-input/src/components/aphrodite-css-transition-group/util.ts", - "reasons": [ - { - "moduleName": "./packages/math-input/src/components/aphrodite-css-transition-group/transition-child.tsx" - } - ] - }, { "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-label.tsx", "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-label.tsx", @@ -9070,56 +9082,17 @@ ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-ellipse.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-ellipse.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graph-locked-layer.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-function.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-function.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graph-locked-layer.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graph-locked-layer.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-point.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-point.tsx", + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/arrowhead.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/arrowhead.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graph-locked-layer.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-polygon.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-polygon.tsx", - "reasons": [ + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-arrows.tsx" + }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graph-locked-layer.tsx" - } - ] - }, - { - "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-vector.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-vector.tsx", - "reasons": [ + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx" + }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graph-locked-layer.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/vector.tsx" } ] }, @@ -9131,10 +9104,10 @@ "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-labels.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/protractor.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-ticks.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-ticks.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/protractor.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/point.tsx" @@ -9142,9 +9115,6 @@ { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-label.tsx" }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx" - }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/arrowhead.tsx" }, @@ -9155,142 +9125,184 @@ "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/vector.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx" }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/vector.tsx" + }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-point-view.tsx" } ] }, { - "id": "./packages/perseus/src/util/svg.ts", - "name": "./packages/perseus/src/util/svg.ts", + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/segment.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/segment.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/protractor.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/arrowhead.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/use-draggable.ts", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/use-draggable.ts", + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/protractor.tsx" - }, + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear-system.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear-system.tsx", + "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/circle.tsx" - }, + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/ray.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/ray.tsx", + "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx" - }, + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx", + "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-point.tsx" - }, + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/circle.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/circle.tsx", + "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/protractor.css", - "name": "./packages/perseus/src/widgets/interactive-graphs/protractor.css", + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/sinusoid.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/sinusoid.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/protractor.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/arrowhead.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/arrowhead.tsx", + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/backgrounds/axis-arrows.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx" - }, + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-ellipse.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-ellipse.tsx", + "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/vector.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graph-locked-layer.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/segment.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/segment.tsx", + "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-function.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-function.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graph-locked-layer.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear.tsx", + "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graph-locked-layer.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear-system.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear-system.tsx", + "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-point.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-point.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graph-locked-layer.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/ray.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/ray.tsx", + "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-polygon.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-polygon.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graph-locked-layer.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx", + "id": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-vector.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-vector.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graph-locked-layer.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/circle.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/circle.tsx", + "id": "./packages/perseus/src/util/svg.ts", + "name": "./packages/perseus/src/util/svg.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/protractor.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/arrowhead.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/sinusoid.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/sinusoid.tsx", + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/use-draggable.ts", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/use-draggable.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/protractor.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/circle.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-point.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx", + "id": "./packages/perseus/src/widgets/interactive-graphs/protractor.css", + "name": "./packages/perseus/src/widgets/interactive-graphs/protractor.css", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/index.ts" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/protractor.tsx" } ] }, @@ -9298,11 +9310,14 @@ "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-point.tsx", "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-point.tsx", "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/point.tsx" + }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/quadratic.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/point.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx" }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/circle.tsx" @@ -9310,9 +9325,6 @@ { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/sinusoid.tsx" }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx" - }, { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" } @@ -9331,35 +9343,35 @@ ] }, { - "id": "./packages/perseus-editor/src/widgets/label-image/marker.tsx", - "name": "./packages/perseus-editor/src/widgets/label-image/marker.tsx", + "id": "./packages/perseus-editor/src/widgets/label-image/answer-choices.tsx", + "name": "./packages/perseus-editor/src/widgets/label-image/answer-choices.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/label-image/__stories__/marker.stories.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/label-image/__stories__/answer-choices.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/label-image/question-markers.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/label-image-editor.tsx" } ] }, { - "id": "./packages/perseus-editor/src/widgets/label-image/select-image.tsx", - "name": "./packages/perseus-editor/src/widgets/label-image/select-image.tsx", + "id": "./packages/perseus-editor/src/widgets/label-image/marker.tsx", + "name": "./packages/perseus-editor/src/widgets/label-image/marker.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/label-image/__stories__/select-image.stories.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/label-image/__stories__/marker.stories.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/label-image-editor.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/label-image/question-markers.tsx" } ] }, { - "id": "./packages/perseus-editor/src/widgets/label-image/answer-choices.tsx", - "name": "./packages/perseus-editor/src/widgets/label-image/answer-choices.tsx", + "id": "./packages/perseus-editor/src/widgets/label-image/select-image.tsx", + "name": "./packages/perseus-editor/src/widgets/label-image/select-image.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/label-image/__stories__/answer-choices.stories.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/label-image/__stories__/select-image.stories.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/label-image-editor.tsx" @@ -9399,15 +9411,6 @@ } ] }, - { - "id": "./packages/math-input/src/components/keypad/navigation-button.tsx", - "name": "./packages/math-input/src/components/keypad/navigation-button.tsx", - "reasons": [ - { - "moduleName": "./packages/math-input/src/components/keypad/navigation-pad.tsx" - } - ] - }, { "id": "./packages/math-input/src/components/keypad/button-assets.tsx", "name": "./packages/math-input/src/components/keypad/button-assets.tsx", @@ -9420,6 +9423,15 @@ } ] }, + { + "id": "./packages/math-input/src/components/keypad/navigation-button.tsx", + "name": "./packages/math-input/src/components/keypad/navigation-button.tsx", + "reasons": [ + { + "moduleName": "./packages/math-input/src/components/keypad/navigation-pad.tsx" + } + ] + }, { "id": "./packages/math-input/src/components/tabbar/icons.tsx", "name": "./packages/math-input/src/components/tabbar/icons.tsx", @@ -9451,23 +9463,23 @@ { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-angle.tsx" }, - { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-circle.tsx" - }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-line.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-multiline.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-circle.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-point.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-sinusoid.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-multiline.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-quadratic.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/start-coords/start-coords-sinusoid.tsx" } ] }, @@ -9482,16 +9494,16 @@ "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-vector-settings.tsx" @@ -9512,16 +9524,16 @@ "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-vector-settings.tsx" @@ -9548,16 +9560,16 @@ "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-vector-settings.tsx" @@ -9565,116 +9577,140 @@ ] }, { - "id": "./packages/perseus-editor/src/components/angle-input.tsx", - "name": "./packages/perseus-editor/src/components/angle-input.tsx", + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/line-stroke-select.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/line-stroke-select.tsx", "reasons": [ + { + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" + }, { "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" + }, + { + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" } ] }, { - "id": "./packages/perseus-editor/src/components/util.ts", - "name": "./packages/perseus-editor/src/components/util.ts", + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/line-swatch.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/line-swatch.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/angle-input.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/components/dropdown-option.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-vector-settings.tsx" } ] }, { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/ellipse-swatch.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/ellipse-swatch.tsx", + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-select.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-select.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figures-section.tsx" } ] }, { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/line-stroke-select.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/line-stroke-select.tsx", + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" - }, + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figures-section.tsx" + } + ] + }, + { + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/labeled-row.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/labeled-row.tsx", + "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/components/interactive-graph-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" - }, + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/interactive-graph-editor.tsx" + } + ] + }, + { + "id": "./packages/perseus-editor/src/components/angle-input.tsx", + "name": "./packages/perseus-editor/src/components/angle-input.tsx", + "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" } ] }, { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/line-swatch.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/line-swatch.tsx", + "id": "./packages/perseus-editor/src/components/util.ts", + "name": "./packages/perseus-editor/src/components/util.ts", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx" + "moduleName": "./packages/perseus-editor/src/components/angle-input.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-vector-settings.tsx" + "moduleName": "./packages/perseus-editor/src/components/dropdown-option.tsx" } ] }, { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-examples.ts", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-examples.ts", + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/ellipse-swatch.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/ellipse-swatch.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx" } ] }, { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-select.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-select.tsx", + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/polygon-swatch.tsx", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/polygon-swatch.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figures-section.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" } ] }, { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx", + "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-examples.ts", + "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-examples.ts", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-figures-section.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx" } ] }, { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/labeled-row.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/labeled-row.tsx", + "id": "./vendor/hubble/hubble.js", + "name": "./vendor/hubble/hubble.js", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/components/interactive-graph-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/expression-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/interactive-graph-editor.tsx" + "moduleName": "./packages/perseus-editor/src/multirenderer-editor.tsx" + }, + { + "moduleName": "./packages/perseus/src/multi-items/multi-renderer.tsx" } ] }, { - "id": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/polygon-swatch.tsx", - "name": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/polygon-swatch.tsx", + "id": "./packages/perseus-editor/src/components/sortable.tsx", + "name": "./packages/perseus-editor/src/components/sortable.tsx", "reasons": [ { - "moduleName": "./packages/perseus-editor/src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/expression-editor.tsx" } ] }, @@ -9744,30 +9780,6 @@ } ] }, - { - "id": "./vendor/hubble/hubble.js", - "name": "./vendor/hubble/hubble.js", - "reasons": [ - { - "moduleName": "./packages/perseus-editor/src/widgets/expression-editor.tsx" - }, - { - "moduleName": "./packages/perseus-editor/src/multirenderer-editor.tsx" - }, - { - "moduleName": "./packages/perseus/src/multi-items/multi-renderer.tsx" - } - ] - }, - { - "id": "./packages/perseus-editor/src/components/sortable.tsx", - "name": "./packages/perseus-editor/src/components/sortable.tsx", - "reasons": [ - { - "moduleName": "./packages/perseus-editor/src/widgets/expression-editor.tsx" - } - ] - }, { "id": "./packages/perseus-editor/src/components/form-wrapped-text-field.tsx", "name": "./packages/perseus-editor/src/components/form-wrapped-text-field.tsx", @@ -9776,20 +9788,11 @@ "moduleName": "./packages/perseus-editor/src/widgets/label-image-editor.tsx" }, { - "moduleName": "./packages/perseus-editor/src/widgets/label-image/marker.tsx" + "moduleName": "./packages/perseus-editor/src/widgets/label-image/answer-choices.tsx" }, { "moduleName": "./packages/perseus-editor/src/widgets/label-image/select-image.tsx" }, - { - "moduleName": "./packages/perseus-editor/src/widgets/label-image/answer-choices.tsx" - } - ] - }, - { - "id": "./packages/perseus-editor/src/components/dropdown-option.tsx", - "name": "./packages/perseus-editor/src/components/dropdown-option.tsx", - "reasons": [ { "moduleName": "./packages/perseus-editor/src/widgets/label-image/marker.tsx" } @@ -9813,6 +9816,15 @@ } ] }, + { + "id": "./packages/perseus-editor/src/components/dropdown-option.tsx", + "name": "./packages/perseus-editor/src/components/dropdown-option.tsx", + "reasons": [ + { + "moduleName": "./packages/perseus-editor/src/widgets/label-image/marker.tsx" + } + ] + }, { "id": "./packages/perseus/src/styles/shared.ts", "name": "./packages/perseus/src/styles/shared.ts", @@ -9837,15 +9849,6 @@ } ] }, - { - "id": "./packages/perseus/src/widgets/expression/expression-validator.ts", - "name": "./packages/perseus/src/widgets/expression/expression-validator.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/expression/expression.tsx" - } - ] - }, { "id": "./packages/perseus/src/widgets/radio/choice-a11y-text.ts", "name": "./packages/perseus/src/widgets/radio/choice-a11y-text.ts", @@ -9868,77 +9871,77 @@ ] }, { - "id": "./packages/perseus/src/widgets/radio/choice-icon/cross-out-line.tsx", - "name": "./packages/perseus/src/widgets/radio/choice-icon/cross-out-line.tsx", + "id": "./packages/math-input/src/components/tabbar/index.ts", + "name": "./packages/math-input/src/components/tabbar/index.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/radio/choice-icon/choice-icon.tsx" + "moduleName": "./packages/math-input/src/components/keypad/keypad.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/radio/choice-icon/shared-styles.ts", - "name": "./packages/perseus/src/widgets/radio/choice-icon/shared-styles.ts", + "id": "./packages/math-input/src/components/keypad/keypad-pages/extras-page.tsx", + "name": "./packages/math-input/src/components/keypad/keypad-pages/extras-page.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/radio/choice-icon/choice-icon.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/radio/choice-icon/cross-out-line.tsx" + "moduleName": "./packages/math-input/src/components/keypad/keypad.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/numeric-input/numeric-input-validator.ts", - "name": "./packages/perseus/src/widgets/numeric-input/numeric-input-validator.ts", + "id": "./packages/math-input/src/components/keypad/keypad-pages/fractions-page.tsx", + "name": "./packages/math-input/src/components/keypad/keypad-pages/fractions-page.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/numeric-input/numeric-input.tsx" + "moduleName": "./packages/math-input/src/components/keypad/keypad.tsx" } ] }, { - "id": "./packages/perseus/src/util/scroll-utils.ts", - "name": "./packages/perseus/src/util/scroll-utils.ts", + "id": "./packages/math-input/src/components/keypad/shared-keys.tsx", + "name": "./packages/math-input/src/components/keypad/shared-keys.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" + "moduleName": "./packages/math-input/src/components/keypad/keypad.tsx" } ] }, { - "id": "./packages/math-input/src/components/tabbar/index.ts", - "name": "./packages/math-input/src/components/tabbar/index.ts", + "id": "./packages/perseus/src/widgets/radio/choice-icon/cross-out-line.tsx", + "name": "./packages/perseus/src/widgets/radio/choice-icon/cross-out-line.tsx", "reasons": [ { - "moduleName": "./packages/math-input/src/components/keypad/keypad.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/choice-icon/choice-icon.tsx" } ] }, { - "id": "./packages/math-input/src/components/keypad/keypad-pages/extras-page.tsx", - "name": "./packages/math-input/src/components/keypad/keypad-pages/extras-page.tsx", + "id": "./packages/perseus/src/widgets/radio/choice-icon/shared-styles.ts", + "name": "./packages/perseus/src/widgets/radio/choice-icon/shared-styles.ts", "reasons": [ { - "moduleName": "./packages/math-input/src/components/keypad/keypad.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/choice-icon/choice-icon.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/radio/choice-icon/cross-out-line.tsx" } ] }, { - "id": "./packages/math-input/src/components/keypad/keypad-pages/fractions-page.tsx", - "name": "./packages/math-input/src/components/keypad/keypad-pages/fractions-page.tsx", + "id": "./packages/perseus/src/util/scroll-utils.ts", + "name": "./packages/perseus/src/util/scroll-utils.ts", "reasons": [ { - "moduleName": "./packages/math-input/src/components/keypad/keypad.tsx" + "moduleName": "./packages/perseus/src/widgets/radio/base-radio.tsx" } ] }, { - "id": "./packages/math-input/src/components/keypad/shared-keys.tsx", - "name": "./packages/math-input/src/components/keypad/shared-keys.tsx", + "id": "./packages/perseus/src/widgets/expression/expression-validator.ts", + "name": "./packages/perseus/src/widgets/expression/expression-validator.ts", "reasons": [ { - "moduleName": "./packages/math-input/src/components/keypad/keypad.tsx" + "moduleName": "./packages/perseus/src/widgets/expression/expression.tsx" } ] }, @@ -9990,6 +9993,15 @@ } ] }, + { + "id": "./packages/perseus/src/widgets/numeric-input/numeric-input-validator.ts", + "name": "./packages/perseus/src/widgets/numeric-input/numeric-input-validator.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/numeric-input/numeric-input.tsx" + } + ] + }, { "id": "./packages/perseus-editor/src/components/simple-button.tsx", "name": "./packages/perseus-editor/src/components/simple-button.tsx", @@ -10008,6 +10020,15 @@ } ] }, + { + "id": "./packages/math-input/src/components/aphrodite-css-transition-group/index.tsx", + "name": "./packages/math-input/src/components/aphrodite-css-transition-group/index.tsx", + "reasons": [ + { + "moduleName": "./packages/math-input/src/components/keypad/mobile-keypad-internals.tsx" + } + ] + }, { "id": "./packages/perseus/src/widgets/input-number/input-number-validator.ts", "name": "./packages/perseus/src/widgets/input-number/input-number-validator.ts", @@ -10035,15 +10056,6 @@ } ] }, - { - "id": "./packages/math-input/src/components/aphrodite-css-transition-group/index.tsx", - "name": "./packages/math-input/src/components/aphrodite-css-transition-group/index.tsx", - "reasons": [ - { - "moduleName": "./packages/math-input/src/components/keypad/mobile-keypad-internals.tsx" - } - ] - }, { "id": "./packages/perseus/src/util/mobile-native-utils.ts", "name": "./packages/perseus/src/util/mobile-native-utils.ts", @@ -10083,15 +10095,6 @@ } ] }, - { - "id": "./packages/perseus/src/widgets/matcher/matcher-validator.ts", - "name": "./packages/perseus/src/widgets/matcher/matcher-validator.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/widgets/matcher/matcher.tsx" - } - ] - }, { "id": "./packages/perseus/src/widgets/label-image/hide-answers-toggle.tsx", "name": "./packages/perseus/src/widgets/label-image/hide-answers-toggle.tsx", @@ -10128,6 +10131,15 @@ } ] }, + { + "id": "./packages/perseus/src/widgets/matcher/matcher-validator.ts", + "name": "./packages/perseus/src/widgets/matcher/matcher-validator.ts", + "reasons": [ + { + "moduleName": "./packages/perseus/src/widgets/matcher/matcher.tsx" + } + ] + }, { "id": "./packages/perseus/src/components/highlighting/highlights.ts", "name": "./packages/perseus/src/components/highlighting/highlights.ts", @@ -10201,30 +10213,42 @@ ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/vector.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/vector.tsx", + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/segment.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-vector.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/ray.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear-system.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/utils.ts", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/utils.ts", + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/angle-indicators.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/angle-indicators.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx" }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" + } + ] + }, + { + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/svg-line.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/svg-line.tsx", + "reasons": [ { "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" }, @@ -10232,40 +10256,43 @@ "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/angle-indicators.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/vector.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx", + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/vector.tsx", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/vector.tsx", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/segment.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/linear-system.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/ray.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-vector.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx" } ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/angle-indicators.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/angle-indicators.tsx", + "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/utils.ts", + "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/utils.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/polygon.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/locked-figures/locked-line.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx" + }, + { + "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/angle-indicators.tsx" } ] }, @@ -10282,17 +10309,14 @@ ] }, { - "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/svg-line.tsx", - "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/svg-line.tsx", + "id": "./packages/perseus/src/components/highlighting/ui/util.ts", + "name": "./packages/perseus/src/components/highlighting/ui/util.ts", "reasons": [ { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/angle.tsx" - }, - { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/vector.tsx" + "moduleName": "./packages/perseus/src/components/highlighting/ui/highlight-tooltip.tsx" }, { - "moduleName": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/movable-line.tsx" + "moduleName": "./packages/perseus/src/components/highlighting/ui/highlight-renderer.tsx" } ] }, @@ -10305,18 +10329,6 @@ } ] }, - { - "id": "./packages/perseus/src/components/highlighting/ui/util.ts", - "name": "./packages/perseus/src/components/highlighting/ui/util.ts", - "reasons": [ - { - "moduleName": "./packages/perseus/src/components/highlighting/ui/highlight-tooltip.tsx" - }, - { - "moduleName": "./packages/perseus/src/components/highlighting/ui/highlight-renderer.tsx" - } - ] - }, { "id": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/css-transform-wrapper.tsx", "name": "./packages/perseus/src/widgets/interactive-graphs/graphs/components/css-transform-wrapper.tsx", diff --git a/project.json b/project.json index 810f2490df..fbb4028706 100644 --- a/project.json +++ b/project.json @@ -1 +1 @@ -{"generatedAt":1727886570506,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":true,"hasStorybookEslint":true,"refCount":0,"monorepo":"Workspaces","packageManager":{"type":"yarn","version":"1.22.22"},"typescriptOptions":{"reactDocgen":"react-docgen"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/react-vite","options":{}},"builder":"@storybook/builder-vite","renderer":"@storybook/react","storybookVersion":"7.6.17","storybookVersionSpecifier":"^7.6.17","language":"typescript","storybookPackages":{"@storybook/addon-actions":{"version":"7.6.17"},"@storybook/addon-controls":{"version":"7.6.17"},"@storybook/addon-viewport":{"version":"7.6.17"},"@storybook/react":{"version":"7.6.17"},"@storybook/react-vite":{"version":"7.6.17"},"eslint-plugin-storybook":{"version":"0.8.0"},"storybook":{"version":"7.6.17"}},"addons":{"@storybook/addon-links":{"version":"7.6.17"},"@storybook/addon-essentials":{"version":"7.6.17"},"@storybook/addon-a11y":{"version":"7.6.17"}}} +{"generatedAt":1727890703107,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":true,"hasStorybookEslint":true,"refCount":0,"monorepo":"Workspaces","packageManager":{"type":"yarn","version":"1.22.22"},"typescriptOptions":{"reactDocgen":"react-docgen"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/react-vite","options":{}},"builder":"@storybook/builder-vite","renderer":"@storybook/react","storybookVersion":"7.6.17","storybookVersionSpecifier":"^7.6.17","language":"typescript","storybookPackages":{"@storybook/addon-actions":{"version":"7.6.17"},"@storybook/addon-controls":{"version":"7.6.17"},"@storybook/addon-viewport":{"version":"7.6.17"},"@storybook/react":{"version":"7.6.17"},"@storybook/react-vite":{"version":"7.6.17"},"eslint-plugin-storybook":{"version":"0.8.0"},"storybook":{"version":"7.6.17"}},"addons":{"@storybook/addon-links":{"version":"7.6.17"},"@storybook/addon-essentials":{"version":"7.6.17"},"@storybook/addon-a11y":{"version":"7.6.17"}}}